# HG changeset patch # User Stefan Anzinger # Date 1425034323 -3600 # Node ID 2819dcd694b971760970e1e7f619a0daca86cb26 # Parent 7d3afd4356a22742ff5d5c38441ba12a883c57f0 [SPARC] Replace call diff -r 7d3afd4356a2 -r 2819dcd694b9 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 Fri Feb 27 11:42:36 2015 +0100 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Fri Feb 27 11:52:03 2015 +0100 @@ -88,77 +88,6 @@ protected static final int D10LO_SHIFT = 5; protected static final int D10HI_SHIFT = 19; - // @formatter:off - /** - * Instruction format for calls. - *
-     * | 01  |                      disp30                             |
-     * |31 30|29                                                      0|
-     * 
- */ - // @formatter:on - public static class Fmt01 { - - private static final int DISP30_SHIFT = 0; - - // @formatter:off - private static final int DISP30_MASK = 0b00111111111111111111111111111111; - // @formatter:on - - private int disp30; - - public Fmt01(int disp30) { - setDisp30(disp30); - } - - /** - * Return the displacement in bytes. - */ - public int getDisp30() { - return disp30 << 2; - } - - /** - * The instructions requires displacements to be word-sized. - */ - public void setDisp30(int disp30) { - this.disp30 = disp30 >> 2; - } - - private int getInstructionBits() { - return Ops.CallOp.getValue() << OP_SHIFT | (disp30 & DISP30_MASK) << DISP30_SHIFT; - } - - public static Fmt01 read(SPARCAssembler masm, int pos) { - final int inst = masm.getInt(pos); - - // Make sure it's the right instruction: - final int op = (inst & OP_MASK) >> OP_SHIFT; - assert op == Ops.CallOp.getValue(); - - // Get the instruction fields: - final int disp30 = (inst & DISP30_MASK) >> DISP30_SHIFT << 2; - - Fmt01 fmt = new Fmt01(disp30); - fmt.verify(); - return fmt; - } - - public void write(SPARCAssembler masm, int pos) { - verify(); - masm.emitInt(getInstructionBits(), pos); - } - - public void emit(SPARCAssembler masm) { - verify(); - masm.emitInt(getInstructionBits()); - } - - public void verify() { - assert isDisp30(disp30) : disp30; - } - } - public static class Fmt3f { public Fmt3f(SPARCAssembler masm, int op, int op3, int rcond, int rs1, int simm10, int rd) { @@ -2055,11 +1984,20 @@ } } - public static class Call extends Fmt01 { - - public Call(int disp30) { - super(disp30); - } + // @formatter:off + /** + * Instruction format for calls. + *
+     * | 01  |                      disp30                             |
+     * |31 30|29                                                      0|
+     * 
+ */ + // @formatter:on + public void call(int disp30) { + assert isImm(disp30, 30); + int instr = 1 << 30; + instr |= disp30; + emitInt(instr); } public static class CammelliaFl extends Fmt3p { diff -r 7d3afd4356a2 -r 2819dcd694b9 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCall.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCall.java Fri Feb 27 11:42:36 2015 +0100 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCCall.java Fri Feb 27 11:52:03 2015 +0100 @@ -29,7 +29,6 @@ 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.Call; import com.oracle.graal.asm.sparc.SPARCAssembler.Jmpl; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Jmp; import com.oracle.graal.asm.sparc.SPARCMacroAssembler.Sethix; @@ -110,7 +109,7 @@ assert !emitted; emitCallPrefixCode(crb, masm); before = masm.position(); - new Call(0).emit(masm); + masm.call(0); emitted = true; } @@ -194,7 +193,7 @@ new Sethix(0L, scratch, true).emit(masm); new Jmpl(scratch, 0, o7).emit(masm); } else { - new Call(0).emit(masm); + masm.call(0); } masm.nop(); // delay slot int after = masm.position();