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()) {