# HG changeset patch # User Stefan Anzinger # Date 1433957188 -7200 # Node ID 3ad681417bd60fda39453ed362c29cca44acace8 # Parent a04b45953250c263af27d7123237e3f5345df9b4 [SPARC] Sign extend offsets in SPARCAddressLowering diff -r a04b45953250 -r 3ad681417bd6 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java Wed Jun 10 19:25:28 2015 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java Wed Jun 10 19:26:28 2015 +0200 @@ -48,15 +48,14 @@ public AddressNode lower(ValueNode base, ValueNode offset) { JavaConstant immBase = asImmediate(base); if (immBase != null && SPARCAssembler.isSimm13(immBase)) { - return lower(offset, immBase.asLong()); + return lower(signExtend(offset), immBase.asLong()); } JavaConstant immOffset = asImmediate(offset); if (immOffset != null && SPARCAssembler.isSimm13(immOffset)) { return lower(base, immOffset.asLong()); } - - return base.graph().unique(new SPARCIndexedAddressNode(base, offset)); + return base.graph().unique(new SPARCIndexedAddressNode(base, signExtend(offset))); } private AddressNode lower(ValueNode base, long displacement) { @@ -82,6 +81,10 @@ return base.graph().unique(new SPARCImmediateAddressNode(base, (int) displacement)); } + private static SignExtendNode signExtend(ValueNode node) { + return node.graph().unique(new SignExtendNode(node, Kind.Long.getBitCount())); + } + private JavaConstant asImmediate(ValueNode value) { JavaConstant c = value.asJavaConstant(); if (c != null && c.getKind().isNumericInteger() && !codeCache.needsDataPatch(c)) {