Mercurial > hg > truffle
changeset 21248:2d8bb973e710
SPARCStackMove: handle floating point values.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Tue, 05 May 2015 17:29:35 +0200 |
parents | 6a00c1217310 |
children | 42653f9ff18b |
files | graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java |
diffstat | 1 files changed, 23 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue May 05 16:53:37 2015 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Tue May 05 17:29:35 2015 +0200 @@ -280,12 +280,33 @@ public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) { try (ScratchRegister scratchReg = masm.getScratchRegister()) { Register scratch = scratchReg.getRegister(); + StackSlot intInput = reInterprete(asStackSlot(getInput())); + StackSlot intResult = reInterprete(asStackSlot(getResult())); // move stack slot - move(crb, masm, scratch.asValue(getInput().getLIRKind()), getInput(), delayedControlTransfer); - move(crb, masm, getResult(), scratch.asValue(getResult().getLIRKind()), delayedControlTransfer); + move(crb, masm, scratch.asValue(intInput.getLIRKind()), intInput, SPARCDelayedControlTransfer.DUMMY); + move(crb, masm, intResult, scratch.asValue(intResult.getLIRKind()), delayedControlTransfer); } } + + private static StackSlot reInterprete(StackSlot slot) { + switch ((Kind) slot.getPlatformKind()) { + case Boolean: + case Byte: + case Short: + case Char: + case Int: + case Long: + case Object: + return slot; + case Float: + return StackSlot.get(LIRKind.value(Kind.Int), slot.getRawOffset(), slot.getRawAddFrameSize()); + case Double: + return StackSlot.get(LIRKind.value(Kind.Long), slot.getRawOffset(), slot.getRawAddFrameSize()); + default: + throw GraalInternalError.shouldNotReachHere(); + } + } } public abstract static class MemOp extends SPARCLIRInstruction implements ImplicitNullCheck {