diff options
author | Dmitry Stogov <dmitry@zend.com> | 2019-04-01 10:27:11 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2019-04-01 10:27:11 +0300 |
commit | 9a06876072b9ccb023d4a14426ccb587f10882f3 (patch) | |
tree | cd996a1a7ebdb99d9da9fbf3f5a35e1fe8193903 /TSRM | |
parent | a0fbb64fa3f68a9993b8dc12abb1524f4e0c5c3b (diff) | |
download | php-git-9a06876072b9ccb023d4a14426ccb587f10882f3.tar.gz |
Added JIT compiler for x86 and x86_64
Diffstat (limited to 'TSRM')
-rw-r--r-- | TSRM/TSRM.c | 20 | ||||
-rw-r--r-- | TSRM/TSRM.h | 1 |
2 files changed, 21 insertions, 0 deletions
diff --git a/TSRM/TSRM.c b/TSRM/TSRM.c index fa8e5f7736..2d17ffcabc 100644 --- a/TSRM/TSRM.c +++ b/TSRM/TSRM.c @@ -761,6 +761,26 @@ TSRM_API void *tsrm_get_ls_cache(void) return tsrm_tls_get(); }/*}}}*/ +/* Returns offset of tsrm_ls_cache slot from Thread Control Block address */ +TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void) +{/*{{{*/ +#if defined(__x86_64__) && defined(__GNUC__) + size_t ret; + + asm ("movq _tsrm_ls_cache@gottpoff(%%rip),%0" + : "=r" (ret)); + return ret; +#elif defined(__i386__) && defined(__GNUC__) + size_t ret; + + asm ("leal _tsrm_ls_cache@ntpoff,%0" + : "=r" (ret)); + return ret; +#else + return 0; +#endif +}/*}}}*/ + TSRM_API uint8_t tsrm_is_main_thread(void) {/*{{{*/ return in_main_thread; diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h index d5d9065530..c399e243c0 100644 --- a/TSRM/TSRM.h +++ b/TSRM/TSRM.h @@ -137,6 +137,7 @@ TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread TSRM_API void *tsrm_set_shutdown_handler(tsrm_shutdown_func_t shutdown_handler); TSRM_API void *tsrm_get_ls_cache(void); +TSRM_API size_t tsrm_get_ls_cache_tcb_offset(void); TSRM_API uint8_t tsrm_is_main_thread(void); TSRM_API const char *tsrm_api_name(void); |