| Index: src/s390/assembler-s390.h
|
| diff --git a/src/s390/assembler-s390.h b/src/s390/assembler-s390.h
|
| index 501535faa99cf0cade2035ebe885a3acd9b6cfa3..e121906b0e81ee9a2d398b4fdb1eaeb17e426aae 100644
|
| --- a/src/s390/assembler-s390.h
|
| +++ b/src/s390/assembler-s390.h
|
| @@ -545,6 +545,163 @@ class Assembler : public AssemblerBase {
|
| // ---------------------------------------------------------------------------
|
| // Code generation
|
|
|
| + template <class T, int size, int lo, int hi>
|
| + inline T getfield(T value) {
|
| + DCHECK(lo < hi);
|
| + DCHECK(size > 0);
|
| + int mask = hi - lo;
|
| + int shift = size * 8 - hi;
|
| + uint32_t mask_value = (mask == 32) ? 0xffffffff : (1 << mask) - 1;
|
| + return (value & mask_value) << shift;
|
| + }
|
| +
|
| + // Declare generic instruction formats by fields
|
| + inline void e_format(Opcode opcode) {
|
| + emit2bytes(getfield<uint16_t, 2, 0, 16>(opcode));
|
| + }
|
| +
|
| + inline void i_format(Opcode opcode, int f1) {
|
| + emit2bytes(getfield<uint16_t, 2, 0, 8>(opcode) |
|
| + getfield<uint16_t, 2, 8, 16>(f1));
|
| + }
|
| +
|
| + inline void ie_format(Opcode opcode, int f1, int f2) {
|
| + emit4bytes(getfield<uint32_t, 4, 0, 16>(opcode) |
|
| + getfield<uint32_t, 4, 24, 28>(f1) |
|
| + getfield<uint32_t, 4, 28, 32>(f2));
|
| + }
|
| + inline void mii_format(Opcode opcode, int f1, int f2, int f3) {
|
| + emit6bytes(
|
| + getfield<uint64_t, 6, 0, 8>(opcode) | getfield<uint64_t, 6, 8, 12>(f1) |
|
| + getfield<uint64_t, 6, 12, 24>(f2) | getfield<uint64_t, 6, 24, 48>(f3));
|
| + }
|
| +
|
| + inline void ri_format(Opcode opcode, int f1, int f2) {
|
| + uint32_t op1 = opcode >> 4;
|
| + uint32_t op2 = opcode & 0xf;
|
| + emit4bytes(
|
| + getfield<uint32_t, 4, 0, 8>(op1) | getfield<uint32_t, 4, 8, 12>(f1) |
|
| + getfield<uint32_t, 4, 12, 16>(op2) | getfield<uint32_t, 4, 16, 32>(f2));
|
| + }
|
| +
|
| + inline void rie_1_format(Opcode opcode, int f1, int f2, int f3, int f4) {
|
| + uint32_t op1 = opcode >> 8;
|
| + uint32_t op2 = opcode & 0xff;
|
| + emit6bytes(
|
| + getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) |
|
| + getfield<uint64_t, 6, 12, 16>(f2) | getfield<uint64_t, 6, 16, 32>(f3) |
|
| + getfield<uint64_t, 6, 32, 36>(f4) | getfield<uint64_t, 6, 40, 48>(op2));
|
| + }
|
| +
|
| + inline void rie_2_format(Opcode opcode, int f1, int f2, int f3, int f4) {
|
| + uint32_t op1 = opcode >> 8;
|
| + uint32_t op2 = opcode & 0xff;
|
| + emit6bytes(
|
| + getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) |
|
| + getfield<uint64_t, 6, 12, 16>(f2) | getfield<uint64_t, 6, 16, 32>(f3) |
|
| + getfield<uint64_t, 6, 32, 40>(f4) | getfield<uint64_t, 6, 40, 48>(op2));
|
| + }
|
| +
|
| + inline void rie_3_format(Opcode opcode, int f1, int f2, int f3, int f4,
|
| + int f5) {
|
| + uint32_t op1 = opcode >> 8;
|
| + uint32_t op2 = opcode & 0xff;
|
| + emit6bytes(
|
| + getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) |
|
| + getfield<uint64_t, 6, 12, 16>(f2) | getfield<uint64_t, 6, 16, 24>(f3) |
|
| + getfield<uint64_t, 6, 24, 32>(f4) | getfield<uint64_t, 6, 32, 40>(f5) |
|
| + getfield<uint64_t, 6, 40, 48>(op2));
|
| + }
|
| +
|
| +#define DECLARE_S390_RIL_AB_INSTRUCTIONS(name, op_name, op_value) \
|
| + template <class R1> \
|
| + inline void name(R1 r1, const Operand& i2) { \
|
| + ril_format(op_name, r1.code(), i2.immediate()); \
|
| + }
|
| +#define DECLARE_S390_RIL_C_INSTRUCTIONS(name, op_name, op_value) \
|
| + inline void name(Condition m1, const Operand& i2) { \
|
| + ril_format(op_name, m1, i2.immediate()); \
|
| + }
|
| +
|
| + inline void ril_format(Opcode opcode, int f1, int f2) {
|
| + uint32_t op1 = opcode >> 4;
|
| + uint32_t op2 = opcode & 0xf;
|
| + emit6bytes(
|
| + getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) |
|
| + getfield<uint64_t, 6, 12, 16>(op2) | getfield<uint64_t, 6, 16, 48>(f2));
|
| + }
|
| + S390_RIL_A_OPCODE_LIST(DECLARE_S390_RIL_AB_INSTRUCTIONS)
|
| + S390_RIL_B_OPCODE_LIST(DECLARE_S390_RIL_AB_INSTRUCTIONS)
|
| + S390_RIL_C_OPCODE_LIST(DECLARE_S390_RIL_C_INSTRUCTIONS)
|
| +#undef DECLARE_S390_RIL_AB_INSTRUCTIONS
|
| +#undef DECLARE_S390_RIL_C_INSTRUCTIONS
|
| +
|
| + inline void ris_format(Opcode opcode, int f1, int f2, int f3, int f4,
|
| + int f5) {
|
| + uint32_t op1 = opcode >> 8;
|
| + uint32_t op2 = opcode & 0xff;
|
| + emit6bytes(
|
| + getfield<uint64_t, 6, 0, 8>(op1) | getfield<uint64_t, 6, 8, 12>(f1) |
|
| + getfield<uint64_t, 6, 12, 16>(f2) | getfield<uint64_t, 6, 16, 20>(f3) |
|
| + getfield<uint64_t, 6, 20, 32>(f4) | getfield<uint64_t, 6, 32, 40>(f5) |
|
| + getfield<uint64_t, 6, 40, 48>(op2));
|
| + }
|
| +
|
| +#define DECLARE_S390_RR_INSTRUCTIONS(name, op_name, op_value) \
|
| + inline void name(Register r1, Register r2) { \
|
| + rr_format(op_name, r1.code(), r2.code()); \
|
| + } \
|
| + inline void name(DoubleRegister r1, DoubleRegister r2) { \
|
| + rr_format(op_name, r1.code(), r2.code()); \
|
| + } \
|
| + inline void name(Condition m1, Register r2) { \
|
| + rr_format(op_name, m1, r2.code()); \
|
| + }
|
| +
|
| + inline void rr_format(Opcode opcode, int f1, int f2) {
|
| + emit2bytes(getfield<uint16_t, 2, 0, 8>(opcode) |
|
| + getfield<uint16_t, 2, 8, 12>(f1) |
|
| + getfield<uint16_t, 2, 12, 16>(f2));
|
| + }
|
| + S390_RR_OPCODE_LIST(DECLARE_S390_RR_INSTRUCTIONS)
|
| +#undef DECLARE_S390_RR_INSTRUCTIONS
|
| +
|
| +#define DECLARE_S390_RRD_INSTRUCTIONS(name, op_name, op_value) \
|
| + template <class R1, class R2, class R3> \
|
| + inline void name(R1 r1, R3 r3, R2 r2) { \
|
| + rrd_format(op_name, r1.code(), r3.code(), r2.code()); \
|
| + }
|
| + inline void rrd_format(Opcode opcode, int f1, int f2, int f3) {
|
| + emit4bytes(getfield<uint32_t, 4, 0, 16>(opcode) |
|
| + getfield<uint32_t, 4, 16, 20>(f1) |
|
| + getfield<uint32_t, 4, 24, 28>(f2) |
|
| + getfield<uint32_t, 4, 28, 32>(f3));
|
| + }
|
| + S390_RRD_OPCODE_LIST(DECLARE_S390_RRD_INSTRUCTIONS)
|
| +#undef DECLARE_S390_RRD_INSTRUCTIONS
|
| +
|
| +#define DECLARE_S390_RRE_INSTRUCTIONS(name, op_name, op_value) \
|
| + template <class R1, class R2> \
|
| + inline void name(R1 r1, R2 r2) { \
|
| + rre_format(op_name, r1.code(), r2.code()); \
|
| + }
|
| + inline void rre_format(Opcode opcode, int f1, int f2) {
|
| + emit4bytes(getfield<uint32_t, 4, 0, 16>(opcode) |
|
| + getfield<uint32_t, 4, 24, 28>(f1) |
|
| + getfield<uint32_t, 4, 28, 32>(f2));
|
| + }
|
| + S390_RRE_OPCODE_LIST(DECLARE_S390_RRE_INSTRUCTIONS)
|
| + // Special format
|
| + void lzdr(DoubleRegister r1) { rre_format(LZDR, r1.code(), 0); }
|
| +#undef DECLARE_S390_RRE_INSTRUCTIONS
|
| +
|
| + inline void rrf_format(Opcode opcode, int f1, int f2, int f3, int f4) {
|
| + emit4bytes(
|
| + getfield<uint32_t, 4, 0, 16>(opcode) |
|
| + getfield<uint32_t, 4, 16, 20>(f1) | getfield<uint32_t, 4, 20, 24>(f2) |
|
| + getfield<uint32_t, 4, 24, 28>(f3) | getfield<uint32_t, 4, 28, 32>(f4));
|
| + }
|
| +
|
| // Helper for unconditional branch to Label with update to save register
|
| void b(Register r, Label* l) {
|
| int32_t halfwords = branch_offset(l) / 2;
|
| @@ -647,10 +804,6 @@ class Assembler : public AssemblerBase {
|
| void name(Register r1, Register r2, const Operand& i3, const Operand& i4, \
|
| const Operand& i5)
|
|
|
| -#define RIL1_FORM(name) void name(Register r1, const Operand& i2)
|
| -
|
| -#define RIL2_FORM(name) void name(Condition m1, const Operand& i2)
|
| -
|
| #define RXE_FORM(name) \
|
| void name(Register r1, const MemOperand& opnd); \
|
| void name(Register r1, Register b2, Register x2, Disp d2)
|
| @@ -679,8 +832,6 @@ class Assembler : public AssemblerBase {
|
| void name(Register b1, Disp d1, const Operand& i2); \
|
| void name(const MemOperand& opnd, const Operand& i2)
|
|
|
| -#define RRE_FORM(name) void name(Register r1, Register r2)
|
| -
|
| #define RRF1_FORM(name) void name(Register r1, Register r2, Register r3)
|
|
|
| #define RRF2_FORM(name) void name(Condition m1, Register r1, Register r2)
|
| @@ -712,8 +863,6 @@ class Assembler : public AssemblerBase {
|
| void name(Register r1, Condition m3, Register b2, Disp d2); \
|
| void name(Register r1, Condition m3, const MemOperand& opnd)
|
|
|
| -#define RRD_FORM(name) void name(Register r1, Register r3, Register r2)
|
| -
|
| #define RRS_FORM(name) \
|
| void name(Register r1, Register r2, Register b4, Disp d4, Condition m3); \
|
| void name(Register r1, Register r2, Condition m3, const MemOperand& opnd)
|
| @@ -809,62 +958,37 @@ class Assembler : public AssemblerBase {
|
|
|
| // S390 instruction sets
|
| RX_FORM(bc);
|
| - RR_FORM(bctr);
|
| RX_FORM(cd);
|
| - RRE_FORM(cdr);
|
| RXE_FORM(cdb);
|
| RXE_FORM(ceb);
|
| RXE_FORM(ddb);
|
| - RRE_FORM(ddbr);
|
| SS1_FORM(ed);
|
| - RRE_FORM(epair);
|
| RX_FORM(ex);
|
| RRF2_FORM(fidbr);
|
| - RRE_FORM(flogr);
|
| RX_FORM(ic_z);
|
| RXY_FORM(icy);
|
| - RIL1_FORM(iihf);
|
| RI1_FORM(iihh);
|
| RI1_FORM(iihl);
|
| - RIL1_FORM(iilf);
|
| - RIL1_FORM(lgfi);
|
| RI1_FORM(iilh);
|
| RI1_FORM(iill);
|
| - RRE_FORM(lcgr);
|
| - RR_FORM(lcr);
|
| RX_FORM(le_z);
|
| RXY_FORM(ley);
|
| - RIL1_FORM(llihf);
|
| - RIL1_FORM(llilf);
|
| - RRE_FORM(lngr);
|
| - RR_FORM(lnr);
|
| RSY1_FORM(loc);
|
| RXY_FORM(lrv);
|
| - RRE_FORM(lrvr);
|
| - RRE_FORM(lrvgr);
|
| RXY_FORM(lrvh);
|
| RXY_FORM(lrvg);
|
| RXE_FORM(mdb);
|
| - RRE_FORM(mdbr);
|
| SS4_FORM(mvck);
|
| SSF_FORM(mvcos);
|
| SS4_FORM(mvcs);
|
| SS1_FORM(mvn);
|
| SS1_FORM(nc);
|
| SI_FORM(ni);
|
| - RIL1_FORM(nihf);
|
| - RIL1_FORM(nilf);
|
| RI1_FORM(nilh);
|
| RI1_FORM(nill);
|
| - RIL1_FORM(oihf);
|
| - RIL1_FORM(oilf);
|
| RI1_FORM(oill);
|
| - RRE_FORM(popcnt);
|
| RXE_FORM(sdb);
|
| - RRE_FORM(sdbr);
|
| - RIL1_FORM(slfi);
|
| RXY_FORM(slgf);
|
| - RIL1_FORM(slgfi);
|
| RS1_FORM(srdl);
|
| RX_FORM(ste);
|
| RXY_FORM(stey);
|
| @@ -874,51 +998,35 @@ class Assembler : public AssemblerBase {
|
| RI1_FORM(tmll);
|
| SS1_FORM(tr);
|
| S_FORM(ts);
|
| - RIL1_FORM(xihf);
|
| - RIL1_FORM(xilf);
|
|
|
| // Load Address Instructions
|
| void la(Register r, const MemOperand& opnd);
|
| void lay(Register r, const MemOperand& opnd);
|
| - void larl(Register r1, const Operand& opnd);
|
| void larl(Register r, Label* l);
|
|
|
| // Load Instructions
|
| void lb(Register r, const MemOperand& src);
|
| - void lbr(Register r1, Register r2);
|
| void lgb(Register r, const MemOperand& src);
|
| - void lgbr(Register r1, Register r2);
|
| void lh(Register r, const MemOperand& src);
|
| void lhy(Register r, const MemOperand& src);
|
| - void lhr(Register r1, Register r2);
|
| void lgh(Register r, const MemOperand& src);
|
| - void lghr(Register r1, Register r2);
|
| void l(Register r, const MemOperand& src);
|
| void ly(Register r, const MemOperand& src);
|
| - void lr(Register r1, Register r2);
|
| void lg(Register r, const MemOperand& src);
|
| - void lgr(Register r1, Register r2);
|
| void lgf(Register r, const MemOperand& src);
|
| - void lgfr(Register r1, Register r2);
|
| void lhi(Register r, const Operand& imm);
|
| void lghi(Register r, const Operand& imm);
|
|
|
| // Load And Test Instructions
|
| void lt_z(Register r, const MemOperand& src);
|
| void ltg(Register r, const MemOperand& src);
|
| - void ltr(Register r1, Register r2);
|
| - void ltgr(Register r1, Register r2);
|
| - void ltgfr(Register r1, Register r2);
|
|
|
| // Load Logical Instructions
|
| void llc(Register r, const MemOperand& src);
|
| void llgc(Register r, const MemOperand& src);
|
| void llgf(Register r, const MemOperand& src);
|
| - void llgfr(Register r1, Register r2);
|
| void llh(Register r, const MemOperand& src);
|
| void llgh(Register r, const MemOperand& src);
|
| - void llhr(Register r1, Register r2);
|
| - void llghr(Register r1, Register r2);
|
|
|
| // Load Multiple Instructions
|
| void lm(Register r1, Register r2, const MemOperand& src);
|
| @@ -948,24 +1056,16 @@ class Assembler : public AssemblerBase {
|
| // Compare Instructions
|
| void c(Register r, const MemOperand& opnd);
|
| void cy(Register r, const MemOperand& opnd);
|
| - void cr_z(Register r1, Register r2);
|
| void cg(Register r, const MemOperand& opnd);
|
| - void cgr(Register r1, Register r2);
|
| void ch(Register r, const MemOperand& opnd);
|
| void chy(Register r, const MemOperand& opnd);
|
| void chi(Register r, const Operand& opnd);
|
| void cghi(Register r, const Operand& opnd);
|
| - void cfi(Register r, const Operand& opnd);
|
| - void cgfi(Register r, const Operand& opnd);
|
|
|
| // Compare Logical Instructions
|
| void cl(Register r, const MemOperand& opnd);
|
| void cly(Register r, const MemOperand& opnd);
|
| - void clr(Register r1, Register r2);
|
| void clg(Register r, const MemOperand& opnd);
|
| - void clgr(Register r1, Register r2);
|
| - void clfi(Register r, const Operand& opnd);
|
| - void clgfi(Register r, const Operand& opnd);
|
| void cli(const MemOperand& mem, const Operand& imm);
|
| void cliy(const MemOperand& mem, const Operand& imm);
|
| void clc(const MemOperand& opnd1, const MemOperand& opnd2, Length length);
|
| @@ -1027,52 +1127,38 @@ class Assembler : public AssemblerBase {
|
| void mvc(const MemOperand& opnd1, const MemOperand& opnd2, uint32_t length);
|
|
|
| // Branch Instructions
|
| - void basr(Register r1, Register r2);
|
| - void bcr(Condition m, Register target);
|
| void bct(Register r, const MemOperand& opnd);
|
| void bctg(Register r, const MemOperand& opnd);
|
| void bras(Register r, const Operand& opnd);
|
| - void brasl(Register r, const Operand& opnd);
|
| void brc(Condition c, const Operand& opnd);
|
| - void brcl(Condition m, const Operand& opnd, bool isCodeTarget = false);
|
| void brct(Register r1, const Operand& opnd);
|
| void brctg(Register r1, const Operand& opnd);
|
|
|
| // 32-bit Add Instructions
|
| void a(Register r1, const MemOperand& opnd);
|
| void ay(Register r1, const MemOperand& opnd);
|
| - void afi(Register r1, const Operand& opnd);
|
| void ah(Register r1, const MemOperand& opnd);
|
| void ahy(Register r1, const MemOperand& opnd);
|
| void ahi(Register r1, const Operand& opnd);
|
| void ahik(Register r1, Register r3, const Operand& opnd);
|
| - void ar(Register r1, Register r2);
|
| void ark(Register r1, Register r2, Register r3);
|
| void asi(const MemOperand&, const Operand&);
|
|
|
| // 64-bit Add Instructions
|
| void ag(Register r1, const MemOperand& opnd);
|
| void agf(Register r1, const MemOperand& opnd);
|
| - void agfi(Register r1, const Operand& opnd);
|
| - void agfr(Register r1, Register r2);
|
| void aghi(Register r1, const Operand& opnd);
|
| void aghik(Register r1, Register r3, const Operand& opnd);
|
| - void agr(Register r1, Register r2);
|
| void agrk(Register r1, Register r2, Register r3);
|
| void agsi(const MemOperand&, const Operand&);
|
|
|
| // 32-bit Add Logical Instructions
|
| void al_z(Register r1, const MemOperand& opnd);
|
| void aly(Register r1, const MemOperand& opnd);
|
| - void alfi(Register r1, const Operand& opnd);
|
| - void alr(Register r1, Register r2);
|
| - void alcr(Register r1, Register r2);
|
| void alrk(Register r1, Register r2, Register r3);
|
|
|
| // 64-bit Add Logical Instructions
|
| void alg(Register r1, const MemOperand& opnd);
|
| - void algfi(Register r1, const Operand& opnd);
|
| - void algr(Register r1, Register r2);
|
| void algrk(Register r1, Register r2, Register r3);
|
|
|
| // 32-bit Subtract Instructions
|
| @@ -1080,107 +1166,69 @@ class Assembler : public AssemblerBase {
|
| void sy(Register r1, const MemOperand& opnd);
|
| void sh(Register r1, const MemOperand& opnd);
|
| void shy(Register r1, const MemOperand& opnd);
|
| - void sr(Register r1, Register r2);
|
| void srk(Register r1, Register r2, Register r3);
|
|
|
| // 64-bit Subtract Instructions
|
| void sg(Register r1, const MemOperand& opnd);
|
| void sgf(Register r1, const MemOperand& opnd);
|
| - void sgr(Register r1, Register r2);
|
| - void sgfr(Register r1, Register r2);
|
| void sgrk(Register r1, Register r2, Register r3);
|
|
|
| // 32-bit Subtract Logical Instructions
|
| void sl(Register r1, const MemOperand& opnd);
|
| void sly(Register r1, const MemOperand& opnd);
|
| - void slr(Register r1, Register r2);
|
| void slrk(Register r1, Register r2, Register r3);
|
| - void slbr(Register r1, Register r2);
|
|
|
| // 64-bit Subtract Logical Instructions
|
| void slg(Register r1, const MemOperand& opnd);
|
| - void slgr(Register r1, Register r2);
|
| void slgrk(Register r1, Register r2, Register r3);
|
|
|
| // 32-bit Multiply Instructions
|
| void m(Register r1, const MemOperand& opnd);
|
| void mfy(Register r1, const MemOperand& opnd);
|
| - void mr_z(Register r1, Register r2);
|
| void ml(Register r1, const MemOperand& opnd);
|
| - void mlr(Register r1, Register r2);
|
| void ms(Register r1, const MemOperand& opnd);
|
| void msy(Register r1, const MemOperand& opnd);
|
| - void msfi(Register r1, const Operand& opnd);
|
| - void msr(Register r1, Register r2);
|
| void mh(Register r1, const MemOperand& opnd);
|
| void mhy(Register r1, const MemOperand& opnd);
|
| void mhi(Register r1, const Operand& opnd);
|
|
|
| // 64-bit Multiply Instructions
|
| void mlg(Register r1, const MemOperand& opnd);
|
| - void mlgr(Register r1, Register r2);
|
| void mghi(Register r1, const Operand& opnd);
|
| - void msgfi(Register r1, const Operand& opnd);
|
| void msg(Register r1, const MemOperand& opnd);
|
| - void msgr(Register r1, Register r2);
|
|
|
| // 32-bit Divide Instructions
|
| void d(Register r1, const MemOperand& opnd);
|
| - void dr(Register r1, Register r2);
|
| void dl(Register r1, const MemOperand& opnd);
|
| - void dlr(Register r1, Register r2);
|
| -
|
| - // 64-bit Divide Instructions
|
| - void dlgr(Register r1, Register r2);
|
| - void dsgr(Register r1, Register r2);
|
|
|
| // Bitwise Instructions (AND / OR / XOR)
|
| void n(Register r1, const MemOperand& opnd);
|
| void ny(Register r1, const MemOperand& opnd);
|
| - void nr(Register r1, Register r2);
|
| void nrk(Register r1, Register r2, Register r3);
|
| void ng(Register r1, const MemOperand& opnd);
|
| - void ngr(Register r1, Register r2);
|
| void ngrk(Register r1, Register r2, Register r3);
|
| void o(Register r1, const MemOperand& opnd);
|
| void oy(Register r1, const MemOperand& opnd);
|
| - void or_z(Register r1, Register r2);
|
| void ork(Register r1, Register r2, Register r3);
|
| void og(Register r1, const MemOperand& opnd);
|
| - void ogr(Register r1, Register r2);
|
| void ogrk(Register r1, Register r2, Register r3);
|
| void x(Register r1, const MemOperand& opnd);
|
| void xy(Register r1, const MemOperand& opnd);
|
| - void xr(Register r1, Register r2);
|
| void xrk(Register r1, Register r2, Register r3);
|
| void xg(Register r1, const MemOperand& opnd);
|
| - void xgr(Register r1, Register r2);
|
| void xgrk(Register r1, Register r2, Register r3);
|
| void xc(const MemOperand& opnd1, const MemOperand& opnd2, Length length);
|
|
|
| - // Bitwise GPR <-> FPR Conversion Instructions
|
| - void lgdr(Register r1, DoubleRegister f2);
|
| - void ldgr(DoubleRegister f1, Register r2);
|
| -
|
| // Floating Point Load / Store Instructions
|
| void ld(DoubleRegister r1, const MemOperand& opnd);
|
| void ldy(DoubleRegister r1, const MemOperand& opnd);
|
| void le_z(DoubleRegister r1, const MemOperand& opnd);
|
| void ley(DoubleRegister r1, const MemOperand& opnd);
|
| - void ldr(DoubleRegister r1, DoubleRegister r2);
|
| - void ltdbr(DoubleRegister r1, DoubleRegister r2);
|
| - void ltebr(DoubleRegister r1, DoubleRegister r2);
|
| void std(DoubleRegister r1, const MemOperand& opnd);
|
| void stdy(DoubleRegister r1, const MemOperand& opnd);
|
| void ste(DoubleRegister r1, const MemOperand& opnd);
|
| void stey(DoubleRegister r1, const MemOperand& opnd);
|
|
|
| - // Floating Point Load Rounded/Positive Instructions
|
| - void ledbr(DoubleRegister r1, DoubleRegister r2);
|
| - void ldebr(DoubleRegister r1, DoubleRegister r2);
|
| - void lpebr(DoubleRegister r1, DoubleRegister r2);
|
| - void lpdbr(DoubleRegister r1, DoubleRegister r2);
|
| -
|
| // Floating <-> Fixed Point Conversion Instructions
|
| void cdlfbr(Condition m3, Condition m4, DoubleRegister fltReg,
|
| Register fixReg);
|
| @@ -1199,40 +1247,20 @@ class Assembler : public AssemblerBase {
|
| void clgebr(Condition m3, Condition m4, Register fixReg,
|
| DoubleRegister fltReg);
|
| void cfdbr(Condition m, Register fixReg, DoubleRegister fltReg);
|
| - void cdfbr(DoubleRegister fltReg, Register fixReg);
|
| void cgebr(Condition m, Register fixReg, DoubleRegister fltReg);
|
| void cgdbr(Condition m, Register fixReg, DoubleRegister fltReg);
|
| - void cegbr(DoubleRegister fltReg, Register fixReg);
|
| - void cdgbr(DoubleRegister fltReg, Register fixReg);
|
| void cfebr(Condition m3, Register fixReg, DoubleRegister fltReg);
|
| void cefbr(Condition m3, DoubleRegister fltReg, Register fixReg);
|
|
|
| // Floating Point Compare Instructions
|
| - void cebr(DoubleRegister r1, DoubleRegister r2);
|
| void cdb(DoubleRegister r1, const MemOperand& opnd);
|
| - void cdbr(DoubleRegister r1, DoubleRegister r2);
|
|
|
| // Floating Point Arithmetic Instructions
|
| - void aebr(DoubleRegister r1, DoubleRegister r2);
|
| void adb(DoubleRegister r1, const MemOperand& opnd);
|
| - void adbr(DoubleRegister r1, DoubleRegister r2);
|
| - void lzdr(DoubleRegister r1);
|
| - void sebr(DoubleRegister r1, DoubleRegister r2);
|
| void sdb(DoubleRegister r1, const MemOperand& opnd);
|
| - void sdbr(DoubleRegister r1, DoubleRegister r2);
|
| - void meebr(DoubleRegister r1, DoubleRegister r2);
|
| void mdb(DoubleRegister r1, const MemOperand& opnd);
|
| - void mdbr(DoubleRegister r1, DoubleRegister r2);
|
| - void debr(DoubleRegister r1, DoubleRegister r2);
|
| void ddb(DoubleRegister r1, const MemOperand& opnd);
|
| - void ddbr(DoubleRegister r1, DoubleRegister r2);
|
| - void madbr(DoubleRegister r1, DoubleRegister r2, DoubleRegister r3);
|
| - void msdbr(DoubleRegister r1, DoubleRegister r2, DoubleRegister r3);
|
| - void sqebr(DoubleRegister r1, DoubleRegister r2);
|
| void sqdb(DoubleRegister r1, const MemOperand& opnd);
|
| - void sqdbr(DoubleRegister r1, DoubleRegister r2);
|
| - void lcdbr(DoubleRegister r1, DoubleRegister r2);
|
| - void lcebr(DoubleRegister r1, DoubleRegister r2);
|
| void ldeb(DoubleRegister r1, const MemOperand& opnd);
|
|
|
| enum FIDBRA_MASK3 {
|
| @@ -1415,9 +1443,6 @@ class Assembler : public AssemblerBase {
|
|
|
| // Helpers to emit binary encoding for various instruction formats.
|
|
|
| - inline void rr_form(Opcode op, Register r1, Register r2);
|
| - inline void rr_form(Opcode op, DoubleRegister r1, DoubleRegister r2);
|
| - inline void rr_form(Opcode op, Condition m1, Register r2);
|
| inline void rr2_form(uint8_t op, Condition m1, Register r2);
|
|
|
| inline void rx_form(Opcode op, Register r1, Register x2, Register b2,
|
| @@ -1432,17 +1457,9 @@ class Assembler : public AssemblerBase {
|
| inline void rie_f_form(Opcode op, Register r1, Register r2, const Operand& i3,
|
| const Operand& i4, const Operand& i5);
|
|
|
| - inline void ril_form(Opcode op, Register r1, const Operand& i2);
|
| - inline void ril_form(Opcode op, Condition m1, const Operand& i2);
|
| -
|
| inline void ris_form(Opcode op, Register r1, Condition m3, Register b4,
|
| Disp d4, const Operand& i2);
|
|
|
| - inline void rrd_form(Opcode op, Register r1, Register r3, Register r2);
|
| -
|
| - inline void rre_form(Opcode op, Register r1, Register r2);
|
| - inline void rre_form(Opcode op, DoubleRegister r1, DoubleRegister r2);
|
| -
|
| inline void rrf1_form(Opcode op, Register r1, Register r2, Register r3);
|
| inline void rrf1_form(uint32_t x);
|
| inline void rrf2_form(uint32_t x);
|
|
|