mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Save a TSRMLS_FETCH() for zval_ptr_dtor in executor
This gives me about 9% improvement on Zend/bench.php for a zts build.
This commit is contained in:
parent
8748e146b9
commit
bdfa03d79d
6 changed files with 12 additions and 15 deletions
|
@ -94,7 +94,7 @@ static zend_always_inline void zend_pzval_unlock_free_func(zval *z TSRMLS_DC)
|
|||
}
|
||||
|
||||
#undef zval_ptr_dtor
|
||||
#define zval_ptr_dtor(pzv) i_zval_ptr_dtor(*(pzv) ZEND_FILE_LINE_CC)
|
||||
#define zval_ptr_dtor(pzv) i_zval_ptr_dtor(*(pzv) ZEND_FILE_LINE_CC TSRMLS_CC)
|
||||
|
||||
#define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f, 1 TSRMLS_CC)
|
||||
#define PZVAL_UNLOCK_EX(z, f, u) zend_pzval_unlock_func(z, f, u TSRMLS_CC)
|
||||
|
@ -1500,7 +1500,7 @@ void zend_clean_and_cache_symbol_table(HashTable *symbol_table TSRMLS_DC) /* {{{
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_always_inline void i_free_compiled_variables(zend_execute_data *execute_data) /* {{{ */
|
||||
static zend_always_inline void i_free_compiled_variables(zend_execute_data *execute_data TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zval ***cv = EX_CV_NUM(execute_data, 0);
|
||||
zval ***end = cv + EX(op_array)->last_var;
|
||||
|
@ -1513,9 +1513,9 @@ static zend_always_inline void i_free_compiled_variables(zend_execute_data *exec
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
void zend_free_compiled_variables(zend_execute_data *execute_data) /* {{{ */
|
||||
void zend_free_compiled_variables(zend_execute_data *execute_data TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
i_free_compiled_variables(execute_data);
|
||||
i_free_compiled_variables(execute_data TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
|
@ -71,18 +71,14 @@ ZEND_API int zend_eval_stringl_ex(char *str, int str_len, zval *retval_ptr, char
|
|||
ZEND_API char * zend_verify_arg_class_kind(const zend_arg_info *cur_arg_info, ulong fetch_type, const char **class_name, zend_class_entry **pce TSRMLS_DC);
|
||||
ZEND_API int zend_verify_arg_error(int error_type, const zend_function *zf, zend_uint arg_num, const char *need_msg, const char *need_kind, const char *given_msg, const char *given_kind TSRMLS_DC);
|
||||
|
||||
static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC)
|
||||
static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC TSRMLS_DC)
|
||||
{
|
||||
if (!Z_DELREF_P(zval_ptr)) {
|
||||
TSRMLS_FETCH();
|
||||
|
||||
ZEND_ASSERT(zval_ptr != &EG(uninitialized_zval));
|
||||
GC_REMOVE_ZVAL_FROM_BUFFER(zval_ptr);
|
||||
zval_dtor(zval_ptr);
|
||||
efree_rel(zval_ptr);
|
||||
} else {
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (Z_REFCOUNT_P(zval_ptr) == 1) {
|
||||
Z_UNSET_ISREF_P(zval_ptr);
|
||||
}
|
||||
|
@ -295,7 +291,7 @@ static zend_always_inline void zend_vm_stack_clear_multiple(int nested TSRMLS_DC
|
|||
while (p != end) {
|
||||
zval *q = (zval *) *(--p);
|
||||
*p = NULL;
|
||||
i_zval_ptr_dtor(q ZEND_FILE_LINE_CC);
|
||||
i_zval_ptr_dtor(q ZEND_FILE_LINE_CC TSRMLS_CC);
|
||||
}
|
||||
if (nested) {
|
||||
EG(argument_stack)->top = p;
|
||||
|
@ -394,7 +390,7 @@ ZEND_API zval **zend_get_zval_ptr_ptr(int op_type, const znode_op *node, const z
|
|||
ZEND_API int zend_do_fcall(ZEND_OPCODE_HANDLER_ARGS);
|
||||
|
||||
void zend_clean_and_cache_symbol_table(HashTable *symbol_table TSRMLS_DC);
|
||||
void zend_free_compiled_variables(zend_execute_data *execute_data);
|
||||
void zend_free_compiled_variables(zend_execute_data *execute_data TSRMLS_DC);
|
||||
|
||||
#define CACHED_PTR(num) \
|
||||
EG(active_op_array)->run_time_cache[(num)]
|
||||
|
|
|
@ -423,7 +423,8 @@ ZEND_API zend_bool zend_is_executing(TSRMLS_D) /* {{{ */
|
|||
|
||||
ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC) /* {{{ */
|
||||
{
|
||||
i_zval_ptr_dtor(*zval_ptr ZEND_FILE_LINE_RELAY_CC);
|
||||
TSRMLS_FETCH();
|
||||
i_zval_ptr_dtor(*zval_ptr ZEND_FILE_LINE_RELAY_CC TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ ZEND_API void zend_generator_close(zend_generator *generator, zend_bool finished
|
|||
zend_op_array *op_array = execute_data->op_array;
|
||||
|
||||
if (!execute_data->symbol_table) {
|
||||
zend_free_compiled_variables(execute_data);
|
||||
zend_free_compiled_variables(execute_data TSRMLS_CC);
|
||||
} else {
|
||||
zend_clean_and_cache_symbol_table(execute_data->symbol_table TSRMLS_CC);
|
||||
}
|
||||
|
|
|
@ -1833,7 +1833,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY)
|
|||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
EG(opline_ptr) = NULL;
|
||||
if (!EG(active_symbol_table)) {
|
||||
i_free_compiled_variables(execute_data);
|
||||
i_free_compiled_variables(execute_data TSRMLS_CC);
|
||||
}
|
||||
|
||||
zend_vm_stack_free((char*)execute_data - (ZEND_MM_ALIGNED_SIZE(sizeof(temp_variable)) * op_array->T) TSRMLS_CC);
|
||||
|
|
|
@ -396,7 +396,7 @@ static int ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
|
|||
EG(current_execute_data) = EX(prev_execute_data);
|
||||
EG(opline_ptr) = NULL;
|
||||
if (!EG(active_symbol_table)) {
|
||||
i_free_compiled_variables(execute_data);
|
||||
i_free_compiled_variables(execute_data TSRMLS_CC);
|
||||
}
|
||||
|
||||
zend_vm_stack_free((char*)execute_data - (ZEND_MM_ALIGNED_SIZE(sizeof(temp_variable)) * op_array->T) TSRMLS_CC);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue