Skip to content

Commit 8b8cf8f

Browse files
committed
JIT: Fix register clobbering
1 parent 33cd61c commit 8b8cf8f

File tree

2 files changed

+10
-12
lines changed

2 files changed

+10
-12
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3816,15 +3816,15 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op
38163816
| LOAD_64BIT_VAL TMP1, val
38173817
| fmov Rd(Z_REG(op1_def_addr)-ZREG_V0), TMP1
38183818
} else {
3819-
| SET_ZVAL_LVAL op1_def_addr, val, REG0, TMP1
3819+
| SET_ZVAL_LVAL op1_def_addr, val, TMP2, TMP1
38203820
}
38213821
} else {
38223822
uint64_t val = 0xc3e0000000000000;
38233823
if (Z_MODE(op1_def_addr) == IS_REG) {
38243824
| LOAD_64BIT_VAL TMP1, val
38253825
| fmov Rd(Z_REG(op1_def_addr)-ZREG_V0), TMP1
38263826
} else {
3827-
| SET_ZVAL_LVAL op1_def_addr, val, REG0, TMP1
3827+
| SET_ZVAL_LVAL op1_def_addr, val, TMP2, TMP1
38283828
}
38293829
}
38303830
if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) {
@@ -4155,7 +4155,7 @@ static int zend_jit_math_long_long(dasm_State **Dst,
41554155
| LOAD_64BIT_VAL TMP1, val
41564156
| fmov Rd(Z_REG(res_addr)-ZREG_V0), TMP1
41574157
} else {
4158-
| SET_ZVAL_LVAL res_addr, val, REG0, TMP1
4158+
| SET_ZVAL_LVAL res_addr, val, TMP2, TMP1
41594159
}
41604160
break;
41614161
} else if (opcode == ZEND_SUB) {
@@ -4164,7 +4164,7 @@ static int zend_jit_math_long_long(dasm_State **Dst,
41644164
| LOAD_64BIT_VAL TMP1, val
41654165
| fmov Rd(Z_REG(res_addr)-ZREG_V0), TMP1
41664166
} else {
4167-
| SET_ZVAL_LVAL res_addr, val, REG0, TMP1
4167+
| SET_ZVAL_LVAL res_addr, val, TMP2, TMP1
41684168
}
41694169
break;
41704170
}
@@ -12942,20 +12942,20 @@ static int zend_jit_incdec_obj(dasm_State **Dst,
1294212942
|3:
1294312943
if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_POST_INC_OBJ) {
1294412944
uint64_t val = 0x43e0000000000000;
12945-
| LOAD_64BIT_VAL REG0, val
12946-
| SET_ZVAL_LVAL_FROM_REG var_addr, REG0, TMP1
12945+
| LOAD_64BIT_VAL TMP2, val
12946+
| SET_ZVAL_LVAL_FROM_REG var_addr, TMP2, TMP1
1294712947
| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE, TMP1w, TMP2
1294812948
if (opline->opcode == ZEND_PRE_INC_OBJ && opline->result_type != IS_UNUSED) {
12949-
| SET_ZVAL_LVAL_FROM_REG res_addr, REG0, TMP1
12949+
| SET_ZVAL_LVAL_FROM_REG res_addr, TMP2, TMP1
1295012950
| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE, TMP1w, TMP2
1295112951
}
1295212952
} else {
1295312953
uint64_t val = 0xc3e0000000000000;
12954-
| LOAD_64BIT_VAL REG0, val
12955-
| SET_ZVAL_LVAL_FROM_REG var_addr, REG0, TMP1
12954+
| LOAD_64BIT_VAL TMP2, val
12955+
| SET_ZVAL_LVAL_FROM_REG var_addr, TMP2, TMP1
1295612956
| SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE, TMP1w, TMP2
1295712957
if (opline->opcode == ZEND_PRE_DEC_OBJ && opline->result_type != IS_UNUSED) {
12958-
| SET_ZVAL_LVAL_FROM_REG res_addr, REG0, TMP1
12958+
| SET_ZVAL_LVAL_FROM_REG res_addr, TMP2, TMP1
1295912959
| SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE, TMP1w, TMP2
1296012960
}
1296112961
}

ext/opcache/tests/jit/assign_dim_op_007.phpt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ opcache.enable=1
55
opcache.enable_cli=1
66
opcache.file_update_protection=0
77
opcache.jit_buffer_size=1M
8-
--XFAIL--
9-
See https://github.com/php/php-src/issues/8147
108
--FILE--
119
<?php
1210
class test {

0 commit comments

Comments
 (0)