| Index: src/s390/assembler-s390.h
|
| diff --git a/src/s390/assembler-s390.h b/src/s390/assembler-s390.h
|
| index 64da50f2b3610491302b4a014f1980c135928723..2d27a9a26c326ae0b61740f125242da92316389c 100644
|
| --- a/src/s390/assembler-s390.h
|
| +++ b/src/s390/assembler-s390.h
|
| @@ -733,6 +733,39 @@ class Assembler : public AssemblerBase {
|
| }
|
| #undef DECLARE_S390_RX_INSTRUCTIONS
|
|
|
| +#define DECLARE_S390_RXY_INSTRUCTIONS(name, op_name, op_value) \
|
| + template <class R1, class R2> \
|
| + inline void name(R1 r1, R2 r2, Register b2, Disp d2) { \
|
| + rxy_format(op_name, r1.code(), r2.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 rxy_format(Opcode opcode, int f1, int f2, int f3, int f4) {
|
| + DCHECK(is_uint16(opcode));
|
| + DCHECK(is_int20(f4));
|
| + emit6bytes(getfield<uint64_t, 6, 0, 8>(opcode >> 8) |
|
| + 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 & 0x0fff) |
|
| + getfield<uint64_t, 6, 32, 40>(f4 >> 12) |
|
| + getfield<uint64_t, 6, 40, 48>(opcode & 0x00ff));
|
| + }
|
| + S390_RXY_A_OPCODE_LIST(DECLARE_S390_RXY_INSTRUCTIONS)
|
| +
|
| + void pfd(Condition cond, const MemOperand& opnd) {
|
| + pfd(cond, opnd.getIndexRegister(),
|
| + opnd.getBaseRegister(), opnd.getDisplacement());
|
| + }
|
| + void pfd(Condition cond, Register x2, Register b2, Disp d2) {
|
| + rxy_format(PFD, cond, x2.code(), b2.code(), d2);
|
| + }
|
| +#undef DECLARE_S390_RXY_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;
|
| @@ -839,10 +872,6 @@ class Assembler : public AssemblerBase {
|
| void name(Register r1, Register r3, const MemOperand& opnd); \
|
| void name(Register r1, Register r3, Register b2, Register x2, Disp d2)
|
|
|
| -#define RXY_FORM(name) \
|
| - void name(Register r1, Register x2, Register b2, Disp d2); \
|
| - void name(Register r1, const MemOperand& opnd)
|
| -
|
| #define RSI_FORM(name) void name(Register r1, Register r3, const Operand& i)
|
|
|
| #define RIS_FORM(name) \
|
| @@ -989,16 +1018,11 @@ class Assembler : public AssemblerBase {
|
| RXE_FORM(ddb);
|
| SS1_FORM(ed);
|
| RRF2_FORM(fidbr);
|
| - RXY_FORM(icy);
|
| RI1_FORM(iihh);
|
| RI1_FORM(iihl);
|
| RI1_FORM(iilh);
|
| RI1_FORM(iill);
|
| - RXY_FORM(ley);
|
| RSY1_FORM(loc);
|
| - RXY_FORM(lrv);
|
| - RXY_FORM(lrvh);
|
| - RXY_FORM(lrvg);
|
| RXE_FORM(mdb);
|
| SS4_FORM(mvck);
|
| SSF_FORM(mvcos);
|
| @@ -1009,47 +1033,19 @@ class Assembler : public AssemblerBase {
|
| RI1_FORM(nilh);
|
| RI1_FORM(nill);
|
| RI1_FORM(oill);
|
| - RXY_FORM(pfd);
|
| - RXY_FORM(dsgf);
|
| - RXY_FORM(msgf);
|
| - RXY_FORM(dsg);
|
| RXE_FORM(sdb);
|
| - RXY_FORM(slgf);
|
| RS1_FORM(srdl);
|
| - RXY_FORM(stey);
|
| - RXY_FORM(strv);
|
| - RXY_FORM(strvh);
|
| - RXY_FORM(strvg);
|
| RI1_FORM(tmll);
|
| SS1_FORM(tr);
|
| S_FORM(ts);
|
|
|
| // Load Address Instructions
|
| - 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 lhy(Register r, const MemOperand& src);
|
| - void lgh(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);
|
| 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);
|
| -
|
| - // 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 llh(Register r, const MemOperand& src);
|
| - void llgh(Register r, const MemOperand& src);
|
| -
|
| // Load Multiple Instructions
|
| void lm(Register r1, Register r2, const MemOperand& src);
|
| void lmy(Register r1, Register r2, const MemOperand& src);
|
| @@ -1062,10 +1058,6 @@ class Assembler : public AssemblerBase {
|
| void locg(Condition m3, Register r1, const MemOperand& src);
|
|
|
| // Store Instructions
|
| - void stcy(Register r, const MemOperand& src);
|
| - void stg(Register r, const MemOperand& src);
|
| - void sthy(Register r, const MemOperand& src);
|
| - void sty(Register r, const MemOperand& src);
|
|
|
| // Store Multiple Instructions
|
| void stm(Register r1, Register r2, const MemOperand& src);
|
| @@ -1073,15 +1065,10 @@ class Assembler : public AssemblerBase {
|
| void stmg(Register r1, Register r2, const MemOperand& src);
|
|
|
| // Compare Instructions
|
| - void cy(Register r, const MemOperand& opnd);
|
| - void cg(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 cly(Register r, const MemOperand& opnd);
|
| - void clg(Register r, const MemOperand& 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);
|
| @@ -1143,90 +1130,56 @@ class Assembler : public AssemblerBase {
|
| void mvc(const MemOperand& opnd1, const MemOperand& opnd2, uint32_t length);
|
|
|
| // Branch Instructions
|
| - void bctg(Register r, const MemOperand& opnd);
|
| void bras(Register r, const Operand& opnd);
|
| void brc(Condition c, const Operand& opnd);
|
| void brct(Register r1, const Operand& opnd);
|
| void brctg(Register r1, const Operand& opnd);
|
|
|
| // 32-bit Add Instructions
|
| - void ay(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 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 aghi(Register r1, const Operand& opnd);
|
| void aghik(Register r1, Register r3, const Operand& opnd);
|
| void agrk(Register r1, Register r2, Register r3);
|
| void agsi(const MemOperand&, const Operand&);
|
|
|
| // 32-bit Add Logical Instructions
|
| - void aly(Register r1, const MemOperand& opnd);
|
| void alrk(Register r1, Register r2, Register r3);
|
|
|
| // 64-bit Add Logical Instructions
|
| - void alg(Register r1, const MemOperand& opnd);
|
| void algrk(Register r1, Register r2, Register r3);
|
|
|
| // 32-bit Subtract Instructions
|
| - void sy(Register r1, const MemOperand& opnd);
|
| - void shy(Register r1, const MemOperand& opnd);
|
| 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 sgrk(Register r1, Register r2, Register r3);
|
|
|
| // 32-bit Subtract Logical Instructions
|
| - void sly(Register r1, const MemOperand& opnd);
|
| void slrk(Register r1, Register r2, Register r3);
|
|
|
| // 64-bit Subtract Logical Instructions
|
| - void slg(Register r1, const MemOperand& opnd);
|
| void slgrk(Register r1, Register r2, Register r3);
|
|
|
| // 32-bit Multiply Instructions
|
| - void mfy(Register r1, const MemOperand& opnd);
|
| - void ml(Register r1, const MemOperand& opnd);
|
| - void msy(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 mghi(Register r1, const Operand& opnd);
|
| - void msg(Register r1, const MemOperand& opnd);
|
| -
|
| - // 32-bit Divide Instructions
|
| - void dl(Register r1, const MemOperand& opnd);
|
|
|
| // Bitwise Instructions (AND / OR / XOR)
|
| - 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 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 xy(Register r1, const MemOperand& opnd);
|
| void xrk(Register r1, Register r2, Register r3);
|
| - void xg(Register r1, const MemOperand& opnd);
|
| void xgrk(Register r1, Register r2, Register r3);
|
| void xc(const MemOperand& opnd1, const MemOperand& opnd2, Length length);
|
|
|
| - // Floating Point Load / Store Instructions
|
| - void ldy(DoubleRegister r1, const MemOperand& opnd);
|
| - void ley(DoubleRegister r1, const MemOperand& opnd);
|
| - void stdy(DoubleRegister r1, const MemOperand& opnd);
|
| - void stey(DoubleRegister r1, const MemOperand& opnd);
|
| -
|
| // Floating <-> Fixed Point Conversion Instructions
|
| void cdlfbr(Condition m3, Condition m4, DoubleRegister fltReg,
|
| Register fixReg);
|
| @@ -1482,13 +1435,6 @@ class Assembler : public AssemblerBase {
|
| inline void rxf_form(Opcode op, Register r1, Register r3, Register b2,
|
| Register x2, Disp d2);
|
|
|
| - inline void rxy_form(Opcode op, Register r1, Register x2, Register b2,
|
| - Disp d2);
|
| - inline void rxy_form(Opcode op, Register r1, Condition m3, Register b2,
|
| - Disp d2);
|
| - inline void rxy_form(Opcode op, DoubleRegister r1, Register x2, Register b2,
|
| - Disp d2);
|
| -
|
| inline void s_form(Opcode op, Register b1, Disp d2);
|
|
|
| inline void si_form(Opcode op, const Operand& i2, Register b1, Disp d1);
|
|
|