com php-src: using pointer to the tsrm ls cache instead of a function call: TSRM/TSRM.h Zend/zend.c Zend/zend.h Zend/zend_alloc.c Zen d/zend_gc.h
Zend/zend_globals_macros.h Zend/zend _signal.h Zend/zend_virtual_cwd.h win32/build /config.w32

From: Date: Wed, 01 Oct 2014 20:04:21 +0000
Subject: com php-src: using pointer to the tsrm ls cache instead of a function call: TSRM/TSRM.h Zend/zend.c Zend/zend.h Zend/zend_alloc.c Zen d/zend_gc.h
Zend/zend_globals_macros.h Zend/zend _signal.h Zend/zend_virtual_cwd.h win32/build /config.w32
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-82047@lists.php.net to get a copy of this message
Commit: 76081df168829a5cc0409fac47c217d4927ec6f6 Author: Anatol Belski <ab@php.net> Wed, 1 Oct 2014 22:04:21 +0200 Parents: c161b95cdfbd45bd90c0327d29e1c967a4152c28 Branches: native-tls Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=76081df168829a5cc0409fac47c217d4927ec6f6 Log: using pointer to the tsrm ls cache instead of a function call yet another approach Changed paths: M TSRM/TSRM.h M Zend/zend.c M Zend/zend.h M Zend/zend_alloc.c M Zend/zend_gc.h M Zend/zend_globals_macros.h M Zend/zend_signal.h M Zend/zend_virtual_cwd.h M win32/build/config.w32 Diff: diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h index 89d2133..4f73455 100644 --- a/TSRM/TSRM.h +++ b/TSRM/TSRM.h @@ -170,7 +170,13 @@ TSRM_API inline void *tsrm_get_ls_cache(void); #define TSRMLS_FETCH_FROM_CTX(ctx) void ***tsrm_ls = (void ***) ctx #define TSRMLS_SET_CTX(ctx) ctx = (void ***) tsrm_get_ls_cache() #define TSRMG(id, type, element) (((type) (*((void ***) tsrm_get_ls_cache()))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element) -#define TSRMGP(id, type, element) (((type) (*((void ***) tsrm_ls_cache))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element) + +#define TSRMG_STATIC(id, type, element) (((type) (*((void ***) _tsrm_ls_cache))[TSRM_UNSHUFFLE_RSRC_ID(id)])->element) +#define TSRMLS_CACHE_EXTERN TSRM_TLS extern void *_tsrm_ls_cache +#define TSRMLS_CACHE_DEFINE TSRM_TLS void *_tsrm_ls_cache +#define TSRMLS_CACHE_UPDATE _tsrm_ls_cache = tsrm_get_ls_cache() + +/* BC only */ #define TSRMLS_D #define TSRMLS_DC #define TSRMLS_C @@ -185,6 +191,13 @@ TSRM_API inline void *tsrm_get_ls_cache(void); #define TSRMLS_FETCH() #define TSRMLS_FETCH_FROM_CTX(ctx) #define TSRMLS_SET_CTX(ctx) + +#define TSRMG_STATIC(id, type, element) +#define TSRMLS_CACHE_EXTERN +#define TSRMLS_CACHE_DEFINE +#define TSRMLS_CACHE_UPDATE + +/* BC only */ #define TSRMLS_D void #define TSRMLS_DC #define TSRMLS_C diff --git a/Zend/zend.c b/Zend/zend..c index 2fe5544..6494441 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -120,6 +120,7 @@ static HashTable *global_class_table = NULL; static HashTable *global_constants_table = NULL; static HashTable *global_auto_globals_table = NULL; static HashTable *global_persistent_list = NULL; +ZEND_TSRMLS_CACHE_DEFINE; #endif ZEND_API zend_utility_values zend_uv; @@ -580,6 +581,7 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions TS zend_executor_globals *executor_globals; extern ZEND_API ts_rsrc_id ini_scanner_globals_id; extern ZEND_API ts_rsrc_id language_scanner_globals_id; + ZEND_TSRMLS_CACHE_UPDATE; #else extern zend_ini_scanner_globals ini_scanner_globals; extern zend_php_scanner_globals language_scanner_globals; diff --git a/Zend/zend.h b/Zend/zend.h index 517d419..2c1ebc8 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -61,6 +61,20 @@ !ZEND_USER_CODE(EG(current_execute_data)->prev_execute_data->func->common.type) || \ !(EG(current_execute_data)->prev_execute_data->opline->result_type & EXT_TYPE_UNUSED)) +#ifdef ZEND_ENABLE_STATIC_TSRMLS_CACHE +#define ZEND_TSRMG TSRMG_STATIC +#define ZEND_TSRMLS_CACHE_EXTERN TSRMLS_CACHE_EXTERN +#define ZEND_TSRMLS_CACHE_DEFINE TSRMLS_CACHE_DEFINE +#define ZEND_TSRMLS_CACHE_UPDATE TSRMLS_CACHE_UPDATE +#else +#define ZEND_TSRMG TSRMG +#define ZEND_TSRMLS_CACHE_EXTERN +#define ZEND_TSRMLS_CACHE_DEFINE +#define ZEND_TSRMLS_CACHE_UPDATE +#endif + +ZEND_TSRMLS_CACHE_EXTERN; + #ifdef HAVE_NORETURN # if defined(ZEND_WIN32) ZEND_API ZEND_NORETURN void zend_error_noreturn(int type, const char *format, ...); diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 4d65e2d..a78c8b2 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -2007,7 +2007,7 @@ typedef struct _zend_alloc_globals { #ifdef ZTS static int alloc_globals_id; -# define AG(v) TSRMG(alloc_globals_id, zend_alloc_globals *, v) +# define AG(v) ZEND_TSRMG(alloc_globals_id, zend_alloc_globals *, v) #else # define AG(v) (alloc_globals.v) static zend_alloc_globals alloc_globals; @@ -2285,6 +2285,7 @@ ZEND_API void shutdown_memory_manager(int silent, int full_shutdown TSRMLS_DC) static void alloc_globals_ctor(zend_alloc_globals *alloc_globals TSRMLS_DC) { + #if ZEND_MM_CUSTOM char *tmp = getenv("USE_ZEND_ALLOC"); @@ -2298,6 +2299,7 @@ static void alloc_globals_ctor(zend_alloc_globals *alloc_globals TSRMLS_DC) return; } #endif + ZEND_TSRMLS_CACHE_UPDATE; alloc_globals->mm_heap = zend_mm_init(); } diff --git a/Zend/zend_gc.h b/Zend/zend_gc.h index 2eb8ea6..d502f09 100644 --- a/Zend/zend_gc.h +++ b/Zend/zend_gc.h @@ -112,7 +112,7 @@ typedef struct _zend_gc_globals { BEGIN_EXTERN_C() ZEND_API extern int gc_globals_id; END_EXTERN_C() -#define GC_G(v) TSRMG(gc_globals_id, zend_gc_globals *, v) +#define GC_G(v) ZEND_TSRMG(gc_globals_id, zend_gc_globals *, v) #else #define GC_G(v) (gc_globals.v) extern ZEND_API zend_gc_globals gc_globals; diff --git a/Zend/zend_globals_macros.h b/Zend/zend_globals_macros.h index e6e7136..7678b2b 100644 --- a/Zend/zend_globals_macros.h +++ b/Zend/zend_globals_macros.h @@ -31,7 +31,7 @@ BEGIN_EXTERN_C() /* Compiler */ #ifdef ZTS -# define CG(v) TSRMG(compiler_globals_id, zend_compiler_globals *, v) +# define CG(v) ZEND_TSRMG(compiler_globals_id, zend_compiler_globals *, v) #else # define CG(v) (compiler_globals.v) extern ZEND_API struct _zend_compiler_globals compiler_globals; @@ -41,7 +41,7 @@ int zendparse(void); /* Executor */ #ifdef ZTS -# define EG(v) TSRMG(executor_globals_id, zend_executor_globals *, v) +# define EG(v) ZEND_TSRMG(executor_globals_id, zend_executor_globals *, v) #else # define EG(v) (executor_globals.v) extern ZEND_API zend_executor_globals executor_globals; @@ -49,7 +49,7 @@ extern ZEND_API zend_executor_globals executor_globals; /* Language Scanner */ #ifdef ZTS -# define LANG_SCNG(v) TSRMG(language_scanner_globals_id, zend_php_scanner_globals *, v) +# define LANG_SCNG(v) ZEND_TSRMG(language_scanner_globals_id, zend_php_scanner_globals *, v) extern ZEND_API ts_rsrc_id language_scanner_globals_id; #else # define LANG_SCNG(v) (language_scanner_globals.v) @@ -59,7 +59,7 @@ extern ZEND_API zend_php_scanner_globals language_scanner_globals; /* INI Scanner */ #ifdef ZTS -# define INI_SCNG(v) TSRMG(ini_scanner_globals_id, zend_ini_scanner_globals *, v) +# define INI_SCNG(v) ZEND_TSRMG(ini_scanner_globals_id, zend_ini_scanner_globals *, v) extern ZEND_API ts_rsrc_id ini_scanner_globals_id; #else # define INI_SCNG(v) (ini_scanner_globals.v) diff --git a/Zend/zend_signal.h b/Zend/zend_signal.h index 02d6495..8e99a50 100644 --- a/Zend/zend_signal.h +++ b/Zend/zend_signal.h @@ -65,7 +65,7 @@ typedef struct _zend_signal_globals_t { } zend_signal_globals_t; #ifdef ZTS -# define SIGG(v) TSRMG(zend_signal_globals_id, zend_signal_globals_t *, v) +# define SIGG(v) ZEND_TSRMG(zend_signal_globals_id, zend_signal_globals_t *, v) BEGIN_EXTERN_C() ZEND_API extern int zend_signal_globals_id; END_EXTERN_C() diff --git a/Zend/zend_virtual_cwd.h b/Zend/zend_virtual_cwd.h index f40a2de..34caaff 100644 --- a/Zend/zend_virtual_cwd.h +++ b/Zend/zend_virtual_cwd.h @@ -237,7 +237,7 @@ typedef struct _virtual_cwd_globals { #ifdef ZTS extern ts_rsrc_id cwd_globals_id; -# define CWDG(v) TSRMG(cwd_globals_id, virtual_cwd_globals *, v) +# define CWDG(v) ZEND_TSRMG(cwd_globals_id, virtual_cwd_globals *, v) #else extern virtual_cwd_globals cwd_globals; # define CWDG(v) (cwd_globals.v) diff --git a/win32/build/config.w32 b/win32/build/config.w32 index 5806343..613fc55 100644 --- a/win32/build/config.w32 +++ b/win32/build/config.w32 @@ -365,6 +365,8 @@ ADD_SOURCES("Zend", "zend_language_parser.c zend_language_scanner.c \ zend_float.c zend_string.c zend_generators.c zend_virtual_cwd.c zend_ast.c \ zend_inheritance.c"); +ADD_FLAG("CFLAGS_BD_ZEND", "/D ZEND_ENABLE_STATIC_TSRMLS_CACHE=1"); + if (VCVERS == 1200) { AC_DEFINE('ZEND_DVAL_TO_LVAL_CAST_OK', 1); }

« previous php.cvs (#82047) next »