# HG changeset patch # User Stefan Anzinger # Date 1405129398 25200 # Node ID 2b91702c4e697071482bd980e216a8ba681d377c # Parent 3eb13b9101340819ada4f3d5a7e5a66499a87371 [SPARC] Fixing IntegerBits diff -r 3eb13b910134 -r 2b91702c4e69 graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java --- 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; } diff -r 3eb13b910134 -r 2b91702c4e69 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java --- 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 diff -r 3eb13b910134 -r 2b91702c4e69 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java --- 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: { diff -r 3eb13b910134 -r 2b91702c4e69 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCByteSwapOp.java --- 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: