From 6e23e84332e32551300a0635e3b0eb5ddf41d8c6 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 26 Dec 2017 16:49:34 +0300 Subject: [PATCH] Use zval constructors instead ZVAL_COPY if we know the types --- Zend/zend_vm_def.h | 12 +++++++----- Zend/zend_vm_execute.h | 32 +++++++++++++++++--------------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 287c36498f..9f531f67b4 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1133,7 +1133,7 @@ ZEND_VM_HELPER(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -1256,7 +1256,7 @@ ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY) var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } @@ -1288,7 +1288,7 @@ ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY) var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } @@ -8701,10 +8701,11 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DO zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); } else { + ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr)); Z_DVAL_P(var_ptr)++; } ZEND_VM_NEXT_OPCODE(); @@ -8738,10 +8739,11 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DO zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); } else { + ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr)); Z_DVAL_P(var_ptr)--; } ZEND_VM_NEXT_OPCODE(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 927bde994a..b77d675f5e 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -11945,10 +11945,11 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_OR_D zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); } else { + ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr)); Z_DVAL_P(var_ptr)++; } ZEND_VM_NEXT_OPCODE(); @@ -11982,10 +11983,11 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_OR_D zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); } else { + ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr)); Z_DVAL_P(var_ptr)--; } ZEND_VM_NEXT_OPCODE(); @@ -21532,7 +21534,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } @@ -21564,7 +21566,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } @@ -23729,7 +23731,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -26166,7 +26168,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -30018,7 +30020,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -32399,7 +32401,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -34224,7 +34226,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -36585,7 +36587,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -38252,7 +38254,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_ var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } @@ -38283,7 +38285,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_ var_ptr = _get_zval_ptr_cv_undef_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } @@ -41021,7 +41023,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -45111,7 +45113,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { @@ -50920,7 +50922,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SP ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { - ZVAL_COPY_VALUE(EX_VAR(opline->result.var), zptr); + ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { -- 2.50.1