@@ -4064,24 +4064,14 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op
40644064 | // ZVAL_DEREF(var_ptr);
40654065 if (op1_info & MAY_BE_REF) {
40664066 | IF_NOT_Z_TYPE, FCARG1a, IS_REFERENCE, >2
4067- | GET_Z_PTR FCARG2a, FCARG1a
4068- | cmp aword [FCARG2a + offsetof(zend_reference, sources.ptr)], 0
4069- | lea FCARG1a, [FCARG2a + offsetof(zend_reference, val)]
4070- | jz >2
4071- |.if X64
4072- if (RETURN_VALUE_USED(opline)) {
4073- | LOAD_ZVAL_ADDR CARG3, res_addr
4074- } else {
4075- | mov CARG3, 0
4076- }
4077- |.else
4078- | sub r4, 12
4079- if (RETURN_VALUE_USED(opline)) {
4080- | PUSH_ZVAL_ADDR res_addr, r0
4081- } else {
4082- | push 0
4083- }
4084- |.endif
4067+ | GET_Z_PTR FCARG1a, FCARG1a
4068+ | cmp aword [FCARG1a + offsetof(zend_reference, sources.ptr)], 0
4069+ | jz >1
4070+ if (RETURN_VALUE_USED(opline)) {
4071+ | LOAD_ZVAL_ADDR FCARG2a, res_addr
4072+ } else {
4073+ | xor FCARG2a, FCARG2a
4074+ }
40854075 if (opline->opcode == ZEND_PRE_INC) {
40864076 | EXT_CALL zend_jit_pre_inc_typed_ref, r0
40874077 } else if (opline->opcode == ZEND_PRE_DEC) {
@@ -4093,11 +4083,10 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op
40934083 } else {
40944084 ZEND_UNREACHABLE();
40954085 }
4096- |.if not(X64)
4097- | add r4, 12
4098- |.endif
40994086 zend_jit_check_exception(Dst);
41004087 | jmp >3
4088+ |1:
4089+ | lea FCARG1a, [FCARG1a + offsetof(zend_reference, val)]
41014090 |2:
41024091 }
41034092
@@ -12516,33 +12505,24 @@ static int zend_jit_incdec_obj(dasm_State **Dst,
1251612505 if (!prop_info || !ZEND_TYPE_IS_SET(prop_info->type)) {
1251712506 zend_jit_addr var_addr = prop_addr;
1251812507
12519- var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_R0 , 0);
12520- | LOAD_ZVAL_ADDR r0 , prop_addr
12508+ var_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a , 0);
12509+ | LOAD_ZVAL_ADDR FCARG1a , prop_addr
1252112510
1252212511 | IF_NOT_ZVAL_TYPE var_addr, IS_REFERENCE, >2
12523- | GET_ZVAL_PTR FCARG2a , var_addr
12524- | cmp aword [FCARG2a + offsetof(zend_reference, sources.ptr)], 0
12512+ | GET_ZVAL_PTR FCARG1a , var_addr
12513+ | cmp aword [FCARG1a + offsetof(zend_reference, sources.ptr)], 0
1252512514 | jnz >1
12526- | lea r0 , aword [FCARG2a + offsetof(zend_reference, val)]
12515+ | lea FCARG1a , aword [FCARG1a + offsetof(zend_reference, val)]
1252712516 |.cold_code
1252812517 |1:
12529- | lea FCARG1a, [FCARG2a + offsetof(zend_reference, val)]
1253012518 if (opline) {
1253112519 | SET_EX_OPLINE opline, r0
1253212520 }
12533- |.if X64
12534- if (opline->result_type == IS_UNUSED) {
12535- | xor CARG3, CARG3
12536- } else {
12537- | LOAD_ZVAL_ADDR CARG3, res_addr
12538- }
12539- |.else
12540- if (opline->result_type == IS_UNUSED) {
12541- | push 0
12542- } else {
12543- | PUSH_ZVAL_ADDR res_addr, r0
12544- }
12545- |.endif
12521+ if (opline->result_type == IS_UNUSED) {
12522+ | xor FCARG2a, FCARG2a
12523+ } else {
12524+ | LOAD_ZVAL_ADDR FCARG2a, res_addr
12525+ }
1254612526 switch (opline->opcode) {
1254712527 case ZEND_PRE_INC_OBJ:
1254812528 | EXT_CALL zend_jit_pre_inc_typed_ref, r0
@@ -12559,9 +12539,6 @@ static int zend_jit_incdec_obj(dasm_State **Dst,
1255912539 default:
1256012540 ZEND_UNREACHABLE();
1256112541 }
12562- |.if not(X64)
12563- | add r4, 12
12564- |.endif
1256512542 | jmp >9
1256612543 |.code
1256712544
@@ -12580,16 +12557,13 @@ static int zend_jit_incdec_obj(dasm_State **Dst,
1258012557 | jo >3
1258112558 if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_PRE_DEC_OBJ) {
1258212559 if (opline->result_type != IS_UNUSED) {
12583- | ZVAL_COPY_VALUE res_addr, -1, var_addr, MAY_BE_LONG, ZREG_R1 , ZREG_R2
12560+ | ZVAL_COPY_VALUE res_addr, -1, var_addr, MAY_BE_LONG, ZREG_R0 , ZREG_R2
1258412561 }
1258512562 }
1258612563 |.cold_code
1258712564 |2:
12588- | LOAD_ZVAL_ADDR FCARG1a, var_addr
1258912565 if (opline->opcode == ZEND_POST_INC_OBJ || opline->opcode == ZEND_POST_DEC_OBJ) {
12590- zend_jit_addr val_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, 0);
12591-
12592- | ZVAL_COPY_VALUE res_addr, -1, val_addr, MAY_BE_ANY, ZREG_R0, ZREG_R2
12566+ | ZVAL_COPY_VALUE res_addr, -1, var_addr, MAY_BE_ANY, ZREG_R0, ZREG_R2
1259312567 | TRY_ADDREF MAY_BE_ANY, ah, r2
1259412568 }
1259512569 if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_POST_INC_OBJ) {
0 commit comments