@@ -5000,9 +5000,6 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5000
5000
5001
5001
if (opcode == ZEND_MOD) {
5002
5002
result_reg = ZREG_RAX;
5003
- if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) {
5004
- | mov aword T1, r0 // save
5005
- }
5006
5003
} else if (Z_MODE(res_addr) == IS_REG) {
5007
5004
if ((opline->opcode == ZEND_SL || opline->opcode == ZEND_SR)
5008
5005
&& opline->op2_type != IS_CONST) {
@@ -5127,6 +5124,11 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5127
5124
| GET_ZVAL_LVAL result_reg, op1_addr
5128
5125
| LONG_MATH ZEND_BW_AND, result_reg, tmp_addr
5129
5126
} else {
5127
+ if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) {
5128
+ | mov aword T1, r0 // save
5129
+ } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RCX) {
5130
+ | mov aword T1, Ra(ZREG_RCX) // save
5131
+ }
5130
5132
result_reg = ZREG_RDX;
5131
5133
if (op2_lval == -1) {
5132
5134
| xor Ra(result_reg), Ra(result_reg)
@@ -5142,6 +5144,8 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5142
5144
}
5143
5145
if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) {
5144
5146
| mov r0, aword T1 // restore
5147
+ } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RCX) {
5148
+ | mov Ra(ZREG_RCX), aword T1 // restore
5145
5149
}
5146
5150
}
5147
5151
} else {
@@ -5183,6 +5187,9 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5183
5187
|.code
5184
5188
}
5185
5189
5190
+ if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) {
5191
+ | mov aword T1, r0 // save
5192
+ }
5186
5193
result_reg = ZREG_RDX;
5187
5194
| GET_ZVAL_LVAL ZREG_RAX, op1_addr
5188
5195
|.if X64
0 commit comments