Skip to content

Commit 3565d02

Browse files
committed
JIT: Eliminate load of op_array->run_time_cache__ptr and use immediate value for immutable op_arrays if it's known at compile time
1 parent d16992a commit 3565d02

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9031,26 +9031,32 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
90319031
if (func) {
90329032
| ldr REG0, EX:RX->func
90339033
}
9034-
| ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
90359034
// Always defined as ZEND_MAP_PTR_KIND_PTR_OR_OFFSET. See Zend/zend_map_ptr.h.
90369035
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
9036+
| ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
90379037
| ldr REG2, [REG2]
90389038
#elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
90399039
if (func && !(func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
90409040
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]
90429044
} else if ((func->op_array.fn_flags & ZEND_ACC_IMMUTABLE)
90439045
&& (!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)]
90449047
| MEM_LOAD_OP_ZTS add, ldr, REG2, compiler_globals, map_ptr_base, REG1, TMP1
9048+
| ldr REG2, [REG2]
90459049
} else {
90469050
/* the called op_array may be not persisted yet */
9051+
| ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
90479052
| TST_64_WITH_ONE REG2
90489053
| beq >1
90499054
| MEM_LOAD_OP_ZTS add, ldr, REG2, compiler_globals, map_ptr_base, REG1, TMP1
90509055
|1:
9056+
| ldr REG2, [REG2]
90519057
}
9052-
| ldr REG2, [REG2]
90539058
} else {
9059+
| ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
90549060
| TST_64_WITH_ONE REG2
90559061
| beq >1
90569062
| MEM_LOAD_OP_ZTS add, ldr, REG2, compiler_globals, map_ptr_base, REG1, TMP1

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9655,25 +9655,30 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
96559655
if (func) {
96569656
| mov r0, EX:RX->func
96579657
}
9658-
| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)]
96599658
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
9659+
| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)]
96609660
| mov r2, aword [r2]
96619661
#elif ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR_OR_OFFSET
96629662
if (func && !(func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
96639663
if (ZEND_MAP_PTR_IS_OFFSET(func->op_array.run_time_cache)) {
9664-
| MEM_LOAD_OP_ZTS add, r2, aword, compiler_globals, map_ptr_base, r1
9664+
| MEM_LOAD_ZTS r2, aword, compiler_globals, map_ptr_base, r1
9665+
| mov r2, aword [r2 + (uintptr_t)ZEND_MAP_PTR(func->op_array.run_time_cache)]
96659666
} else if ((func->op_array.fn_flags & ZEND_ACC_IMMUTABLE)
96669667
&& (!func->op_array.scope || (func->op_array.scope->ce_flags & ZEND_ACC_LINKED))) {
9668+
| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)]
96679669
| MEM_LOAD_OP_ZTS add, r2, aword, compiler_globals, map_ptr_base, r1
9670+
| mov r2, aword [r2]
96689671
} else {
96699672
/* the called op_array may be not persisted yet */
9673+
| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)]
96709674
| test r2, 1
96719675
| jz >1
96729676
| MEM_LOAD_OP_ZTS add, r2, aword, compiler_globals, map_ptr_base, r1
96739677
|1:
9678+
| mov r2, aword [r2]
96749679
}
9675-
| mov r2, aword [r2]
96769680
} else {
9681+
| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)]
96779682
| test r2, 1
96789683
| jz >1
96799684
| MEM_LOAD_OP_ZTS add, r2, aword, compiler_globals, map_ptr_base, r1

0 commit comments

Comments
 (0)