@@ -5057,9 +5057,6 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5057
5057
5058
5058
if (opcode == ZEND_MOD) {
5059
5059
result_reg = ZREG_RAX;
5060
- if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) {
5061
- | mov aword T1, r0 // save
5062
- }
5063
5060
} else if (Z_MODE(res_addr) == IS_REG) {
5064
5061
if ((opline->opcode == ZEND_SL || opline->opcode == ZEND_SR)
5065
5062
&& opline->op2_type != IS_CONST) {
@@ -5184,6 +5181,11 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5184
5181
| GET_ZVAL_LVAL result_reg, op1_addr
5185
5182
| LONG_MATH ZEND_BW_AND, result_reg, tmp_addr
5186
5183
} else {
5184
+ if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) {
5185
+ | mov aword T1, r0 // save
5186
+ } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RCX) {
5187
+ | mov aword T1, Ra(ZREG_RCX) // save
5188
+ }
5187
5189
result_reg = ZREG_RDX;
5188
5190
if (op2_lval == -1) {
5189
5191
| xor Ra(result_reg), Ra(result_reg)
@@ -5199,6 +5201,8 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5199
5201
}
5200
5202
if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) {
5201
5203
| mov r0, aword T1 // restore
5204
+ } else if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RCX) {
5205
+ | mov Ra(ZREG_RCX), aword T1 // restore
5202
5206
}
5203
5207
}
5204
5208
} else {
@@ -5240,6 +5244,9 @@ static int zend_jit_long_math_helper(dasm_State **Dst,
5240
5244
|.code
5241
5245
}
5242
5246
5247
+ if (Z_MODE(res_addr) == IS_MEM_ZVAL && Z_REG(res_addr) == ZREG_RAX) {
5248
+ | mov aword T1, r0 // save
5249
+ }
5243
5250
result_reg = ZREG_RDX;
5244
5251
| GET_ZVAL_LVAL ZREG_RAX, op1_addr
5245
5252
|.if X64
0 commit comments