Skip to content

Commit 96c3465

Browse files
committed
JIT: Avoid useless EX(func) load
1 parent 608d568 commit 96c3465

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9028,11 +9028,11 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
90289028
| str REG2, EX:RX->run_time_cache
90299029
}
90309030
} else {
9031+
// Always defined as ZEND_MAP_PTR_KIND_PTR_OR_OFFSET. See Zend/zend_map_ptr.h.
9032+
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
90319033
if (func) {
90329034
| ldr REG0, EX:RX->func
90339035
}
9034-
// Always defined as ZEND_MAP_PTR_KIND_PTR_OR_OFFSET. See Zend/zend_map_ptr.h.
9035-
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
90369036
| 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
@@ -9043,11 +9043,17 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
90439043
| ldr REG2, [REG2]
90449044
} else if ((func->op_array.fn_flags & ZEND_ACC_IMMUTABLE)
90459045
&& (!func->op_array.scope || (func->op_array.scope->ce_flags & ZEND_ACC_LINKED))) {
9046+
if (func) {
9047+
| ldr REG0, EX:RX->func
9048+
}
90469049
| ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
90479050
| MEM_LOAD_OP_ZTS add, ldr, REG2, compiler_globals, map_ptr_base, REG1, TMP1
90489051
| ldr REG2, [REG2]
90499052
} else {
90509053
/* the called op_array may be not persisted yet */
9054+
if (func) {
9055+
| ldr REG0, EX:RX->func
9056+
}
90519057
| ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
90529058
| TST_64_WITH_ONE REG2
90539059
| beq >1
@@ -9056,6 +9062,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
90569062
| ldr REG2, [REG2]
90579063
}
90589064
} else {
9065+
if (func) {
9066+
| ldr REG0, EX:RX->func
9067+
}
90599068
| ldr REG2, [REG0, #offsetof(zend_op_array, run_time_cache__ptr)]
90609069
| TST_64_WITH_ONE REG2
90619070
| beq >1

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9652,10 +9652,10 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
96529652
| mov EX:RX->run_time_cache, r2
96539653
}
96549654
} else {
9655+
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
96559656
if (func) {
96569657
| mov r0, EX:RX->func
96579658
}
9658-
#if ZEND_MAP_PTR_KIND == ZEND_MAP_PTR_KIND_PTR
96599659
| 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
@@ -9665,11 +9665,17 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
96659665
| mov r2, aword [r2 + (uintptr_t)ZEND_MAP_PTR(func->op_array.run_time_cache)]
96669666
} else if ((func->op_array.fn_flags & ZEND_ACC_IMMUTABLE)
96679667
&& (!func->op_array.scope || (func->op_array.scope->ce_flags & ZEND_ACC_LINKED))) {
9668+
if (func) {
9669+
| mov r0, EX:RX->func
9670+
}
96689671
| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)]
96699672
| MEM_LOAD_OP_ZTS add, r2, aword, compiler_globals, map_ptr_base, r1
96709673
| mov r2, aword [r2]
96719674
} else {
96729675
/* the called op_array may be not persisted yet */
9676+
if (func) {
9677+
| mov r0, EX:RX->func
9678+
}
96739679
| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)]
96749680
| test r2, 1
96759681
| jz >1
@@ -9678,6 +9684,9 @@ static int zend_jit_do_fcall(dasm_State **Dst, const zend_op *opline, const zend
96789684
| mov r2, aword [r2]
96799685
}
96809686
} else {
9687+
if (func) {
9688+
| mov r0, EX:RX->func
9689+
}
96819690
| mov r2, aword [r0 + offsetof(zend_op_array, run_time_cache__ptr)]
96829691
| test r2, 1
96839692
| jz >1

0 commit comments

Comments
 (0)