@@ -9031,26 +9031,32 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
9031
9031
if (func) {
9032
9032
| ldr REG0, EX:RX->func
9033
9033
}
9034
- | ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
9035
9034
// Always defined as ZEND_MAP_PTR_KIND_PTR_OR_OFFSET. See Zend/zend_map_ptr.h.
9036
9035
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
9036
+ | ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
9037
9037
| ldr REG2, [REG2]
9038
9038
#elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
9039
9039
if (func && !(func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
9040
9040
if (ZEND_MAP_PTR_IS_OFFSET(func->op_array.run_time_cache)) {
9041
- | MEM_LOAD_OP_ZTS add, ldr, REG2, compiler_globals, map_ptr_base, REG1, TMP1
9041
+ | MEM_LOAD_64_ZTS ldr, REG2, compiler_globals, map_ptr_base, TMP1
9042
+ | ADD_SUB_64_WITH_CONST add, REG2, REG2, (uintptr_t)ZEND_MAP_PTR(func->op_array.run_time_cache), TMP1
9043
+ | ldr REG2, [REG2]
9042
9044
} else if ((func->op_array.fn_flags & ZEND_ACC_IMMUTABLE)
9043
9045
&& (!func->op_array.scope || (func->op_array.scope->ce_flags & ZEND_ACC_LINKED))) {
9046
+ | ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
9044
9047
| MEM_LOAD_OP_ZTS add, ldr, REG2, compiler_globals, map_ptr_base, REG1, TMP1
9048
+ | ldr REG2, [REG2]
9045
9049
} else {
9046
9050
/* the called op_array may be not persisted yet */
9051
+ | ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
9047
9052
| TST_64_WITH_ONE REG2
9048
9053
| beq >1
9049
9054
| MEM_LOAD_OP_ZTS add, ldr, REG2, compiler_globals, map_ptr_base, REG1, TMP1
9050
9055
|1:
9056
+ | ldr REG2, [REG2]
9051
9057
}
9052
- | ldr REG2, [REG2]
9053
9058
} else {
9059
+ | ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
9054
9060
| TST_64_WITH_ONE REG2
9055
9061
| beq >1
9056
9062
| MEM_LOAD_OP_ZTS add, ldr, REG2, compiler_globals, map_ptr_base, REG1, TMP1
0 commit comments