changeset 21450:9c88f3f5caa0

SPARCLIRGenerator: create new variables for I2F and L2D converting.
author Josef Eisl <josef.eisl@jku.at>
date Thu, 21 May 2015 14:56:00 +0200
parents 006d8ddb7ef9
children 24dd9af9ac26
files graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/ConstantStackMoveTest.java graal/com.oracle.graal.compiler.amd64.test/src/com/oracle/graal/compiler/amd64/test/StackStoreTest.java graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java
diffstat 1 files changed, 8 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java	Thu May 21 13:28:41 2015 +0200
+++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java	Thu May 21 14:56:00 2015 +0200
@@ -852,9 +852,10 @@
             case F2D:
                 return emitConvert2Op(LIRKind.derive(inputVal).changeType(Kind.Double), F2D, input);
             case I2F: {
-                AllocatableValue convertedFloatReg = newVariable(LIRKind.derive(input).changeType(Kind.Float));
-                moveBetweenFpGp(convertedFloatReg, input);
-                append(new Unary2Op(I2F, convertedFloatReg, convertedFloatReg));
+                AllocatableValue intEncodedFloatReg = newVariable(LIRKind.derive(input).changeType(Kind.Float));
+                moveBetweenFpGp(intEncodedFloatReg, input);
+                AllocatableValue convertedFloatReg = newVariable(intEncodedFloatReg.getLIRKind());
+                append(new Unary2Op(I2F, convertedFloatReg, intEncodedFloatReg));
                 return convertedFloatReg;
             }
             case I2D: {
@@ -867,9 +868,10 @@
                 return convertedDoubleReg;
             }
             case L2D: {
-                AllocatableValue convertedDoubleReg = newVariable(LIRKind.derive(input).changeType(Kind.Double));
-                moveBetweenFpGp(convertedDoubleReg, input);
-                append(new Unary2Op(L2D, convertedDoubleReg, convertedDoubleReg));
+                AllocatableValue longEncodedDoubleReg = newVariable(LIRKind.derive(input).changeType(Kind.Double));
+                moveBetweenFpGp(longEncodedDoubleReg, input);
+                AllocatableValue convertedDoubleReg = newVariable(longEncodedDoubleReg.getLIRKind());
+                append(new Unary2Op(L2D, convertedDoubleReg, longEncodedDoubleReg));
                 return convertedDoubleReg;
             }
             case D2I: {