--- old/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64Assembler.java 2018-03-23 16:36:15.081076307 +0000 +++ new/src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64Assembler.java 2018-03-23 16:36:14.441139583 +0000 @@ -26,6 +26,7 @@ import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.ADD; import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.ADDS; import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.ADR; +import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.ADRP; import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.AND; import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.ANDS; import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.ASRV; @@ -1316,15 +1317,13 @@ /** * Address of page: sign extends 21-bit offset, shifts if left by 12 and adds it to the value of * the PC with its bottom 12-bits cleared, writing the result to dst. + * No offset is emiited; the instruction will be patched later. * * @param dst general purpose register. May not be null, zero-register or stackpointer. - * @param imm Signed 33-bit offset with lower 12bits clear. */ - // protected void adrp(Register dst, long imm) { - // assert (imm & NumUtil.getNbitNumberInt(12)) == 0 : "Lower 12-bit of immediate must be zero."; - // assert NumUtil.isSignedNbit(33, imm); - // addressCalculationInstruction(dst, (int) (imm >>> 12), Instruction.ADRP); - // } + public void adrp(Register dst) { + emitInt(ADRP.encoding | PcRelImmOp | rd(dst) ); + } /** * Adds a 21-bit signed offset to the program counter and writes the result to dst. @@ -1340,6 +1339,10 @@ emitInt(ADR.encoding | PcRelImmOp | rd(dst) | getPcRelativeImmEncoding(imm21), pos); } + public void adrp(Register dst, int pageOffset) { + emitInt(ADRP.encoding | PcRelImmOp | rd(dst) | getPcRelativeImmEncoding(pageOffset)); + } + private static int getPcRelativeImmEncoding(int imm21) { assert NumUtil.isSignedNbit(21, imm21); int imm = imm21 & NumUtil.getNbitNumberInt(21);