From 8b8cf8f8f507c503282465264e2f9e0f72ef4b03 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 28 Feb 2022 10:58:14 +0300 Subject: [PATCH] JIT: Fix register clobbering --- ext/opcache/jit/zend_jit_arm64.dasc | 20 ++++++++++---------- ext/opcache/tests/jit/assign_dim_op_007.phpt | 2 -- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/ext/opcache/jit/zend_jit_arm64.dasc b/ext/opcache/jit/zend_jit_arm64.dasc index 6d6bc471ec2..31b52606054 100644 --- a/ext/opcache/jit/zend_jit_arm64.dasc +++ b/ext/opcache/jit/zend_jit_arm64.dasc @@ -3816,7 +3816,7 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op | LOAD_64BIT_VAL TMP1, val | fmov Rd(Z_REG(op1_def_addr)-ZREG_V0), TMP1 } else { - | SET_ZVAL_LVAL op1_def_addr, val, REG0, TMP1 + | SET_ZVAL_LVAL op1_def_addr, val, TMP2, TMP1 } } else { uint64_t val = 0xc3e0000000000000; @@ -3824,7 +3824,7 @@ static int zend_jit_inc_dec(dasm_State **Dst, const zend_op *opline, uint32_t op | LOAD_64BIT_VAL TMP1, val | fmov Rd(Z_REG(op1_def_addr)-ZREG_V0), TMP1 } else { - | SET_ZVAL_LVAL op1_def_addr, val, REG0, TMP1 + | SET_ZVAL_LVAL op1_def_addr, val, TMP2, TMP1 } } if (Z_MODE(op1_def_addr) == IS_MEM_ZVAL) { @@ -4155,7 +4155,7 @@ static int zend_jit_math_long_long(dasm_State **Dst, | LOAD_64BIT_VAL TMP1, val | fmov Rd(Z_REG(res_addr)-ZREG_V0), TMP1 } else { - | SET_ZVAL_LVAL res_addr, val, REG0, TMP1 + | SET_ZVAL_LVAL res_addr, val, TMP2, TMP1 } break; } else if (opcode == ZEND_SUB) { @@ -4164,7 +4164,7 @@ static int zend_jit_math_long_long(dasm_State **Dst, | LOAD_64BIT_VAL TMP1, val | fmov Rd(Z_REG(res_addr)-ZREG_V0), TMP1 } else { - | SET_ZVAL_LVAL res_addr, val, REG0, TMP1 + | SET_ZVAL_LVAL res_addr, val, TMP2, TMP1 } break; } @@ -12942,20 +12942,20 @@ static int zend_jit_incdec_obj(dasm_State **Dst, |3: if (opline->opcode == ZEND_PRE_INC_OBJ || opline->opcode == ZEND_POST_INC_OBJ) { uint64_t val = 0x43e0000000000000; - | LOAD_64BIT_VAL REG0, val - | SET_ZVAL_LVAL_FROM_REG var_addr, REG0, TMP1 + | LOAD_64BIT_VAL TMP2, val + | SET_ZVAL_LVAL_FROM_REG var_addr, TMP2, TMP1 | SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE, TMP1w, TMP2 if (opline->opcode == ZEND_PRE_INC_OBJ && opline->result_type != IS_UNUSED) { - | SET_ZVAL_LVAL_FROM_REG res_addr, REG0, TMP1 + | SET_ZVAL_LVAL_FROM_REG res_addr, TMP2, TMP1 | SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE, TMP1w, TMP2 } } else { uint64_t val = 0xc3e0000000000000; - | LOAD_64BIT_VAL REG0, val - | SET_ZVAL_LVAL_FROM_REG var_addr, REG0, TMP1 + | LOAD_64BIT_VAL TMP2, val + | SET_ZVAL_LVAL_FROM_REG var_addr, TMP2, TMP1 | SET_ZVAL_TYPE_INFO var_addr, IS_DOUBLE, TMP1w, TMP2 if (opline->opcode == ZEND_PRE_DEC_OBJ && opline->result_type != IS_UNUSED) { - | SET_ZVAL_LVAL_FROM_REG res_addr, REG0, TMP1 + | SET_ZVAL_LVAL_FROM_REG res_addr, TMP2, TMP1 | SET_ZVAL_TYPE_INFO res_addr, IS_DOUBLE, TMP1w, TMP2 } } diff --git a/ext/opcache/tests/jit/assign_dim_op_007.phpt b/ext/opcache/tests/jit/assign_dim_op_007.phpt index cf7125c2a45..e8708a12551 100644 --- a/ext/opcache/tests/jit/assign_dim_op_007.phpt +++ b/ext/opcache/tests/jit/assign_dim_op_007.phpt @@ -5,8 +5,6 @@ opcache.enable=1 opcache.enable_cli=1 opcache.file_update_protection=0 opcache.jit_buffer_size=1M ---XFAIL-- -See https://github.com/php/php-src/issues/8147 --FILE--