# HG changeset patch # User twisti # Date 1374896045 25200 # Node ID ea308a63760b9db3f03e6576e8f433bcc9b7732d # Parent 9c4f90e48c60088fc6851e590b414bd3d82961a3 added unalignedMemoryAccess to Architecture diff -r 9c4f90e48c60 -r ea308a63760b graal/com.oracle.graal.amd64/src/com/oracle/graal/amd64/AMD64.java --- a/graal/com.oracle.graal.amd64/src/com/oracle/graal/amd64/AMD64.java Fri Jul 26 14:03:07 2013 -0700 +++ b/graal/com.oracle.graal.amd64/src/com/oracle/graal/amd64/AMD64.java Fri Jul 26 20:34:05 2013 -0700 @@ -109,23 +109,17 @@ rip }; + // @formatter:on + private final int supportedSSEVersion; private final int supportedAVXVersion; public AMD64(int supportedSSEVersion, int supportedAVXVersion) { - super("AMD64", - 8, - ByteOrder.LITTLE_ENDIAN, - allRegisters, - LOAD_STORE | STORE_STORE, - 1, - r15.encoding + 1, - 8); + super("AMD64", 8, ByteOrder.LITTLE_ENDIAN, true, allRegisters, LOAD_STORE | STORE_STORE, 1, r15.encoding + 1, 8); assert supportedSSEVersion >= 2; this.supportedSSEVersion = supportedSSEVersion; this.supportedAVXVersion = supportedAVXVersion; } - // @formatter:on public int getSupportedSSEVersion() { return supportedSSEVersion; diff -r 9c4f90e48c60 -r ea308a63760b graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Architecture.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Architecture.java Fri Jul 26 14:03:07 2013 -0700 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Architecture.java Fri Jul 26 20:34:05 2013 -0700 @@ -63,6 +63,11 @@ private final ByteOrder byteOrder; /** + * Whether the architecture supports unaligned memory accesses. + */ + private final boolean unalignedMemoryAccess; + + /** * Mask of the barrier constants denoting the barriers that are not required to be explicitly * inserted under this architecture. */ @@ -79,12 +84,13 @@ */ private final int returnAddressSize; - protected Architecture(String name, int wordSize, ByteOrder byteOrder, Register[] registers, int implicitMemoryBarriers, int nativeCallDisplacementOffset, int registerReferenceMapBitCount, - int returnAddressSize) { + protected Architecture(String name, int wordSize, ByteOrder byteOrder, boolean unalignedMemoryAccess, Register[] registers, int implicitMemoryBarriers, int nativeCallDisplacementOffset, + int registerReferenceMapBitCount, int returnAddressSize) { this.name = name; this.registers = registers; this.wordSize = wordSize; this.byteOrder = byteOrder; + this.unalignedMemoryAccess = unalignedMemoryAccess; this.implicitMemoryBarriers = implicitMemoryBarriers; this.machineCodeCallDisplacementOffset = nativeCallDisplacementOffset; this.registerReferenceMapBitCount = registerReferenceMapBitCount; @@ -133,6 +139,13 @@ } /** + * @return true if the architecture supports unaligned memory accesses. + */ + public boolean supportsUnalignedMemoryAccess() { + return unalignedMemoryAccess; + } + + /** * Gets the size of the return address pushed to the stack by a call instruction. A value of 0 * denotes that call linkage uses registers instead. */ diff -r 9c4f90e48c60 -r ea308a63760b graal/com.oracle.graal.hsail/src/com/oracle/graal/hsail/HSAIL.java --- a/graal/com.oracle.graal.hsail/src/com/oracle/graal/hsail/HSAIL.java Fri Jul 26 14:03:07 2013 -0700 +++ b/graal/com.oracle.graal.hsail/src/com/oracle/graal/hsail/HSAIL.java Fri Jul 26 20:34:05 2013 -0700 @@ -337,18 +337,12 @@ q22, q23, q24, q25, q26, q27, q28, q29, q30, q31 }; + // @formatter:on + public HSAIL() { - super("HSAIL", - 8, - ByteOrder.LITTLE_ENDIAN, - allRegisters, - LOAD_STORE | STORE_STORE, - 1, - q31.encoding + 1, - 8); + super("HSAIL", 8, ByteOrder.LITTLE_ENDIAN, false, allRegisters, LOAD_STORE | STORE_STORE, 1, q31.encoding + 1, 8); } - public static int getStackOffset(Value reg) { return -(((StackSlot) reg).getRawOffset()); } @@ -359,7 +353,6 @@ return "[%spillseg]" + "[" + offset + "]"; } - // @formatter:on public static String mapRegister(Value arg) { Register reg; int encoding = 0; diff -r 9c4f90e48c60 -r ea308a63760b graal/com.oracle.graal.ptx/src/com/oracle/graal/ptx/PTX.java --- a/graal/com.oracle.graal.ptx/src/com/oracle/graal/ptx/PTX.java Fri Jul 26 14:03:07 2013 -0700 +++ b/graal/com.oracle.graal.ptx/src/com/oracle/graal/ptx/PTX.java Fri Jul 26 20:34:05 2013 -0700 @@ -108,17 +108,11 @@ f8, f9, f10, f11, f12, f13, f14, f15 }; + // @formatter:on + public PTX() { - super("PTX", - 8, - ByteOrder.LITTLE_ENDIAN, - allRegisters, - LOAD_STORE | STORE_STORE, - 0, - r15.encoding + 1, - 8); + super("PTX", 8, ByteOrder.LITTLE_ENDIAN, false, allRegisters, LOAD_STORE | STORE_STORE, 0, r15.encoding + 1, 8); } - // @formatter:on @Override public boolean canStoreValue(RegisterCategory category, PlatformKind platformKind) { diff -r 9c4f90e48c60 -r ea308a63760b graal/com.oracle.graal.sparc/src/com/oracle/graal/sparc/SPARC.java --- a/graal/com.oracle.graal.sparc/src/com/oracle/graal/sparc/SPARC.java Fri Jul 26 14:03:07 2013 -0700 +++ b/graal/com.oracle.graal.sparc/src/com/oracle/graal/sparc/SPARC.java Fri Jul 26 20:34:05 2013 -0700 @@ -110,8 +110,8 @@ public static final Register i6 = r30; public static final Register i7 = r31; + public static final Register sp = o6; public static final Register fp = i6; - public static final Register sp = o6; public static final Register[] cpuRegisters = { r0, r1, r2, r3, r4, r5, r6, r7, @@ -133,9 +133,9 @@ public static final Register[] allRegisters = { // CPU r0, r1, r2, r3, r4, r5, r6, r7, - r8, r9, r10, r11, r12, r13, r14, r15, - r16, r17, r18, r19, r20, r21, r22, r23, - r24, r25, r26, r27, r28, r29, r30, r31, + r8, r9, r10, r11, r12, r13, r14, r15, + r16, r17, r18, r19, r20, r21, r22, r23, + r24, r25, r26, r27, r28, r29, r30, r31, // FPU f0, f1, f2, f3, f4, f5, f6, f7, }; @@ -145,7 +145,8 @@ public SPARC() { // The return address doesn't have an extra slot in the frame so we pass 0 for the return // address size. - super("SPARC", 8, ByteOrder.BIG_ENDIAN, allRegisters, LOAD_STORE | STORE_STORE, 1, r31.encoding + 1, 0); + // XXX think about the return address size again + super("SPARC", 8, ByteOrder.BIG_ENDIAN, false, allRegisters, LOAD_STORE | STORE_STORE, 1, r31.encoding + 1, 0); } @Override