src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64MacroAssembler.java
--- a/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64MacroAssembler.java Mon Jun 18 16:13:21 2018 +0200
+++ b/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64MacroAssembler.java Mon Jun 18 09:48:22 2018 -0700
@@ -641,6 +641,26 @@
}
/**
+ * dst = src + immediate.
+ *
+ * @param size register size. Has to be 32 or 64.
+ * @param dst general purpose register. May not be null or zero-register.
+ * @param src general purpose register. May not be null or zero-register.
+ * @param immediate 64-bit signed int
+ */
+ public void add(int size, Register dst, Register src, long immediate) {
+ if (NumUtil.isInt(immediate)) {
+ add(size, dst, src, (int) immediate);
+ } else {
+ assert (!dst.equals(zr) && !src.equals(zr));
+ assert !dst.equals(src);
+ assert size == 64;
+ mov(dst, immediate);
+ add(size, src, dst, dst);
+ }
+ }
+
+ /**
* dst = src + aimm and sets condition flags.
*
* @param size register size. Has to be 32 or 64.