changeset 16519:2b91702c4e69

[SPARC] Fixing IntegerBits
author Stefan Anzinger <stefan.anzinger@gmail.com>
date Fri, 11 Jul 2014 18:43:18 -0700
parents 3eb13b910134
children 9a07bf8467a6
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/SPARCArithmetic.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCByteSwapOp.java
diffstat 4 files changed, 18 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java	Fri Jul 11 18:22:12 2014 -0700
+++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java	Fri Jul 11 18:43:18 2014 -0700
@@ -42,7 +42,6 @@
 import com.oracle.graal.lir.StandardOp.JumpOp;
 import com.oracle.graal.lir.gen.*;
 import com.oracle.graal.lir.sparc.*;
-import com.oracle.graal.nodes.*;
 import com.oracle.graal.phases.util.*;
 
 /**
@@ -527,7 +526,7 @@
         if (commutative) {
             append(new BinaryCommutative(op, result, a, b));
         } else {
-            append(new BinaryRegReg(op, result, a, b));
+            append(new BinaryRegReg(op, result, a, b, state));
         }
         return result;
     }
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java	Fri Jul 11 18:22:12 2014 -0700
+++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java	Fri Jul 11 18:43:18 2014 -0700
@@ -190,12 +190,18 @@
         @Def({REG, HINT}) protected AllocatableValue result;
         @Use({REG}) protected AllocatableValue x;
         @Use({REG}) protected AllocatableValue y;
+        @State protected LIRFrameState state;
 
         public BinaryCommutative(SPARCArithmetic opcode, AllocatableValue result, AllocatableValue x, AllocatableValue y) {
+            this(opcode, result, x, y, null);
+        }
+
+        public BinaryCommutative(SPARCArithmetic opcode, AllocatableValue result, AllocatableValue x, AllocatableValue y, LIRFrameState state) {
             this.opcode = opcode;
             this.result = result;
             this.x = x;
             this.y = y;
+            this.state = state;
         }
 
         @Override
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java	Fri Jul 11 18:22:12 2014 -0700
+++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java	Fri Jul 11 18:43:18 2014 -0700
@@ -36,7 +36,6 @@
 import com.oracle.graal.asm.sparc.SPARCAssembler.Srlx;
 import com.oracle.graal.asm.sparc.SPARCAssembler.Sub;
 import com.oracle.graal.asm.sparc.*;
-import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Mov;
 import com.oracle.graal.compiler.common.*;
 import com.oracle.graal.lir.*;
 import com.oracle.graal.lir.asm.*;
@@ -73,7 +72,7 @@
                 case IPOPCNT:
                     // clear upper word for 64 bit POPC
                     new Srl(src, g0, dst).emit(masm);
-                    new Popc(src, dst).emit(masm);
+                    new Popc(dst, dst).emit(masm);
                     break;
                 case LPOPCNT:
                     new Popc(src, dst).emit(masm);
@@ -109,8 +108,7 @@
                     new Srl(dst, 16, tmp).emit(masm);
                     new Or(dst, tmp, dst).emit(masm);
                     new Popc(dst, dst).emit(masm);
-                    new Mov(ikind.getBitCount(), tmp).emit(masm);
-                    new Sub(tmp, dst, dst).emit(masm);
+                    new Sub(dst, 1, dst).emit(masm);
                     break;
                 }
                 case LBSR: {
--- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCByteSwapOp.java	Fri Jul 11 18:22:12 2014 -0700
+++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCByteSwapOp.java	Fri Jul 11 18:43:18 2014 -0700
@@ -28,12 +28,11 @@
 import com.oracle.graal.api.code.*;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.asm.sparc.*;
-import com.oracle.graal.asm.sparc.SPARCAssembler.Asi;
+import com.oracle.graal.asm.sparc.SPARCAssembler.*;
 import com.oracle.graal.compiler.common.*;
 import com.oracle.graal.lir.*;
 import com.oracle.graal.lir.asm.*;
 import com.oracle.graal.lir.gen.*;
-import com.sun.javafx.binding.SelectBinding.*;
 
 @Opcode("BSWAP")
 public class SPARCByteSwapOp extends SPARCLIRInstruction {
@@ -53,16 +52,17 @@
     @Override
     public void emitCode(CompilationResultBuilder crb, SPARCMacroAssembler masm) {
         SPARCMove.move(crb, masm, tmpSlot, input);
+        SPARCAddress addr = (SPARCAddress) crb.asAddress(tmpSlot);
+        if (addr.getIndex().equals(Register.None)) {
+            Register tempReg = ValueUtil.asLongReg(tempIndex);
+            new SPARCMacroAssembler.Setx(addr.getDisplacement(), tempReg, false).emit(masm);
+            addr = new SPARCAddress(addr.getBase(), tempReg);
+        }
         switch (input.getKind()) {
             case Int:
-                // masm.bswapl(ValueUtil.asIntReg(result));
+                new SPARCAssembler.Lduwa(addr.getBase(), addr.getIndex(), asIntReg(result), Asi.ASI_PRIMARY_LITTLE).emit(masm);
+                break;
             case Long:
-                SPARCAddress addr = (SPARCAddress) crb.asAddress(tmpSlot);
-                if (addr.getIndex().equals(Register.None)) {
-                    Register tempReg = ValueUtil.asLongReg(tempIndex);
-                    new SPARCMacroAssembler.Setx(addr.getDisplacement(), tempReg, false).emit(masm);
-                    addr = new SPARCAddress(addr.getBase(), tempReg);
-                }
                 new SPARCAssembler.Ldxa(addr.getBase(), addr.getIndex(), asLongReg(result), Asi.ASI_PRIMARY_LITTLE).emit(masm);
                 break;
             default: