@@ -4804,8 +4804,10 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
4804
4804
| // if (EXPECTED(Z_TYPE_P(dim) == IS_LONG))
4805
4805
| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >3
4806
4806
}
4807
- | // hval = Z_LVAL_P(dim);
4808
- | GET_ZVAL_LVAL ZREG_FCARG2a, op2_addr
4807
+ if (type == BP_VAR_W || type == BP_VAR_RW) {
4808
+ | // hval = Z_LVAL_P(dim);
4809
+ | GET_ZVAL_LVAL ZREG_FCARG2a, op2_addr
4810
+ }
4809
4811
if (op1_info & MAY_BE_ARRAY_KEY_LONG) {
4810
4812
if (Z_MODE(op2_addr) == IS_CONST_ZVAL) {
4811
4813
zend_long val = Z_LVAL_P(Z_ZV(op2_addr));
@@ -4843,6 +4845,10 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
4843
4845
}
4844
4846
}
4845
4847
} else {
4848
+ if (type != BP_VAR_W && type != BP_VAR_RW) {
4849
+ | // hval = Z_LVAL_P(dim);
4850
+ | GET_ZVAL_LVAL ZREG_FCARG2a, op2_addr
4851
+ }
4846
4852
| // ZEND_HASH_INDEX_FIND(ht, hval, retval, num_undef);
4847
4853
| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED
4848
4854
| jz >4 // HASH_FIND
@@ -4880,6 +4886,10 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
4880
4886
if (op1_info & MAY_BE_ARRAY_KEY_LONG) {
4881
4887
|4:
4882
4888
}
4889
+ if (Z_MODE(op2_addr) == IS_CONST_ZVAL) {
4890
+ | // hval = Z_LVAL_P(dim);
4891
+ | GET_ZVAL_LVAL ZREG_FCARG2a, op2_addr
4892
+ }
4883
4893
| EXT_CALL _zend_hash_index_find, r0
4884
4894
| test r0, r0
4885
4895
| jz >9 // NOT_FOUND
@@ -4907,6 +4917,10 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
4907
4917
}
4908
4918
|4:
4909
4919
}
4920
+ if (Z_MODE(op2_addr) == IS_CONST_ZVAL) {
4921
+ | // hval = Z_LVAL_P(dim);
4922
+ | GET_ZVAL_LVAL ZREG_FCARG2a, op2_addr
4923
+ }
4910
4924
| EXT_CALL _zend_hash_index_find, r0
4911
4925
| test r0, r0
4912
4926
if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R) {
0 commit comments