# HG changeset patch # User Thomas Wuerthinger # Date 1361885493 -3600 # Node ID 938b8209b10be541de43b321c4ac536658dcce71 # Parent d99bce9bbbb2dd76a163422cb0e19764f976317d# Parent d1cffd1990d5f1bed78dd28b0a781fb9d308cbef Merge. diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Address.java --- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Address.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/Address.java Tue Feb 26 14:31:33 2013 +0100 @@ -32,17 +32,6 @@ private static final long serialVersionUID = -1003772042519945089L; - /** - * A sentinel value used as a place holder in an instruction stream for an address that will be - * patched. - */ - /* - * @SuppressWarnings("serial") public static final Address Placeholder = new - * Address(Kind.Illegal) { - * - * @Override public String toString() { return "[]"; } }; - */ - public Address(Kind kind) { super(kind); } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java --- a/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Feb 26 14:31:33 2013 +0100 @@ -25,8 +25,8 @@ import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.lir.amd64.AMD64Arithmetic.*; +import static com.oracle.graal.lir.amd64.AMD64BitManipulationOp.IntrinsicOpcode.*; import static com.oracle.graal.lir.amd64.AMD64Compare.*; -import static com.oracle.graal.lir.amd64.AMD64BitManipulationOp.IntrinsicOpcode.*; import static com.oracle.graal.lir.amd64.AMD64MathIntrinsicOp.IntrinsicOpcode.*; import com.oracle.graal.amd64.*; @@ -41,6 +41,7 @@ import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.JumpOp; import com.oracle.graal.lir.amd64.AMD64Arithmetic.DivOp; +import com.oracle.graal.lir.amd64.AMD64Arithmetic.DivRemOp; import com.oracle.graal.lir.amd64.AMD64Arithmetic.Op1Reg; import com.oracle.graal.lir.amd64.AMD64Arithmetic.Op1Stack; import com.oracle.graal.lir.amd64.AMD64Arithmetic.Op2Reg; @@ -69,7 +70,6 @@ import com.oracle.graal.lir.amd64.AMD64Move.StoreOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.phases.util.*; @@ -137,60 +137,6 @@ } @Override - public Address makeAddress(Kind kind, Value base, int displacement) { - return new AMD64Address(kind, base, displacement); - } - - @Override - public Address makeAddress(LocationNode location, ValueNode object) { - Value base = operand(object); - Value index = Value.ILLEGAL; - int scale = 1; - int displacement = location.displacement(); - - if (isConstant(base)) { - if (asConstant(base).isNull()) { - base = Value.ILLEGAL; - } else if (asConstant(base).getKind() != Kind.Object) { - long newDisplacement = displacement + asConstant(base).asLong(); - if (NumUtil.isInt(newDisplacement)) { - assert !runtime.needsDataPatch(asConstant(base)); - displacement = (int) newDisplacement; - base = Value.ILLEGAL; - } else { - Value newBase = newVariable(Kind.Long); - emitMove(base, newBase); - base = newBase; - } - } - } - - if (location instanceof IndexedLocationNode) { - IndexedLocationNode indexedLoc = (IndexedLocationNode) location; - - index = operand(indexedLoc.index()); - scale = indexedLoc.indexScaling(); - if (isConstant(index)) { - long newDisplacement = displacement + asConstant(index).asLong() * scale; - // only use the constant index if the resulting displacement fits into a 32 bit - // offset - if (NumUtil.isInt(newDisplacement)) { - displacement = (int) newDisplacement; - index = Value.ILLEGAL; - } else { - // create a temporary variable for the index, the pointer load cannot handle a - // constant index - Value newIndex = newVariable(Kind.Long); - emitMove(index, newIndex); - index = newIndex; - } - } - } - - return new AMD64Address(location.getValueKind(), base, index, AMD64Address.Scale.fromInt(scale), displacement); - } - - @Override public Variable emitMove(Value input) { Variable result = newVariable(input.getKind()); emitMove(input, result); @@ -206,21 +152,78 @@ } } + private AMD64Address prepareAddress(Kind kind, Value base, int displacement, Value index, int scale) { + Value baseRegister = base; + int finalDisp = displacement; + if (isConstant(base)) { + if (asConstant(base).isNull()) { + baseRegister = Value.ILLEGAL; + } else if (asConstant(base).getKind() != Kind.Object) { + long newDisplacement = displacement + asConstant(base).asLong(); + if (NumUtil.isInt(newDisplacement)) { + assert !runtime.needsDataPatch(asConstant(base)); + finalDisp = (int) newDisplacement; + baseRegister = Value.ILLEGAL; + } else { + Value newBase = newVariable(Kind.Long); + emitMove(base, newBase); + baseRegister = newBase; + } + } + } + + Value indexRegister = index; + AMD64Address.Scale scaleEnum; + if (index != Value.ILLEGAL && scale > 0) { + scaleEnum = AMD64Address.Scale.fromInt(scale); + if (isConstant(index)) { + long newDisplacement = finalDisp + asConstant(index).asLong() * scale; + // only use the constant index if the resulting displacement fits into a 32 bit + // offset + if (NumUtil.isInt(newDisplacement)) { + finalDisp = (int) newDisplacement; + indexRegister = Value.ILLEGAL; + } else { + // create a temporary variable for the index, the pointer load cannot handle a + // constant index + Value newIndex = newVariable(Kind.Long); + emitMove(index, newIndex); + indexRegister = newIndex; + } + } + } else { + indexRegister = Value.ILLEGAL; + scaleEnum = AMD64Address.Scale.Times1; + } + + return new AMD64Address(kind, baseRegister, indexRegister, scaleEnum, finalDisp); + } + @Override - public Variable emitLoad(Value loadAddress, boolean canTrap) { + public Variable emitLoad(Kind kind, Value base, int displacement, Value index, int scale, boolean canTrap) { + AMD64Address loadAddress = prepareAddress(kind, base, displacement, index, scale); Variable result = newVariable(loadAddress.getKind()); append(new LoadOp(result, loadAddress, canTrap ? state() : null)); return result; } @Override - public void emitStore(Value storeAddress, Value inputVal, boolean canTrap) { + public void emitStore(Kind kind, Value base, int displacement, Value index, int scale, Value inputVal, boolean canTrap) { + AMD64Address storeAddress = prepareAddress(kind, base, displacement, index, scale); Value input = loadForStore(inputVal, storeAddress.getKind()); append(new StoreOp(storeAddress, input, canTrap ? state() : null)); } @Override - public Variable emitLea(Value address) { + public Variable emitLea(Value base, int displacement, Value index, int scale) { + Variable result = newVariable(target().wordKind); + AMD64Address address = prepareAddress(result.getKind(), base, displacement, index, scale); + append(new LeaOp(result, address)); + return result; + } + + @Override + public Variable emitLea(StackSlot address) { Variable result = newVariable(target().wordKind); append(new LeaOp(result, address)); return result; diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java --- a/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.compiler.ptx/src/com/oracle/graal/compiler/ptx/PTXLIRGenerator.java Tue Feb 26 14:31:33 2013 +0100 @@ -50,7 +50,6 @@ import com.oracle.graal.lir.ptx.PTXMove.StoreOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; -import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; import com.oracle.graal.ptx.*; @@ -100,47 +99,6 @@ } @Override - public Address makeAddress(Kind kind, Value base, int displacement) { - return new PTXAddress(kind, base, displacement); - } - - @Override - public Address makeAddress(LocationNode location, ValueNode object) { - Value base = operand(object); - long displacement = location.displacement(); - - if (isConstant(base)) { - if (asConstant(base).isNull()) { - base = Value.ILLEGAL; - } else if (asConstant(base).getKind() != Kind.Object) { - displacement += asConstant(base).asLong(); - base = Value.ILLEGAL; - } - } - - if (location instanceof IndexedLocationNode) { - IndexedLocationNode indexedLoc = (IndexedLocationNode) location; - - Value index = operand(indexedLoc.index()); - int scale = indexedLoc.indexScaling(); - if (isConstant(index)) { - displacement += asConstant(index).asLong() * scale; - } else { - if (scale != 1) { - index = emitMul(index, Constant.forInt(scale)); - } - if (base == Value.ILLEGAL) { - base = index; - } else { - base = emitAdd(base, index); - } - } - } - - return new PTXAddress(location.getValueKind(), base, displacement); - } - - @Override public Variable emitMove(Value input) { Variable result = newVariable(input.getKind()); emitMove(input, result); @@ -156,21 +114,59 @@ } } + private PTXAddress prepareAddress(Kind kind, Value base, int displacement, Value index, int scale) { + Value baseRegister = base; + long finalDisp = displacement; + if (isConstant(base)) { + if (asConstant(base).isNull()) { + baseRegister = Value.ILLEGAL; + } else if (asConstant(base).getKind() != Kind.Object) { + finalDisp += asConstant(base).asLong(); + baseRegister = Value.ILLEGAL; + } + } + + if (index != Value.ILLEGAL) { + if (isConstant(index)) { + finalDisp += asConstant(index).asLong() * scale; + } else { + Value indexRegister = index; + if (scale != 1) { + indexRegister = emitMul(index, Constant.forInt(scale)); + } + if (baseRegister == Value.ILLEGAL) { + baseRegister = indexRegister; + } else { + baseRegister = emitAdd(baseRegister, indexRegister); + } + } + } + + return new PTXAddress(kind, baseRegister, finalDisp); + } + @Override - public Variable emitLoad(Value loadAddress, boolean canTrap) { + public Variable emitLoad(Kind kind, Value base, int displacement, Value index, int scale, boolean canTrap) { + PTXAddress loadAddress = prepareAddress(kind, base, displacement, index, scale); Variable result = newVariable(loadAddress.getKind()); append(new LoadOp(result, loadAddress, canTrap ? state() : null)); return result; } @Override - public void emitStore(Value storeAddress, Value inputVal, boolean canTrap) { + public void emitStore(Kind kind, Value base, int displacement, Value index, int scale, Value inputVal, boolean canTrap) { + PTXAddress storeAddress = prepareAddress(kind, base, displacement, index, scale); Value input = loadForStore(inputVal, storeAddress.getKind()); append(new StoreOp(storeAddress, input, canTrap ? state() : null)); } @Override - public Variable emitLea(Value address) { + public Variable emitLea(Value base, int displacement, Value index, int scale) { + throw new InternalError("NYI"); + } + + @Override + public Variable emitLea(StackSlot address) { throw new InternalError("NYI"); } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue Feb 26 14:31:33 2013 +0100 @@ -31,7 +31,6 @@ import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.calc.ConvertNode.Op; -import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.java.*; /** @@ -215,36 +214,31 @@ } @Override - public Address makeAddress(Kind kind, Value base, int displacement) { - return null; - } - - @Override - public Address makeAddress(LocationNode location, ValueNode object) { - // SPARC: Auto-generated method stub - return null; - } - - @Override public void emitMove(Value src, Value dst) { // SPARC: Auto-generated method stub } @Override - public Value emitLoad(Value loadAddress, boolean canTrap) { + public Value emitLoad(Kind kind, Value base, int displacement, Value index, int scale, boolean canTrap) { // SPARC: Auto-generated method stub return null; } @Override - public void emitStore(Value storeAddress, Value input, boolean canTrap) { + public void emitStore(Kind kind, Value base, int displacement, Value index, int scale, Value input, boolean canTrap) { // SPARC: Auto-generated method stub } @Override - public Value emitLea(Value address) { + public Value emitLea(Value base, int displacement, Value index, int scale) { + // SPARC: Auto-generated method stub + return null; + } + + @Override + public Value emitLea(StackSlot address) { // SPARC: Auto-generated method stub return null; } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.hotspot.amd64/src/com/oracle/graal/hotspot/amd64/AMD64HotSpotBackend.java Tue Feb 26 14:31:33 2013 +0100 @@ -112,11 +112,9 @@ public void visitExceptionObject(ExceptionObjectNode x) { HotSpotVMConfig config = runtime().config; RegisterValue thread = runtime().threadRegister().asValue(); - Address exceptionAddress = new AMD64Address(Kind.Object, thread, config.threadExceptionOopOffset); - Address pcAddress = new AMD64Address(Kind.Long, thread, config.threadExceptionPcOffset); - Value exception = emitLoad(exceptionAddress, false); - emitStore(exceptionAddress, Constant.NULL_OBJECT, false); - emitStore(pcAddress, Constant.LONG_0, false); + Value exception = emitLoad(Kind.Object, thread, config.threadExceptionOopOffset, Value.ILLEGAL, 0, false); + emitStore(Kind.Object, thread, config.threadExceptionOopOffset, Value.ILLEGAL, 0, Constant.NULL_OBJECT, false); + emitStore(Kind.Long, thread, config.threadExceptionPcOffset, Value.ILLEGAL, 0, Constant.LONG_0, false); setResult(x, exception); } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ArrayWriteBarrier.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ArrayWriteBarrier.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/ArrayWriteBarrier.java Tue Feb 26 14:31:33 2013 +0100 @@ -47,7 +47,7 @@ @Override public void generate(LIRGeneratorTool gen) { - Value addr = gen.emitLea(gen.makeAddress(location(), object())); + Value addr = location().generateLea(gen, object()); generateBarrier(addr, gen); } } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentThread.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentThread.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/CurrentThread.java Tue Feb 26 14:31:33 2013 +0100 @@ -42,7 +42,7 @@ public void generate(LIRGeneratorTool gen) { HotSpotGraalRuntime runtime = HotSpotGraalRuntime.getInstance(); Register thread = runtime.getRuntime().threadRegister(); - gen.setResult(this, gen.emitLoad(gen.makeAddress(Kind.Object, thread.asValue(gen.target().wordKind), runtime.getConfig().threadObjectOffset), false)); + gen.setResult(this, gen.emitLoad(Kind.Object, thread.asValue(gen.target().wordKind), runtime.getConfig().threadObjectOffset, Value.ILLEGAL, 0, false)); } @NodeIntrinsic diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/TailcallNode.java Tue Feb 26 14:31:33 2013 +0100 @@ -69,7 +69,7 @@ parameters.add(frameState.localAt(slot)); } Value[] args = gen.visitInvokeArguments(cc, parameters); - Value entry = gen.emitLoad(gen.makeAddress(Kind.Long, gen.operand(target), config.nmethodEntryOffset), false); + Value entry = gen.emitLoad(Kind.Long, gen.operand(target), config.nmethodEntryOffset, Value.ILLEGAL, 0, false); HotSpotLIRGenerator hsgen = (HotSpotLIRGenerator) gen; hsgen.emitTailcall(args, entry); } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/nodes/WriteBarrier.java Tue Feb 26 14:31:33 2013 +0100 @@ -45,6 +45,6 @@ } else { base = gen.emitAdd(base, Constant.forLong(config.cardtableStartAddress)); } - gen.emitStore(gen.makeAddress(Kind.Boolean, base, displacement), Constant.FALSE, false); + gen.emitStore(Kind.Boolean, base, displacement, Value.ILLEGAL, 0, Constant.FALSE, false); } } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/FloatingReadNode.java Tue Feb 26 14:31:33 2013 +0100 @@ -53,7 +53,7 @@ @Override public void generate(LIRGeneratorTool gen) { - gen.setResult(this, gen.emitLoad(gen.makeAddress(location(), object()), getNullCheck())); + gen.setResult(this, location().generateLoad(gen, object(), getNullCheck())); } @Override diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Tue Feb 26 14:31:33 2013 +0100 @@ -79,4 +79,19 @@ } return this; } + + @Override + public Value generateLea(LIRGeneratorTool gen, ValueNode base) { + return gen.emitLea(gen.operand(base), displacement(), gen.operand(index()), indexScaling()); + } + + @Override + public Value generateLoad(LIRGeneratorTool gen, ValueNode base, boolean canTrap) { + return gen.emitLoad(getValueKind(), gen.operand(base), displacement(), gen.operand(index()), indexScaling(), canTrap); + } + + @Override + public void generateStore(LIRGeneratorTool gen, ValueNode base, ValueNode value, boolean canTrap) { + gen.emitStore(getValueKind(), gen.operand(base), displacement(), gen.operand(index()), indexScaling(), gen.operand(value), canTrap); + } } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java Tue Feb 26 14:31:33 2013 +0100 @@ -25,6 +25,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.Node.ValueNumberable; +import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; import com.oracle.graal.nodes.type.*; @@ -96,4 +97,16 @@ public void generate(LIRGeneratorTool generator) { // nothing to do... } + + public Value generateLea(LIRGeneratorTool gen, ValueNode base) { + return gen.emitLea(gen.operand(base), displacement(), Value.ILLEGAL, 0); + } + + public Value generateLoad(LIRGeneratorTool gen, ValueNode base, boolean canTrap) { + return gen.emitLoad(getValueKind(), gen.operand(base), displacement(), Value.ILLEGAL, 0, canTrap); + } + + public void generateStore(LIRGeneratorTool gen, ValueNode base, ValueNode value, boolean canTrap) { + gen.emitStore(getValueKind(), gen.operand(base), displacement(), Value.ILLEGAL, 0, gen.operand(value), canTrap); + } } diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ReadNode.java Tue Feb 26 14:31:33 2013 +0100 @@ -51,7 +51,7 @@ @Override public void generate(LIRGeneratorTool gen) { - gen.setResult(this, gen.emitLoad(gen.makeAddress(location(), object()), getNullCheck())); + gen.setResult(this, location().generateLoad(gen, object(), getNullCheck())); } @Override diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/WriteNode.java Tue Feb 26 14:31:33 2013 +0100 @@ -59,7 +59,7 @@ @Override public void generate(LIRGeneratorTool gen) { - gen.emitStore(gen.makeAddress(location(), object()), gen.operand(value()), getNullCheck()); + location().generateStore(gen, object(), value(), getNullCheck()); } @NodeIntrinsic diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Tue Feb 26 14:31:33 2013 +0100 @@ -53,27 +53,17 @@ public abstract Value setResult(ValueNode x, Value operand); - public abstract Address makeAddress(LocationNode location, ValueNode object); - - public abstract Address makeAddress(Kind kind, Value base, int displacement); - - public Address makeAddress(Kind kind, Value base) { - return makeAddress(kind, base, 0); - } - - public Address makeAddress(Kind kind, int address) { - return makeAddress(kind, Value.ILLEGAL, address); - } - public abstract Value emitMove(Value input); public abstract void emitMove(Value src, Value dst); - public abstract Value emitLoad(Value loadAddress, boolean canTrap); + public abstract Value emitLoad(Kind kind, Value base, int displacement, Value index, int scale, boolean canTrap); + + public abstract void emitStore(Kind kind, Value base, int displacement, Value index, int scale, Value input, boolean canTrap); - public abstract void emitStore(Value storeAddress, Value input, boolean canTrap); + public abstract Value emitLea(Value base, int displacement, Value index, int scale); - public abstract Value emitLea(Value address); + public abstract Value emitLea(StackSlot slot); public abstract Value emitNegate(Value input); diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/nodes/DirectReadNode.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/nodes/DirectReadNode.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/nodes/DirectReadNode.java Tue Feb 26 14:31:33 2013 +0100 @@ -45,7 +45,7 @@ @Override public void generate(LIRGeneratorTool gen) { - gen.setResult(this, gen.emitLoad(gen.makeAddress(readKind, gen.operand(address)), false)); + gen.setResult(this, gen.emitLoad(readKind, gen.operand(address), 0, Value.ILLEGAL, 0, false)); } @NodeIntrinsic diff -r d99bce9bbbb2 -r 938b8209b10b graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/nodes/DirectStoreNode.java --- a/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/nodes/DirectStoreNode.java Tue Feb 26 13:26:54 2013 +0100 +++ b/graal/com.oracle.graal.snippets/src/com/oracle/graal/snippets/nodes/DirectStoreNode.java Tue Feb 26 14:31:33 2013 +0100 @@ -48,7 +48,7 @@ @Override public void generate(LIRGeneratorTool gen) { Value v = gen.operand(value); - gen.emitStore(gen.makeAddress(kind, gen.operand(address)), v, false); + gen.emitStore(kind, gen.operand(address), 0, Value.ILLEGAL, 0, v, false); } /*