diff --git a/ext/opcache/jit/zend_jit_arm64.dasc b/ext/opcache/jit/zend_jit_arm64.dasc index 432d3a6b1e9bb..16d0f458e6c3d 100644 --- a/ext/opcache/jit/zend_jit_arm64.dasc +++ b/ext/opcache/jit/zend_jit_arm64.dasc @@ -7722,7 +7722,6 @@ static int zend_jit_identical(dasm_State **Dst, } op1_addr = real_addr; } - | LOAD_ZVAL_ADDR FCARG1x, op1_addr } if (opline->op2_type != IS_CONST) { if (Z_MODE(op2_addr) == IS_REG) { @@ -7734,6 +7733,9 @@ static int zend_jit_identical(dasm_State **Dst, } | LOAD_ZVAL_ADDR FCARG2x, op2_addr } + if (opline->op1_type != IS_CONST) { + | LOAD_ZVAL_ADDR FCARG1x, op1_addr + } } if ((op1_info & op2_info & MAY_BE_ANY) == 0) { diff --git a/ext/opcache/jit/zend_jit_x86.dasc b/ext/opcache/jit/zend_jit_x86.dasc index 6749f8a1e1cc7..bc0c9520d6f9b 100644 --- a/ext/opcache/jit/zend_jit_x86.dasc +++ b/ext/opcache/jit/zend_jit_x86.dasc @@ -8309,7 +8309,6 @@ static int zend_jit_identical(dasm_State **Dst, } op1_addr = real_addr; } - | LOAD_ZVAL_ADDR FCARG1a, op1_addr } if (opline->op2_type != IS_CONST) { if (Z_MODE(op2_addr) == IS_REG) { @@ -8321,6 +8320,9 @@ static int zend_jit_identical(dasm_State **Dst, } | LOAD_ZVAL_ADDR FCARG2a, op2_addr } + if (opline->op1_type != IS_CONST) { + | LOAD_ZVAL_ADDR FCARG1a, op1_addr + } } if ((op1_info & op2_info & MAY_BE_ANY) == 0) { diff --git a/ext/opcache/tests/jit/identical_003.phpt b/ext/opcache/tests/jit/identical_003.phpt new file mode 100644 index 0000000000000..389fc366c24ad --- /dev/null +++ b/ext/opcache/tests/jit/identical_003.phpt @@ -0,0 +1,19 @@ +--TEST-- +JIT IDENTICAL: 003 register allocation +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.file_update_protection=0 +opcache.jit_buffer_size=1M +opcache.protect_memory=1 +--EXTENSIONS-- +opcache +--FILE-- + +--EXPECT-- +bool(true)