hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64MacroAssembler.java
--- a/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64MacroAssembler.java Fri Jul 07 10:37:52 2017 +0200
+++ b/hotspot/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64MacroAssembler.java Fri Jul 07 09:40:47 2017 -0700
@@ -146,10 +146,10 @@
return new AddressGenerationPlan(ADD_TO_BASE, REGISTER_OFFSET, needsScratch);
}
} else {
- if (NumUtil.isSignedNbit(9, displacement)) {
+ if (displacementScalable && NumUtil.isUnsignedNbit(12, scaledDisplacement)) {
+ return new AddressGenerationPlan(NO_WORK, IMMEDIATE_SCALED, false);
+ } else if (NumUtil.isSignedNbit(9, displacement)) {
return new AddressGenerationPlan(NO_WORK, IMMEDIATE_UNSCALED, false);
- } else if (displacementScalable && NumUtil.isUnsignedNbit(12, scaledDisplacement)) {
- return new AddressGenerationPlan(NO_WORK, IMMEDIATE_SCALED, false);
} else {
boolean needsScratch = !isArithmeticImmediate(displacement);
return new AddressGenerationPlan(ADD_TO_BASE, REGISTER_OFFSET, needsScratch);