Skip to content

Commit e7be7f3

Browse files
authored
JIT/AArch64: Use ZR directly to zero FP register (#7081)
Zero register, i.e. xzr, can be used directly to zero FP register. TODO: FMOV from ZR may be slow on some cores and the preferred instructio is MOVI with immediate zero [1]. However, MOVI is not recoginized by DynASM/arm64. [1] https://gcc.gnu.org/git/?p=gcc.git;a=commitdiff;h=523d72071960 Change-Id: I0eaee4445e05adb45c6bb80ddb62ea02cdc9f4db
1 parent 27be667 commit e7be7f3

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

ext/opcache/jit/zend_jit_arm64.dasc

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -885,8 +885,7 @@ static int logical_immediate_p (uint64_t value, uint32_t reg_size)
885885
// Convert the LONG value 'lval' into DOUBLE type, and move it into 'reg'
886886
|.macro DOUBLE_GET_LONG, reg, lval, tmp_reg
887887
|| if (lval == 0) {
888-
| mov Rx(tmp_reg), xzr
889-
| fmov Rd(reg-ZREG_V0), Rx(tmp_reg)
888+
| fmov Rd(reg-ZREG_V0), xzr // TODO: "movi d0, #0" is not recognized by DynASM/arm64
890889
|| } else {
891890
| LOAD_64BIT_VAL Rx(tmp_reg), lval
892891
| scvtf Rd(reg-ZREG_V0), Rx(tmp_reg)
@@ -8084,8 +8083,7 @@ static int zend_jit_bool_jmpznz(dasm_State **Dst, const zend_op *opline, uint32_
80848083
}
80858084

80868085
if ((op1_info & MAY_BE_ANY) == MAY_BE_DOUBLE) {
8087-
| mov TMP1, xzr
8088-
| fmov FPR0, TMP1
8086+
| fmov FPR0, xzr // TODO: "movi d0, #0" is not recognized by DynASM/arm64
80898087
| DOUBLE_CMP ZREG_FPR0, op1_addr, ZREG_TMP1, ZREG_FPTMP
80908088

80918089
if (set_bool) {

0 commit comments

Comments
 (0)