Mercurial > hg > truffle
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)) {