# HG changeset patch # User Stefan Anzinger # Date 1408987297 25200 # Node ID f011bf910f349457a44f5b2f138cc043fd044bba # Parent 4d77f938aa028bf2c78bdfdca2a14205e18d77ca [SPARC] Fix sign extension, add debug messages to assertions in Assembler, add FSMULD , Entering frame is now possible with > 2k framesize diff -r 4d77f938aa02 -r f011bf910f34 graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java --- a/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Tue Aug 19 09:21:29 2014 -0700 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Mon Aug 25 10:21:37 2014 -0700 @@ -815,14 +815,19 @@ } public void verify() { - assert ((rd << RD_SHIFT) & RD_MASK) == (rd << RD_SHIFT); - assert ((op3 << OP3_SHIFT) & OP3_MASK) == (op3 << OP3_SHIFT); - assert ((rs1 << RS1_SHIFT) & RS1_MASK) == (rs1 << RS1_SHIFT); - assert ((i << I_SHIFT) & I_MASK) == (i << I_SHIFT); - assert ((x << X_SHIFT) & X_MASK) == (x << X_SHIFT); - assert ((immAsi << IMM_ASI_SHIFT) & IMM_ASI_MASK) == (immAsi << IMM_ASI_SHIFT); - assert ((rs2 << RS2_SHIFT) & RS2_MASK) == (rs2 << RS2_SHIFT); - assert isSimm13(simm13); + assert ((rd << RD_SHIFT) & RD_MASK) == (rd << RD_SHIFT) : this; + assert ((op3 << OP3_SHIFT) & OP3_MASK) == (op3 << OP3_SHIFT) : this; + assert ((rs1 << RS1_SHIFT) & RS1_MASK) == (rs1 << RS1_SHIFT) : this; + assert ((i << I_SHIFT) & I_MASK) == (i << I_SHIFT) : this; + assert ((x << X_SHIFT) & X_MASK) == (x << X_SHIFT) : this; + assert ((immAsi << IMM_ASI_SHIFT) & IMM_ASI_MASK) == (immAsi << IMM_ASI_SHIFT) : this; + assert ((rs2 << RS2_SHIFT) & RS2_MASK) == (rs2 << RS2_SHIFT) : this; + assert isSimm13(simm13) : this; + } + + @Override + public String toString() { + return String.format("%s: [rd: 0x%x, op3: 0x%x, rs1: 0x%x, i: 0x%x, x: 0x%x, immAsi: 0x%x, rs2: 0x%x, simm13: 0x%x", getClass().getName(), rd, op3, rs1, i, x, immAsi, rs2, simm13); } } @@ -2837,6 +2842,13 @@ } } + public static class Fsmuld extends Fmt3p { + + public Fsmuld(Register src1, Register src2, Register dst) { + super(Ops.ArithOp, Op3s.Fpop1, Opfs.Fsmuld, src1, src2, dst); + } + } + public static class Fmul8x16 extends Fmt3p { public Fmul8x16(Register src1, Register src2, Register dst) { diff -r 4d77f938aa02 -r f011bf910f34 graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCMacroAssembler.java --- a/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCMacroAssembler.java Tue Aug 19 09:21:29 2014 -0700 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCMacroAssembler.java Mon Aug 25 10:21:37 2014 -0700 @@ -27,6 +27,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.asm.*; +import com.oracle.graal.sparc.*; public class SPARCMacroAssembler extends SPARCAssembler { @@ -327,7 +328,7 @@ public void emit(SPARCMacroAssembler masm) { if (value == 0) { new Clr(dst).emit(masm); - } else if (-4095 <= value && value <= 4096) { + } else if (isSimm13(value)) { new Or(g0, value, dst).emit(masm); } else if (value >= 0 && ((value & 0x3FFF) == 0)) { new Sethi(hi22(value), dst).emit(masm); diff -r 4d77f938aa02 -r f011bf910f34 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 Tue Aug 19 09:21:29 2014 -0700 +++ b/graal/com.oracle.graal.compiler.sparc/src/com/oracle/graal/compiler/sparc/SPARCLIRGenerator.java Mon Aug 25 10:21:37 2014 -0700 @@ -310,10 +310,10 @@ switch ((Kind) cmpKind) { case Short: case Char: - append(new CompareOp(ICMP, emitZeroExtend(left, 16, 32), emitZeroExtend(right, 16, 32))); + append(new CompareOp(ICMP, emitSignExtend(left, 16, 32), emitSignExtend(right, 16, 32))); break; case Byte: - append(new CompareOp(ICMP, emitZeroExtend(left, 8, 32), emitZeroExtend(right, 8, 32))); + append(new CompareOp(ICMP, emitSignExtend(left, 8, 32), emitSignExtend(right, 8, 32))); break; case Int: append(new CompareOp(ICMP, left, right)); diff -r 4d77f938aa02 -r f011bf910f34 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Tue Aug 19 09:21:29 2014 -0700 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotBackend.java Mon Aug 25 10:21:37 2014 -0700 @@ -137,12 +137,18 @@ @Override public void enter(CompilationResultBuilder crb) { final int frameSize = crb.frameMap.totalFrameSize(); - + final int stackpoinerChange = -frameSize; SPARCMacroAssembler masm = (SPARCMacroAssembler) crb.asm; if (!isStub && pagesToBang > 0) { emitStackOverflowCheck(crb, pagesToBang, false); } - new Save(sp, -frameSize, sp).emit(masm); + + if (SPARCAssembler.isSimm13(stackpoinerChange)) { + new Save(sp, stackpoinerChange, sp).emit(masm); + } else { + new Setx(stackpoinerChange, g3).emit(masm); + new Save(sp, g3, sp).emit(masm); + } if (ZapStackOnMethodEntry.getValue()) { final int slotSize = 8;