changeset 21914:3ad681417bd6

[SPARC] Sign extend offsets in SPARCAddressLowering
author Stefan Anzinger <stefan.anzinger@oracle.com>
date Wed, 10 Jun 2015 19:26:28 +0200
parents a04b45953250
children 3fe55394241c
files graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCAddressLowering.java
diffstat 1 files changed, 6 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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)) {