Mercurial > hg > graal-compiler
diff graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java @ 16520:9a07bf8467a6
[SPARC] Implement floatingpoint branch instructions, removing math substitutions for SPARC; fixing problems with constants in debug info (Big/Little Endian problems)
author | Stefan Anzinger <stefan.anzinger@gmail.com> |
---|---|
date | Sun, 13 Jul 2014 17:46:57 -0700 |
parents | 75ea3123657f |
children | 22ae26714321 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Fri Jul 11 18:43:18 2014 -0700 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCMove.java Sun Jul 13 17:46:57 2014 -0700 @@ -36,6 +36,7 @@ import com.oracle.graal.lir.*; import com.oracle.graal.lir.StandardOp.*; import com.oracle.graal.lir.asm.*; +import com.oracle.graal.sparc.*; public class SPARCMove { @@ -518,12 +519,13 @@ new Ldf(scratch, asFloatReg(result)).emit(masm); break; case Double: - crb.asDoubleConstRef(input); + // before we load this from memory and do the complicated lookup, + // just load it directly into a scratch register scratch = g5; // First load the address into the scratch register - new Setx(0, scratch, true).emit(masm); + new Setx(Double.doubleToLongBits(input.asDouble()), scratch, true).emit(masm); // Now load the float value - new Lddf(scratch, asDoubleReg(result)).emit(masm); + new Movxtod(scratch, asDoubleReg(result)).emit(masm); break; case Object: if (input.isNull()) {