-
Enhancement
-
Resolution: Unresolved
-
P4
-
8, 8-repo-arm64, 9, 10
-
arm, aarch64
On arm32 and arm64, expressions like AddP (LShiftL (IConvI2L src1) src2) can be
done in a single ADD instruction. However, when the matcher sees that the
LShiftL is "shared", it forces it into a register. So instead of getting
ADD R_R6,R_R0,R_R1 sxtw #3
FLDD R_V8,[R_R6 + #16]
ADD R_R4,R_R2,R_R1 sxtw #3
[...]
FSTD R_V10,[R_R4 + #16]
we end up with:
SXTW R_R4,R_R1 ! int->long
LSL R_R4,R_R4,#3 ! long
ADD R_R6,R_R0,R_R4 ! ptr
FLDD R_V8,[R_R6 + #16]
ADD R_R4,R_R2,R_R4 ! ptr
[...]
FSTD R_V10,[R_R4 + #16]
done in a single ADD instruction. However, when the matcher sees that the
LShiftL is "shared", it forces it into a register. So instead of getting
ADD R_R6,R_R0,R_R1 sxtw #3
FLDD R_V8,[R_R6 + #16]
ADD R_R4,R_R2,R_R1 sxtw #3
[...]
FSTD R_V10,[R_R4 + #16]
we end up with:
SXTW R_R4,R_R1 ! int->long
LSL R_R4,R_R4,#3 ! long
ADD R_R6,R_R0,R_R4 ! ptr
FLDD R_V8,[R_R6 + #16]
ADD R_R4,R_R2,R_R4 ! ptr
[...]
FSTD R_V10,[R_R4 + #16]
- relates to
-
JDK-8154826 AArch64: take better advantage of base + shifted offset addressing mode
- Resolved