# HG changeset patch # User Stefan Anzinger # Date 1425392372 -3600 # Node ID 268f56a8ce5525f2a3cb785a2e1b670bba678ba0 # Parent d01c26301c2878e11df5fc3a9a33b48313e982bf [SPARC] Remove unused code from assembler diff -r d01c26301c28 -r 268f56a8ce55 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 Mar 03 13:24:33 2015 +0100 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Tue Mar 03 15:19:32 2015 +0100 @@ -288,31 +288,6 @@ } } - public enum Op5s { - // @formatter:off - - Fmadds(0x1), - Fmaddd(0x2), - Fmsubs(0x5), - Fmsubd(0x6), - Fnmsubs(0x9), - Fnmsubd(0xA), - Fnmadds(0xD), - Fnmaddd(0xE); - - // @formatter:on - - private final int value; - - private Op5s(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - } - public enum Opfs { // @formatter:off @@ -862,29 +837,33 @@ } } + public enum Fcn { + SeveralWritesAndPossiblyReads(2), + SeveralReadsWeak(0), + OneRead(1), + OneWrite(3), + Page(4), + NearestUnifiedCache(17), + SeveralReadsStrong(20), + OneReadStrong(21), + SeveralWritesAndPossiblyReadsStrong(22), + OneWriteStrong(23); + + private final int value; + + private Fcn(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + } + public boolean hasFeature(CPUFeature feature) { return ((SPARC) this.target.arch).features.contains(feature); } - public static int getFloatEncoding(int reg) { - assert reg < 32; - return reg; - } - - public static int getDoubleEncoding(int reg) { - assert reg < 64 && ((reg & 1) == 0); - // ignore v8 assertion for now - return (reg & 0x1e) | ((reg & 0x20) >> 5); - } - - public static int getQuadEncoding(int reg) { - assert reg < 64 && ((reg & 3) == 0); - // ignore v8 assertion for now - return (reg & 0x1c) | ((reg & 0x20) >> 5); - } - - public static final int sx1 = 0x00001000; - public static final int simm(int x, int nbits) { // assert_signed_range(x, nbits); return x & ((1 << nbits) - 1); @@ -940,10 +919,6 @@ return NumUtil.isInt(imm) && isSimm(imm, 13); } - public static boolean isDisp30(long imm) { - return isSimm(imm, 30); - } - public static boolean isWordDisp30(long imm) { return isSimm(imm, 30 + 2); } @@ -971,6 +946,24 @@ this.emitInt(a << 25 | op2 << 22 | b); } + private void op3(Op3s op3, Opfs opf, Register rs1, Register rs2, Register rd) { + int b = opf.value << 5 | (rs2 == null ? 0 : rs2.encoding); + fmt(op3.op.op, rd.encoding, op3.value, rs1 == null ? 0 : rs1.encoding, b); + } + + protected void op3(Op3s op3, Register rs1, Register rs2, Register rd) { + int b = rs2 == null ? 0 : rs2.encoding; + int xBit = getXBit(op3); + fmt(op3.op.op, rd.encoding, op3.value, rs1 == null ? 0 : rs1.encoding, b | xBit); + } + + protected void op3(Op3s op3, Register rs1, int simm13, Register rd) { + assert isSimm13(simm13); + int i = 1 << 13; + int simm13WithX = simm13 | getXBit(op3); + fmt(op3.op.op, rd.encoding, op3.value, rs1.encoding, i | simm13WithX & ((1 << 13) - 1)); + } + // @formatter:off /** * Branch on Integer Condition Codes. @@ -1081,6 +1074,42 @@ fmt00(a, Op2s.Bpr.getValue(), b); } + private int patchUnbound(Label label) { + label.addPatchAt(position()); + return 0; + } + + public void cbcondw(ConditionFlag cf, Register rs1, Register rs2, Label lab) { + cbcond(0, 0, cf, rs1, rs2.encoding, lab); + } + + public void cbcondw(ConditionFlag cf, Register rs1, int rs2, Label lab) { + assert isSimm(rs2, 5); + cbcond(0, 1, cf, rs1, rs2 & ((1 << 5) - 1), lab); + } + + public void cbcondx(ConditionFlag cf, Register rs1, Register rs2, Label lab) { + cbcond(1, 0, cf, rs1, rs2.encoding, lab); + } + + public void cbcondx(ConditionFlag cf, Register rs1, int rs2, Label lab) { + assert isSimm(rs2, 5); + cbcond(1, 1, cf, rs1, rs2 & ((1 << 5) - 1), lab); + } + + private void cbcond(int cc2, int i, ConditionFlag cf, Register rs1, int rs2, Label l) { + int d10 = !l.isBound() ? patchUnbound(l) : (l.position() - position()) / 4; + assert isSimm(d10, 10) && isImm(rs2, 5); + d10 &= (1 << 10) - 1; + final int cLo = cf.value & 0b111; + final int cHi = cf.value >> 3; + final int d10Lo = d10 & ((1 << 8) - 1); + final int d10Hi = d10 >> 8; + int a = cHi << 4 | 0b1000 | cLo; + int b = cc2 << 21 | d10Hi << D10HI_SHIFT | rs1.encoding << 14 | i << 13 | d10Lo << D10LO_SHIFT | rs2; + fmt00(a, Op2s.Bpr.value, b); + } + // @formatter:off /** * NOP. @@ -1094,9 +1123,24 @@ emitInt(1 << 24); } - private int patchUnbound(Label label) { - label.addPatchAt(position()); - return 0; + public void sethi(int imm22, Register dst) { + fmt00(dst.encoding, Op2s.Sethi.value, imm22); + } + + // @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 void add(Register rs1, Register rs2, Register rd) { @@ -1123,14 +1167,6 @@ op3(Addcc, rs1, simm13, rd); } - public void addccc(Register rs1, Register rs2, Register rd) { - op3(Addccc, rs1, rs2, rd); - } - - public void addccc(Register rs1, int simm13, Register rd) { - op3(Addccc, rs1, simm13, rd); - } - public void and(Register rs1, Register rs2, Register rd) { op3(And, rs1, rs2, rd); } @@ -1191,61 +1227,6 @@ op3(Impdep1, Movxtod, null, rs2, rd); } - // @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 void casa(Register rs1, Register rs2, Register rd, Asi asi) { - ld(Casa, new SPARCAddress(rs1, rs2), rd, asi); - } - - public void casxa(Register rs1, Register rs2, Register rd, Asi asi) { - ld(Casxa, new SPARCAddress(rs1, rs2), rd, asi); - } - - public void cbcondw(ConditionFlag cf, Register rs1, Register rs2, Label lab) { - cbcond(0, 0, cf, rs1, rs2.encoding, lab); - } - - public void cbcondw(ConditionFlag cf, Register rs1, int rs2, Label lab) { - assert isSimm(rs2, 5); - cbcond(0, 1, cf, rs1, rs2 & ((1 << 5) - 1), lab); - } - - public void cbcondx(ConditionFlag cf, Register rs1, Register rs2, Label lab) { - cbcond(1, 0, cf, rs1, rs2.encoding, lab); - } - - public void cbcondx(ConditionFlag cf, Register rs1, int rs2, Label lab) { - assert isSimm(rs2, 5); - cbcond(1, 1, cf, rs1, rs2 & ((1 << 5) - 1), lab); - } - - private void cbcond(int cc2, int i, ConditionFlag cf, Register rs1, int rs2, Label l) { - int d10 = !l.isBound() ? patchUnbound(l) : (l.position() - position()) / 4; - assert isSimm(d10, 10) && isImm(rs2, 5); - d10 &= (1 << 10) - 1; - final int cLo = cf.value & 0b111; - final int cHi = cf.value >> 3; - final int d10Lo = d10 & ((1 << 8) - 1); - final int d10Hi = d10 >> 8; - int a = cHi << 4 | 0b1000 | cLo; - int b = cc2 << 21 | d10Hi << D10HI_SHIFT | rs1.encoding << 14 | i << 13 | d10Lo << D10LO_SHIFT | rs2; - fmt00(a, Op2s.Bpr.value, b); - } - public void fadds(Register rs1, Register rs2, Register rd) { op3(Fpop1, Fadds, rs1, rs2, rd); } @@ -1294,49 +1275,6 @@ op3(Fpop1, Fnegd, null, rs2, rd); } - private void op3(Op3s op3, Opfs opf, Register rs1, Register rs2, Register rd) { - int b = opf.value << 5 | (rs2 == null ? 0 : rs2.encoding); - fmt(op3.op.op, rd.encoding, op3.value, rs1 == null ? 0 : rs1.encoding, b); - } - - protected void ld(Op3s op3, SPARCAddress addr, Register rd, Asi asi) { - Register rs1 = addr.getBase(); - if (!addr.getIndex().equals(Register.None)) { - Register rs2 = addr.getIndex(); - if (asi != null) { - int b = rs2.encoding; - b |= asi.value << 5; - fmt(op3.op.op, rd.encoding, op3.value, rs1.encoding, b); - } else { - op3(op3, rs1, rs2, rd); - } - } else { - int imm = addr.getDisplacement(); - op3(op3, rs1, imm, rd); - } - } - - protected void ld(Op3s op3, SPARCAddress addr, Register rd) { - ld(op3, addr, rd, null); - } - - protected void st(Op3s op3, Register rs1, SPARCAddress dest) { - ld(op3, dest, rs1); - } - - protected void op3(Op3s op3, Register rs1, Register rs2, Register rd) { - int b = rs2 == null ? 0 : rs2.encoding; - int xBit = getXBit(op3); - fmt(op3.op.op, rd.encoding, op3.value, rs1 == null ? 0 : rs1.encoding, b | xBit); - } - - protected void op3(Op3s op3, Register rs1, int simm13, Register rd) { - assert isSimm13(simm13); - int i = 1 << 13; - int simm13WithX = simm13 | getXBit(op3); - fmt(op3.op.op, rd.encoding, op3.value, rs1.encoding, i | simm13WithX & ((1 << 13) - 1)); - } - /** * Helper method to determine if the instruction needs the X bit set. */ @@ -1478,54 +1416,6 @@ op3(Jmpl, rs1, simm13, rd); } - public void lddf(SPARCAddress src, Register dst) { - ld(Lddf, src, dst); - } - - public void ldf(SPARCAddress src, Register dst) { - ld(Ldf, src, dst); - } - - public void lduh(SPARCAddress src, Register dst) { - ld(Lduh, src, dst); - } - - public void ldsh(SPARCAddress src, Register dst) { - ld(Ldsh, src, dst); - } - - public void ldub(SPARCAddress src, Register dst) { - ld(Ldub, src, dst); - } - - public void ldsb(SPARCAddress src, Register dst) { - ld(Ldsb, src, dst); - } - - public void lduw(SPARCAddress src, Register dst) { - ld(Lduw, src, dst); - } - - public void ldsw(SPARCAddress src, Register dst) { - ld(Ldsw, src, dst); - } - - public void ldx(SPARCAddress src, Register dst) { - ld(Ldx, src, dst); - } - - public void ldxa(Register rs1, Register rs2, Register rd, Asi asi) { - ld(Ldxa, new SPARCAddress(rs1, rs2), rd, asi); - } - - public void lduwa(Register rs1, Register rs2, Register rd, Asi asi) { - ld(Lduwa, new SPARCAddress(rs1, rs2), rd, asi); - } - - public void membar(int barriers) { - op3(Membar, r15, barriers, g0); - } - public void fmovdcc(ConditionFlag cond, CC cc, Register rs2, Register rd) { fmovcc(cond, cc, rs2, rd, Fmovdcc.value); } @@ -1593,29 +1483,6 @@ } } - public enum Fcn { - SeveralWritesAndPossiblyReads(2), - SeveralReadsWeak(0), - OneRead(1), - OneWrite(3), - Page(4), - NearestUnifiedCache(17), - SeveralReadsStrong(20), - OneReadStrong(21), - SeveralWritesAndPossiblyReadsStrong(22), - OneWriteStrong(23); - - private final int value; - - private Fcn(int value) { - this.value = value; - } - - public int getValue() { - return value; - } - } - // A.44 Read State Register public void rdpc(Register rd) { @@ -1644,8 +1511,12 @@ op3(Sdivx, rs1, simm13, rd); } - public void sethi(int imm22, Register dst) { - fmt00(dst.encoding, Op2s.Sethi.value, imm22); + public void udivx(Register rs1, Register rs2, Register rd) { + op3(Udivx, rs1, rs2, rd); + } + + public void udivx(Register rs1, int simm13, Register rd) { + op3(Udivx, rs1, simm13, rd); } public void sll(Register rs1, Register rs2, Register rd) { @@ -1704,30 +1575,6 @@ op3(Impdep1, Fandd, rs1, rs2, rd); } - public void stdf(Register rd, SPARCAddress addr) { - st(Stdf, rd, addr); - } - - public void stf(Register rd, SPARCAddress addr) { - st(Stf, rd, addr); - } - - public void stb(Register rd, SPARCAddress addr) { - st(Stb, rd, addr); - } - - public void sth(Register rd, SPARCAddress addr) { - st(Sth, rd, addr); - } - - public void stw(Register rd, SPARCAddress addr) { - st(Stw, rd, addr); - } - - public void stx(Register rd, SPARCAddress addr) { - st(Stx, rd, addr); - } - public void sub(Register rs1, Register rs2, Register rd) { op3(Sub, rs1, rs2, rd); } @@ -1736,14 +1583,6 @@ op3(Sub, rs1, simm13, rd); } - public void subc(Register rs1, Register rs2, Register rd) { - op3(Subc, rs1, rs2, rd); - } - - public void subc(Register rs1, int simm13, Register rd) { - op3(Subc, rs1, simm13, rd); - } - public void subcc(Register rs1, Register rs2, Register rd) { op3(Subcc, rs1, rs2, rd); } @@ -1752,14 +1591,6 @@ op3(Subcc, rs1, simm13, rd); } - public void subccc(Register rs1, Register rs2, Register rd) { - op3(Subccc, rs1, rs2, rd); - } - - public void subccc(Register rs1, int simm13, Register rd) { - op3(Subccc, rs1, simm13, rd); - } - public void ta(int trap) { tcc(Icc, Always, trap); } @@ -1771,14 +1602,6 @@ fmt10(flag.value, trap, 0, b); } - public void udivx(Register rs1, Register rs2, Register rd) { - op3(Udivx, rs1, rs2, rd); - } - - public void udivx(Register rs1, int simm13, Register rd) { - op3(Udivx, rs1, simm13, rd); - } - public void wrccr(Register rs1, Register rs2) { op3(Wr, rs1, rs2, r2); } @@ -1811,11 +1634,111 @@ op3(Xnor, rs1, simm13, rd); } - public void xnorcc(Register rs1, Register rs2, Register rd) { - op3(Xnorcc, rs1, rs2, rd); + /* + * Load/Store + */ + protected void ld(Op3s op3, SPARCAddress addr, Register rd, Asi asi) { + Register rs1 = addr.getBase(); + if (!addr.getIndex().equals(Register.None)) { + Register rs2 = addr.getIndex(); + if (asi != null) { + int b = rs2.encoding; + b |= asi.value << 5; + fmt(op3.op.op, rd.encoding, op3.value, rs1.encoding, b); + } else { + op3(op3, rs1, rs2, rd); + } + } else { + int imm = addr.getDisplacement(); + op3(op3, rs1, imm, rd); + } + } + + protected void ld(Op3s op3, SPARCAddress addr, Register rd) { + ld(op3, addr, rd, null); + } + + public void lddf(SPARCAddress src, Register dst) { + ld(Lddf, src, dst); + } + + public void ldf(SPARCAddress src, Register dst) { + ld(Ldf, src, dst); + } + + public void lduh(SPARCAddress src, Register dst) { + ld(Lduh, src, dst); + } + + public void ldsh(SPARCAddress src, Register dst) { + ld(Ldsh, src, dst); + } + + public void ldub(SPARCAddress src, Register dst) { + ld(Ldub, src, dst); + } + + public void ldsb(SPARCAddress src, Register dst) { + ld(Ldsb, src, dst); + } + + public void lduw(SPARCAddress src, Register dst) { + ld(Lduw, src, dst); } - public void xnorcc(Register rs1, int simm13, Register rd) { - op3(Xnorcc, rs1, simm13, rd); + public void ldsw(SPARCAddress src, Register dst) { + ld(Ldsw, src, dst); + } + + public void ldx(SPARCAddress src, Register dst) { + ld(Ldx, src, dst); + } + + public void ldxa(Register rs1, Register rs2, Register rd, Asi asi) { + ld(Ldxa, new SPARCAddress(rs1, rs2), rd, asi); + } + + public void lduwa(Register rs1, Register rs2, Register rd, Asi asi) { + ld(Lduwa, new SPARCAddress(rs1, rs2), rd, asi); + } + + protected void st(Op3s op3, Register rs1, SPARCAddress dest) { + ld(op3, dest, rs1); + } + + public void stdf(Register rd, SPARCAddress addr) { + st(Stdf, rd, addr); + } + + public void stf(Register rd, SPARCAddress addr) { + st(Stf, rd, addr); + } + + public void stb(Register rd, SPARCAddress addr) { + st(Stb, rd, addr); + } + + public void sth(Register rd, SPARCAddress addr) { + st(Sth, rd, addr); + } + + public void stw(Register rd, SPARCAddress addr) { + st(Stw, rd, addr); + } + + public void stx(Register rd, SPARCAddress addr) { + st(Stx, rd, addr); + } + + public void membar(int barriers) { + op3(Membar, r15, barriers, g0); + } + + public void casa(Register rs1, Register rs2, Register rd, Asi asi) { + ld(Casa, new SPARCAddress(rs1, rs2), rd, asi); + } + + public void casxa(Register rs1, Register rs2, Register rd, Asi asi) { + ld(Casxa, new SPARCAddress(rs1, rs2), rd, asi); } }