@@ -4329,12 +4329,17 @@ static int zend_jit_math_long_long(dasm_State **Dst,
4329
4329
}
4330
4330
4331
4331
do {
4332
- if ((Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op1_addr)) == 1) ||
4333
- (Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 1)) {
4332
+ if ((sizeof(void*) == 8 || Z_MODE(res_addr) != IS_REG) &&
4333
+ ((Z_MODE(op1_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op1_addr)) == 1) ||
4334
+ (Z_MODE(op2_addr) == IS_CONST_ZVAL && Z_LVAL_P(Z_ZV(op2_addr)) == 1))) {
4334
4335
if (opcode == ZEND_ADD) {
4335
4336
|.if X64
4336
4337
| mov64 rax, 0x43e0000000000000
4337
- | SET_ZVAL_LVAL res_addr, rax
4338
+ if (Z_MODE(res_addr) == IS_REG) {
4339
+ | movd xmm(Z_REG(res_addr)-ZREG_XMM0), rax
4340
+ } else {
4341
+ | SET_ZVAL_LVAL res_addr, rax
4342
+ }
4338
4343
|.else
4339
4344
| SET_ZVAL_LVAL res_addr, 0
4340
4345
| SET_ZVAL_W2 res_addr, 0x41e00000
@@ -4343,7 +4348,11 @@ static int zend_jit_math_long_long(dasm_State **Dst,
4343
4348
} else if (opcode == ZEND_SUB) {
4344
4349
|.if X64
4345
4350
| mov64 rax, 0xc3e0000000000000
4346
- | SET_ZVAL_LVAL res_addr, rax
4351
+ if (Z_MODE(res_addr) == IS_REG) {
4352
+ | movd xmm(Z_REG(res_addr)-ZREG_XMM0), rax
4353
+ } else {
4354
+ | SET_ZVAL_LVAL res_addr, rax
4355
+ }
4347
4356
|.else
4348
4357
| SET_ZVAL_LVAL res_addr, 0x00200000
4349
4358
| SET_ZVAL_W2 res_addr, 0xc1e00000
0 commit comments