--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ArithmeticLIRGenerator.java 2019-03-28 07:36:41.208439058 +0100 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64ArithmeticLIRGenerator.java 2019-03-28 07:36:40.820436463 +0100 @@ -62,11 +62,26 @@ public class AArch64ArithmeticLIRGenerator extends ArithmeticLIRGenerator implements AArch64ArithmeticLIRGeneratorTool { + public AArch64ArithmeticLIRGenerator(AllocatableValue nullRegisterValue) { + this.nullRegisterValue = nullRegisterValue; + } + + private final AllocatableValue nullRegisterValue; + @Override public AArch64LIRGenerator getLIRGen() { return (AArch64LIRGenerator) super.getLIRGen(); } + public boolean mustReplaceNullWithNullRegister(JavaConstant nullConstant) { + /* Uncompressed null pointers only */ + return nullRegisterValue != null && JavaConstant.NULL_POINTER.equals(nullConstant); + } + + public AllocatableValue getNullRegisterValue() { + return nullRegisterValue; + } + @Override protected boolean isNumericInteger(PlatformKind kind) { return ((AArch64Kind) kind).isInteger(); @@ -485,11 +500,6 @@ } @Override - public void emitCompareOp(AArch64Kind cmpKind, Variable left, Value right) { - throw GraalError.unimplemented(); - } - - @Override public Value emitRound(Value value, RoundingMode mode) { AArch64ArithmeticOp op; switch (mode) {