Skip to content

Commit fe9b5ce

Browse files
committed
Load constant value only if necessary
1 parent 66a5f9f commit fe9b5ce

File tree

1 file changed

+16
-2
lines changed

1 file changed

+16
-2
lines changed

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4804,8 +4804,10 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
48044804
| // if (EXPECTED(Z_TYPE_P(dim) == IS_LONG))
48054805
| IF_NOT_ZVAL_TYPE op2_addr, IS_LONG, >3
48064806
}
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+
}
48094811
if (op1_info & MAY_BE_ARRAY_KEY_LONG) {
48104812
if (Z_MODE(op2_addr) == IS_CONST_ZVAL) {
48114813
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
48434845
}
48444846
}
48454847
} 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+
}
48464852
| // ZEND_HASH_INDEX_FIND(ht, hval, retval, num_undef);
48474853
| test dword [FCARG1a + offsetof(zend_array, u.flags)], HASH_FLAG_PACKED
48484854
| jz >4 // HASH_FIND
@@ -4880,6 +4886,10 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
48804886
if (op1_info & MAY_BE_ARRAY_KEY_LONG) {
48814887
|4:
48824888
}
4889+
if (Z_MODE(op2_addr) == IS_CONST_ZVAL) {
4890+
| // hval = Z_LVAL_P(dim);
4891+
| GET_ZVAL_LVAL ZREG_FCARG2a, op2_addr
4892+
}
48834893
| EXT_CALL _zend_hash_index_find, r0
48844894
| test r0, r0
48854895
| jz >9 // NOT_FOUND
@@ -4907,6 +4917,10 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
49074917
}
49084918
|4:
49094919
}
4920+
if (Z_MODE(op2_addr) == IS_CONST_ZVAL) {
4921+
| // hval = Z_LVAL_P(dim);
4922+
| GET_ZVAL_LVAL ZREG_FCARG2a, op2_addr
4923+
}
49104924
| EXT_CALL _zend_hash_index_find, r0
49114925
| test r0, r0
49124926
if (JIT_G(trigger) == ZEND_JIT_ON_HOT_TRACE && type == BP_VAR_R) {

0 commit comments

Comments
 (0)