From: Dmitry Stogov Date: Fri, 28 Dec 2018 12:34:33 +0000 (+0300) Subject: Micro optimization X-Git-Tag: php-7.4.0alpha1~1324 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b8d6aac5ada998fd69c4387f784216babde8edfb;p=php Micro optimization --- diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 560ee34d38..b82982bd33 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3834,21 +3834,25 @@ ZEND_VM_HOT_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY) } } } else if (OP1_TYPE == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (OP1_TYPE == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index b4f63d12b8..73a47fbc4b 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2662,21 +2662,25 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_ } } } else if (IS_CONST == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@ -17883,21 +17887,25 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HA } } } else if (IS_TMP_VAR == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@ -20653,21 +20661,25 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HA } } } else if (IS_VAR == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@ -36822,21 +36834,25 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HAN } } } else if (IS_CV == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@ -55337,21 +55353,25 @@ zend_leave_helper_SPEC_LABEL: } } } else if (IS_CONST == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@ -57047,21 +57067,25 @@ zend_leave_helper_SPEC_LABEL: } } } else if (IS_TMP_VAR == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@ -57333,21 +57357,25 @@ zend_leave_helper_SPEC_LABEL: } } } else if (IS_VAR == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@ -58975,21 +59003,25 @@ zend_leave_helper_SPEC_LABEL: } } } else if (IS_CV == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - ZVAL_NULL(retval_ptr); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { + ZVAL_COPY_VALUE(return_value, retval_ptr); + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); + } } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr);