< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64Assembler.java

Print this page

        

*** 24,33 **** --- 24,34 ---- import static jdk.vm.ci.aarch64.AArch64.cpuRegisters; 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; import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.BFM; import static org.graalvm.compiler.asm.aarch64.AArch64Assembler.Instruction.BIC;
*** 1314,1332 **** /* PC-relative Address Calculation (5.4.4) */ /** * 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. * * @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); ! // } /** * Adds a 21-bit signed offset to the program counter and writes the result to dst. * * @param dst general purpose register. May not be null, zero-register or stackpointer. --- 1315,1331 ---- /* PC-relative Address Calculation (5.4.4) */ /** * 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. */ ! 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. * * @param dst general purpose register. May not be null, zero-register or stackpointer.
*** 1338,1347 **** --- 1337,1350 ---- public void adr(Register dst, int imm21, int pos) { 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); // higher 19 bit int immHi = (imm >> 2) << PcRelImmHiOffset;
< prev index next >