| Index: src/s390/assembler-s390.h
|
| diff --git a/src/s390/assembler-s390.h b/src/s390/assembler-s390.h
|
| index 814052096f360a6bf39de3d1f4fa6fe7f21e6884..64da50f2b3610491302b4a014f1980c135928723 100644
|
| --- a/src/s390/assembler-s390.h
|
| +++ b/src/s390/assembler-s390.h
|
| @@ -702,6 +702,37 @@ class Assembler : public AssemblerBase {
|
| getfield<uint32_t, 4, 24, 28>(f3) | getfield<uint32_t, 4, 28, 32>(f4));
|
| }
|
|
|
| +#define DECLARE_S390_RX_INSTRUCTIONS(name, op_name, op_value) \
|
| + template <class R1> \
|
| + inline void name(R1 r1, Register x2, Register b2, Disp d2) { \
|
| + rx_format(op_name, r1.code(), x2.code(), b2.code(), d2); \
|
| + } \
|
| + template <class R1> \
|
| + inline void name(R1 r1, const MemOperand& opnd) { \
|
| + name(r1, opnd.getIndexRegister(), \
|
| + opnd.getBaseRegister(), opnd.getDisplacement()); \
|
| + }
|
| +
|
| + inline void rx_format(Opcode opcode, int f1, int f2, int f3, int f4) {
|
| + DCHECK(is_uint8(opcode));
|
| + DCHECK(is_uint12(f4));
|
| + emit4bytes(getfield<uint32_t, 4, 0, 8>(opcode) |
|
| + getfield<uint32_t, 4, 8, 12>(f1) |
|
| + getfield<uint32_t, 4, 12, 16>(f2) |
|
| + getfield<uint32_t, 4, 16, 20>(f3) |
|
| + getfield<uint32_t, 4, 20, 32>(f4));
|
| + }
|
| + S390_RX_A_OPCODE_LIST(DECLARE_S390_RX_INSTRUCTIONS)
|
| +
|
| + void bc(Condition cond, const MemOperand& opnd) {
|
| + bc(cond, opnd.getIndexRegister(),
|
| + opnd.getBaseRegister(), opnd.getDisplacement());
|
| + }
|
| + void bc(Condition cond, Register x2, Register b2, Disp d2) {
|
| + rx_format(BC, cond, x2.code(), b2.code(), d2);
|
| + }
|
| +#undef DECLARE_S390_RX_INSTRUCTIONS
|
| +
|
| // Helper for unconditional branch to Label with update to save register
|
| void b(Register r, Label* l) {
|
| int32_t halfwords = branch_offset(l) / 2;
|
| @@ -790,10 +821,6 @@ class Assembler : public AssemblerBase {
|
|
|
| #define RR2_FORM(name) void name(Condition m1, Register r2)
|
|
|
| -#define RX_FORM(name) \
|
| - void name(Register r1, Register x2, Register b2, Disp d2); \
|
| - void name(Register r1, const MemOperand& opnd)
|
| -
|
| #define RI1_FORM(name) void name(Register r, const Operand& i)
|
|
|
| #define RI2_FORM(name) void name(Condition m, const Operand& i)
|
| @@ -957,21 +984,16 @@ class Assembler : public AssemblerBase {
|
| }
|
|
|
| // S390 instruction sets
|
| - RX_FORM(bc);
|
| - RX_FORM(cd);
|
| RXE_FORM(cdb);
|
| RXE_FORM(ceb);
|
| RXE_FORM(ddb);
|
| SS1_FORM(ed);
|
| - RX_FORM(ex);
|
| RRF2_FORM(fidbr);
|
| - RX_FORM(ic_z);
|
| RXY_FORM(icy);
|
| RI1_FORM(iihh);
|
| RI1_FORM(iihl);
|
| RI1_FORM(iilh);
|
| RI1_FORM(iill);
|
| - RX_FORM(le_z);
|
| RXY_FORM(ley);
|
| RSY1_FORM(loc);
|
| RXY_FORM(lrv);
|
| @@ -994,7 +1016,6 @@ class Assembler : public AssemblerBase {
|
| RXE_FORM(sdb);
|
| RXY_FORM(slgf);
|
| RS1_FORM(srdl);
|
| - RX_FORM(ste);
|
| RXY_FORM(stey);
|
| RXY_FORM(strv);
|
| RXY_FORM(strvh);
|
| @@ -1004,17 +1025,14 @@ class Assembler : public AssemblerBase {
|
| S_FORM(ts);
|
|
|
| // Load Address Instructions
|
| - void la(Register r, const MemOperand& opnd);
|
| void lay(Register r, const MemOperand& opnd);
|
| void larl(Register r, Label* l);
|
|
|
| // Load Instructions
|
| void lb(Register r, const MemOperand& src);
|
| void lgb(Register r, const MemOperand& src);
|
| - void lh(Register r, const MemOperand& src);
|
| void lhy(Register r, const MemOperand& src);
|
| void lgh(Register r, const MemOperand& src);
|
| - void l(Register r, const MemOperand& src);
|
| void ly(Register r, const MemOperand& src);
|
| void lg(Register r, const MemOperand& src);
|
| void lgf(Register r, const MemOperand& src);
|
| @@ -1044,11 +1062,8 @@ class Assembler : public AssemblerBase {
|
| void locg(Condition m3, Register r1, const MemOperand& src);
|
|
|
| // Store Instructions
|
| - void st(Register r, const MemOperand& src);
|
| - void stc(Register r, const MemOperand& src);
|
| void stcy(Register r, const MemOperand& src);
|
| void stg(Register r, const MemOperand& src);
|
| - void sth(Register r, const MemOperand& src);
|
| void sthy(Register r, const MemOperand& src);
|
| void sty(Register r, const MemOperand& src);
|
|
|
| @@ -1058,16 +1073,13 @@ class Assembler : public AssemblerBase {
|
| void stmg(Register r1, Register r2, const MemOperand& src);
|
|
|
| // Compare Instructions
|
| - void c(Register r, const MemOperand& opnd);
|
| void cy(Register r, const MemOperand& opnd);
|
| void cg(Register r, const MemOperand& opnd);
|
| - 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);
|
|
|
| // Compare Logical Instructions
|
| - void cl(Register r, const MemOperand& opnd);
|
| void cly(Register r, const MemOperand& opnd);
|
| void clg(Register r, const MemOperand& opnd);
|
| void cli(const MemOperand& mem, const Operand& imm);
|
| @@ -1131,7 +1143,6 @@ class Assembler : public AssemblerBase {
|
| void mvc(const MemOperand& opnd1, const MemOperand& opnd2, uint32_t length);
|
|
|
| // Branch Instructions
|
| - void bct(Register r, const MemOperand& opnd);
|
| void bctg(Register r, const MemOperand& opnd);
|
| void bras(Register r, const Operand& opnd);
|
| void brc(Condition c, const Operand& opnd);
|
| @@ -1139,9 +1150,7 @@ class Assembler : public AssemblerBase {
|
| 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 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);
|
| @@ -1157,7 +1166,6 @@ class Assembler : public AssemblerBase {
|
| 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 alrk(Register r1, Register r2, Register r3);
|
|
|
| @@ -1166,9 +1174,7 @@ class Assembler : public AssemblerBase {
|
| void algrk(Register r1, Register r2, Register r3);
|
|
|
| // 32-bit Subtract Instructions
|
| - void s(Register r1, const MemOperand& opnd);
|
| void sy(Register r1, const MemOperand& opnd);
|
| - void sh(Register r1, const MemOperand& opnd);
|
| void shy(Register r1, const MemOperand& opnd);
|
| void srk(Register r1, Register r2, Register r3);
|
|
|
| @@ -1178,7 +1184,6 @@ class Assembler : public AssemblerBase {
|
| 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 slrk(Register r1, Register r2, Register r3);
|
|
|
| @@ -1187,12 +1192,9 @@ class Assembler : public AssemblerBase {
|
| 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 ml(Register r1, const MemOperand& opnd);
|
| - void ms(Register r1, const MemOperand& opnd);
|
| void msy(Register r1, const MemOperand& opnd);
|
| - void mh(Register r1, const MemOperand& opnd);
|
| void mhy(Register r1, const MemOperand& opnd);
|
| void mhi(Register r1, const Operand& opnd);
|
|
|
| @@ -1202,21 +1204,17 @@ class Assembler : public AssemblerBase {
|
| void msg(Register r1, const MemOperand& opnd);
|
|
|
| // 32-bit Divide Instructions
|
| - void d(Register r1, const MemOperand& opnd);
|
| void dl(Register r1, const MemOperand& opnd);
|
|
|
| // Bitwise Instructions (AND / OR / XOR)
|
| - void n(Register r1, const MemOperand& opnd);
|
| void ny(Register r1, const MemOperand& opnd);
|
| void nrk(Register r1, Register r2, Register r3);
|
| void ng(Register r1, const MemOperand& opnd);
|
| void ngrk(Register r1, Register r2, Register r3);
|
| - void o(Register r1, const MemOperand& opnd);
|
| void oy(Register r1, const MemOperand& opnd);
|
| void ork(Register r1, Register r2, Register r3);
|
| void og(Register r1, const MemOperand& opnd);
|
| void ogrk(Register r1, Register r2, Register r3);
|
| - void x(Register r1, const MemOperand& opnd);
|
| void xy(Register r1, const MemOperand& opnd);
|
| void xrk(Register r1, Register r2, Register r3);
|
| void xg(Register r1, const MemOperand& opnd);
|
| @@ -1224,13 +1222,9 @@ class Assembler : public AssemblerBase {
|
| void xc(const MemOperand& opnd1, const MemOperand& opnd2, Length length);
|
|
|
| // 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 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 <-> Fixed Point Conversion Instructions
|
| @@ -1449,11 +1443,6 @@ class Assembler : public AssemblerBase {
|
|
|
| inline void rr2_form(uint8_t op, Condition m1, Register r2);
|
|
|
| - inline void rx_form(Opcode op, Register r1, Register x2, Register b2,
|
| - Disp d2);
|
| - inline void rx_form(Opcode op, DoubleRegister r1, Register x2, Register b2,
|
| - Disp d2);
|
| -
|
| inline void ri_form(Opcode op, Register r1, const Operand& i2);
|
| inline void ri_form(Opcode op, Condition m1, const Operand& i2);
|
|
|
|
|