Mercurial > hg > graal-jvmci-8
diff graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java @ 9817:26960d32552c
SPARC integer arithmetic
author | Morris Meyer <morris.meyer@oracle.com> |
---|---|
date | Sat, 25 May 2013 16:24:05 -0400 |
parents | 4e9854086532 |
children | 81d5d8089cda |
line wrap: on
line diff
--- a/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Fri May 24 22:51:36 2013 -0400 +++ b/graal/com.oracle.graal.asm.sparc/src/com/oracle/graal/asm/sparc/SPARCAssembler.java Sat May 25 16:24:05 2013 -0400 @@ -169,6 +169,18 @@ } } + public static class Fmt3n { + public Fmt3n(SPARCAssembler masm, int op, int op3, int opf, int rs2, int rd) { + assert op == 2 || op == 3; + assert op3 >= 0 && op3 < 0x40; + assert opf >= 0 && opf < 0x200; + assert rs2 >= 0 && rs2 < 0x20; + assert rd >= 0 && rd < 0x20; + + masm.emitInt(op << 30 | rd << 25 | op3 << 19 | opf << 5 | rs2); + } + } + public static class Fmt3q { public Fmt3q(SPARCAssembler masm, int op, int op3, int rs1, int rd) { assert op == 2 || op == 3; @@ -313,12 +325,14 @@ } public enum Opfs { - Fadds((0x41 << 5) & 0x00003FE0, "fadds"), - Faddd((0x42 << 5) & 0x00003FE0, "faddd"), - Faddq((0x43 << 5) & 0x00003FE0, "faddq"), - Fsubs((0x45 << 5) & 0x00003FE0, "fsubs"), - Fsubd((0x46 << 5) & 0x00003FE0, "fsubd"), - Fsubq((0x47 << 5) & 0x00003FE0, "fsubq"); + Fadds(0x41, "fadds"), + Faddd(0x42, "faddd"), + Faddq(0x43, "faddq"), + Fsubs(0x45, "fsubs"), + Fsubd(0x46, "fsubd"), + Fsubq(0x47, "fsubq"), + Fstoi(0xD1, "fstoi"), + Fdtoi(0xD2, "fdtoi"); private final int value; private final String operator; @@ -602,6 +616,20 @@ } } + public static class Fstoi extends Fmt3n { + public Fstoi(SPARCAssembler masm, Register src2, Register dst) { + super(masm, Ops.ArithOp.getValue(), Op3s.Fpop1.getValue(), Opfs.Fstoi.getValue(), + src2.encoding(), dst.encoding()); + } + } + + public static class Fdtoi extends Fmt3n { + public Fdtoi(SPARCAssembler masm, Register src2, Register dst) { + super(masm, Ops.ArithOp.getValue(), Op3s.Fpop1.getValue(), Opfs.Fdtoi.getValue(), + src2.encoding(), dst.encoding()); + } + } + public final void flushw() { emitInt(Ops.ArithOp.getValue() | Op3s.Flushw.getValue()); }