OpenJDK / graal / graal-jvmci-8
changeset 21247:6a00c1217310
Add SPARCStackMove.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Tue, 05 May 2015 16:53:37 +0200 |
parents | b2b3c514a391 |
children | 2d8bb973e710 |
files | graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java |
diffstat | 2 files changed, 41 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue May 05 16:24:39 2015 +0200 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Tue May 05 16:53:37 2015 +0200 @@ -59,6 +59,7 @@ import com.oracle.graal.lir.sparc.SPARCMove.MoveFpGpVIS3; import com.oracle.graal.lir.sparc.SPARCMove.MoveFromRegOp; import com.oracle.graal.lir.sparc.SPARCMove.MoveToRegOp; +import com.oracle.graal.lir.sparc.SPARCMove.SPARCStackMove; import com.oracle.graal.lir.sparc.SPARCMove.StackLoadAddressOp; import com.oracle.graal.phases.util.*; import com.oracle.graal.sparc.*; @@ -78,6 +79,11 @@ public LIRInstruction createMove(AllocatableValue result, Value input) { return SPARCLIRGenerator.this.createMove(result, input); } + + @Override + public LIRInstruction createStackMove(AllocatableValue result, Value input) { + return new SPARCStackMove(result, input); + } } public SPARCLIRGenerator(LIRKindTool lirKindTool, Providers providers, CallingConvention cc, LIRGenerationResult lirGenRes) {
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue May 05 16:24:39 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue May 05 16:53:37 2015 +0200 @@ -253,6 +253,41 @@ } } + @Opcode("STACKMOVE") + public static final class SPARCStackMove extends SPARCLIRInstruction implements MoveOp { + public static final LIRInstructionClass<SPARCStackMove> TYPE = LIRInstructionClass.create(SPARCStackMove.class); + + @Def({STACK}) protected AllocatableValue result; + @Use({STACK, HINT}) protected Value input; + + public SPARCStackMove(AllocatableValue result, Value input) { + super(TYPE); + this.result = result; + this.input = input; + } + + @Override + public Value getInput() { + return input; + } + + @Override + public AllocatableValue getResult() { + return result; + } + + @Override + public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { + try (ScratchRegister scratchReg = masm.getScratchRegister()) { + Register scratch = scratchReg.getRegister(); + // move stack slot + move(crb, masm, scratch.asValue(getInput().getLIRKind()), getInput(), delayedControlTransfer); + move(crb, masm, getResult(), scratch.asValue(getResult().getLIRKind()), delayedControlTransfer); + } + + } + } + public abstract static class MemOp extends SPARCLIRInstruction implements ImplicitNullCheck { public static final LIRInstructionClass<MemOp> TYPE = LIRInstructionClass.create(MemOp.class);