com php-src: Optimize fast path: Zend/zend_vm_def.h Zen d/zend_vm_execute.h

From: Date: Mon, 24 Aug 2015 09:47:06 +0000
Subject: com php-src: Optimize fast path: Zend/zend_vm_def.h Zen d/zend_vm_execute.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-88739@lists.php.net to get a copy of this message
Commit: db5898c9e55b33c9378295a8a85aa863202996bc Author: Dmitry Stogov <dmitry@zend.com> Mon, 24 Aug 2015 12:47:06 +0300 Parents: b928ea2de72f73687a4f55251ce68c9a96c8574a Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=db5898c9e55b33c9378295a8a85aa863202996bc Log: Optimize fast path Changed paths: M Zend/zend_vm_def.h M Zend/zend_vm_execute.h Diff: diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 7950780..7e374e5 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -7628,20 +7628,30 @@ ZEND_VM_C_LABEL(check_indirect): } } - variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); - do { zend_reference *ref; if (UNEXPECTED(!Z_ISREF_P(value))) { - ZVAL_NEW_REF(value, value); - } else if (UNEXPECTED(variable_ptr == value)) { - break; + ref = (zend_reference*)emalloc(sizeof(zend_reference)); + GC_REFCOUNT(ref) = 2; + GC_TYPE_INFO(ref) = IS_REFERENCE; + ZVAL_COPY_VALUE(&ref->val, value); + Z_REF_P(value) = ref; + Z_TYPE_INFO_P(value) = IS_REFERENCE_EX; + } else { + ref = Z_REF_P(value); + GC_REFCOUNT(ref)++; } - ref = Z_REF_P(value); - GC_REFCOUNT(ref)++; + + variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); + if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) { - if (!Z_DELREF_P(variable_ptr)) { + uint32_t refcnt = Z_DELREF_P(variable_ptr); + + if (UNEXPECTED(variable_ptr == value)) { + break; + } + if (refcnt == 0) { SAVE_OPLINE(); zval_dtor_func_for_ptr(Z_COUNTED_P(variable_ptr)); if (UNEXPECTED(EG(exception))) { diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 3f54a01..fef3e96 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -32798,20 +32798,30 @@ check_indirect: } } - variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var); - do { zend_reference *ref; if (UNEXPECTED(!Z_ISREF_P(value))) { - ZVAL_NEW_REF(value, value); - } else if (UNEXPECTED(variable_ptr == value)) { - break; + ref = (zend_reference*)emalloc(sizeof(zend_reference)); + GC_REFCOUNT(ref) = 2; + GC_TYPE_INFO(ref) = IS_REFERENCE; + ZVAL_COPY_VALUE(&ref->val, value); + Z_REF_P(value) = ref; + Z_TYPE_INFO_P(value) = IS_REFERENCE_EX; + } else { + ref = Z_REF_P(value); + GC_REFCOUNT(ref)++; } - ref = Z_REF_P(value); - GC_REFCOUNT(ref)++; + + variable_ptr = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->op1.var); + if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) { - if (!Z_DELREF_P(variable_ptr)) { + uint32_t refcnt = Z_DELREF_P(variable_ptr); + + if (UNEXPECTED(variable_ptr == value)) { + break; + } + if (refcnt == 0) { SAVE_OPLINE(); zval_dtor_func_for_ptr(Z_COUNTED_P(variable_ptr)); if (UNEXPECTED(EG(exception))) {

« previous php.cvs (#88739) next »