# HG changeset patch # User Roland Schatz # Date 1361899572 -3600 # Node ID 124b282403479309b7f116fd67e5322706bf2447 # Parent d13bf8dae495976fe71088afd89bfbd02caf2aaa Separate STACK and ADDR nodes in LIR. diff -r d13bf8dae495 -r 124b28240347 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 18:26:11 2013 +0100 +++ b/graal/com.oracle.graal.compiler.amd64/src/com/oracle/graal/compiler/amd64/AMD64LIRGenerator.java Tue Feb 26 18:26:12 2013 +0100 @@ -67,6 +67,7 @@ import com.oracle.graal.lir.amd64.AMD64Move.MoveToRegOp; import com.oracle.graal.lir.amd64.AMD64Move.NullCheckOp; import com.oracle.graal.lir.amd64.AMD64Move.SpillMoveOp; +import com.oracle.graal.lir.amd64.AMD64Move.StackLeaOp; import com.oracle.graal.lir.amd64.AMD64Move.StoreOp; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; @@ -225,7 +226,7 @@ @Override public Variable emitLea(StackSlot address) { Variable result = newVariable(target().wordKind); - append(new LeaOp(result, address)); + append(new StackLeaOp(result, address)); return result; } diff -r d13bf8dae495 -r 124b28240347 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java Tue Feb 26 18:26:11 2013 +0100 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java Tue Feb 26 18:26:12 2013 +0100 @@ -24,10 +24,12 @@ import static com.oracle.graal.api.code.ValueUtil.*; import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; + import static java.lang.Double.*; import static java.lang.Float.*; import com.oracle.graal.amd64.*; +import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; import com.oracle.graal.asm.*; import com.oracle.graal.asm.amd64.*; @@ -159,16 +161,32 @@ public static class LeaOp extends AMD64LIRInstruction { @Def({REG}) protected Value result; - @Use({ADDR, STACK, UNINITIALIZED}) protected Value address; + @Use({ADDR, UNINITIALIZED}) protected AMD64Address address; - public LeaOp(Value result, Value address) { + public LeaOp(Value result, AMD64Address address) { this.result = result; this.address = address; } @Override public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) { - masm.leaq(asLongReg(result), (AMD64Address) tasm.asAddress(address)); + masm.leaq(asLongReg(result), address); + } + } + + public static class StackLeaOp extends AMD64LIRInstruction { + + @Def({REG}) protected Value result; + @Use({STACK, UNINITIALIZED}) protected StackSlot slot; + + public StackLeaOp(Value result, StackSlot slot) { + this.result = result; + this.slot = slot; + } + + @Override + public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) { + masm.leaq(asLongReg(result), (AMD64Address) tasm.asAddress(slot)); } } diff -r d13bf8dae495 -r 124b28240347 graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXMove.java --- a/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXMove.java Tue Feb 26 18:26:11 2013 +0100 +++ b/graal/com.oracle.graal.lir.ptx/src/com/oracle/graal/lir/ptx/PTXMove.java Tue Feb 26 18:26:12 2013 +0100 @@ -157,9 +157,9 @@ public static class LeaOp extends PTXLIRInstruction { @Def({REG}) protected Value result; - @Use({ADDR, STACK, UNINITIALIZED}) protected Value address; + @Use({ADDR, UNINITIALIZED}) protected PTXAddress address; - public LeaOp(Value result, Value address) { + public LeaOp(Value result, PTXAddress address) { this.result = result; this.address = address; } @@ -170,6 +170,22 @@ } } + public static class StackLeaOp extends PTXLIRInstruction { + + @Def({REG}) protected Value result; + @Use({STACK, UNINITIALIZED}) protected StackSlot slot; + + public StackLeaOp(Value result, StackSlot slot) { + this.result = result; + this.slot = slot; + } + + @Override + public void emitCode(TargetMethodAssembler tasm, PTXAssembler masm) { + throw new InternalError("NYI"); + } + } + @Opcode("CAS") public static class CompareAndSwapOp extends PTXLIRInstruction {