src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64Address.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
hotspot Cdiff src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64Address.java
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64Address.java
Print this page
*** 23,33 ****
package org.graalvm.compiler.asm.aarch64;
import static jdk.vm.ci.aarch64.AArch64.zr;
import org.graalvm.compiler.asm.AbstractAddress;
! import org.graalvm.compiler.asm.NumUtil;
import org.graalvm.compiler.debug.GraalError;
import jdk.vm.ci.aarch64.AArch64;
import jdk.vm.ci.code.Register;
--- 23,33 ----
package org.graalvm.compiler.asm.aarch64;
import static jdk.vm.ci.aarch64.AArch64.zr;
import org.graalvm.compiler.asm.AbstractAddress;
! import org.graalvm.compiler.core.common.NumUtil;
import org.graalvm.compiler.debug.GraalError;
import jdk.vm.ci.aarch64.AArch64;
import jdk.vm.ci.code.Register;
*** 272,295 ****
}
/**
* @return immediate in correct representation for the given addressing mode. For example in
* case of <code>addressingMode ==IMMEDIATE_UNSCALED </code> the value will be returned
! * as the 9bit signed representation.
*/
public int getImmediate() {
switch (addressingMode) {
case IMMEDIATE_UNSCALED:
case IMMEDIATE_POST_INDEXED:
case IMMEDIATE_PRE_INDEXED:
// 9-bit signed value
return immediate & NumUtil.getNbitNumberInt(9);
case IMMEDIATE_SCALED:
// Unsigned value can be returned as-is.
return immediate;
case PC_LITERAL:
// 21-bit signed value, but lower 2 bits are always 0 and are shifted out.
return (immediate >> 2) & NumUtil.getNbitNumberInt(19);
default:
throw GraalError.shouldNotReachHere("Should only be called for addressing modes that use immediate values.");
}
}
--- 272,298 ----
}
/**
* @return immediate in correct representation for the given addressing mode. For example in
* case of <code>addressingMode ==IMMEDIATE_UNSCALED </code> the value will be returned
! * as the 9-bit signed representation.
*/
public int getImmediate() {
switch (addressingMode) {
case IMMEDIATE_UNSCALED:
case IMMEDIATE_POST_INDEXED:
case IMMEDIATE_PRE_INDEXED:
// 9-bit signed value
+ assert NumUtil.isSignedNbit(9, immediate);
return immediate & NumUtil.getNbitNumberInt(9);
case IMMEDIATE_SCALED:
// Unsigned value can be returned as-is.
+ assert NumUtil.isUnsignedNbit(9, immediate);
return immediate;
case PC_LITERAL:
// 21-bit signed value, but lower 2 bits are always 0 and are shifted out.
+ assert NumUtil.isSignedNbit(19, immediate >> 2);
return (immediate >> 2) & NumUtil.getNbitNumberInt(19);
default:
throw GraalError.shouldNotReachHere("Should only be called for addressing modes that use immediate values.");
}
}
*** 354,359 ****
--- 357,387 ----
default:
throw GraalError.shouldNotReachHere();
}
}
+ /**
+ * Loads an address into Register r.
+ *
+ * @param masm the macro assembler.
+ * @param r general purpose register. May not be null.
+ */
+ public void lea(AArch64MacroAssembler masm, Register r) {
+ switch (addressingMode) {
+ case IMMEDIATE_UNSCALED:
+ if (immediate == 0 && base.equals(r)) { // it's a nop
+ break;
+ }
+ masm.add(64, r, base, immediate);
+ break;
+ case REGISTER_OFFSET:
+ masm.add(64, r, base, offset);
+ break;
+ case PC_LITERAL: {
+ masm.mov(r, getImmediate());
+ break;
+ }
+ default:
+ throw GraalError.shouldNotReachHere();
+ }
+ }
}
src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.asm.aarch64/src/org/graalvm/compiler/asm/aarch64/AArch64Address.java
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File