| Index: src/s390/assembler-s390.cc
|
| diff --git a/src/s390/assembler-s390.cc b/src/s390/assembler-s390.cc
|
| index 697b71f050e0047dffe56ecb17a3008add6d5080..b07974b59a40834eb25896553acb19b328f765f7 100644
|
| --- a/src/s390/assembler-s390.cc
|
| +++ b/src/s390/assembler-s390.cc
|
| @@ -528,11 +528,11 @@ void Assembler::load_label_offset(Register r1, Label* L) {
|
|
|
| // Pseudo op - branch on condition
|
| void Assembler::branchOnCond(Condition c, int branch_offset, bool is_bound) {
|
| - int offset = branch_offset;
|
| - if (is_bound && is_int16(offset)) {
|
| - brc(c, Operand(offset & 0xFFFF)); // short jump
|
| + int offset_in_halfwords = branch_offset / 2;
|
| + if (is_bound && is_int16(offset_in_halfwords)) {
|
| + brc(c, Operand(offset_in_halfwords & 0xFFFF)); // short jump
|
| } else {
|
| - brcl(c, Operand(offset)); // long jump
|
| + brcl(c, Operand(offset_in_halfwords)); // long jump
|
| }
|
| }
|
|
|
| @@ -586,38 +586,6 @@ void Assembler::nop(int type) {
|
| }
|
| }
|
|
|
| -// RR format: <insn> R1,R2
|
| -// +--------+----+----+
|
| -// | OpCode | R1 | R2 |
|
| -// +--------+----+----+
|
| -// 0 8 12 15
|
| -#define RR_FORM_EMIT(name, op) \
|
| - void Assembler::name(Register r1, Register r2) { rr_form(op, r1, r2); }
|
| -
|
| -void Assembler::rr_form(Opcode op, Register r1, Register r2) {
|
| - DCHECK(is_uint8(op));
|
| - emit2bytes(op * B8 | r1.code() * B4 | r2.code());
|
| -}
|
| -
|
| -void Assembler::rr_form(Opcode op, DoubleRegister r1, DoubleRegister r2) {
|
| - DCHECK(is_uint8(op));
|
| - emit2bytes(op * B8 | r1.code() * B4 | r2.code());
|
| -}
|
| -
|
| -// RR2 format: <insn> M1,R2
|
| -// +--------+----+----+
|
| -// | OpCode | M1 | R2 |
|
| -// +--------+----+----+
|
| -// 0 8 12 15
|
| -#define RR2_FORM_EMIT(name, op) \
|
| - void Assembler::name(Condition m1, Register r2) { rr_form(op, m1, r2); }
|
| -
|
| -void Assembler::rr_form(Opcode op, Condition m1, Register r2) {
|
| - DCHECK(is_uint8(op));
|
| - DCHECK(is_uint4(m1));
|
| - emit2bytes(op * B8 | m1 * B4 | r2.code());
|
| -}
|
| -
|
| // RX format: <insn> R1,D2(X2,B2)
|
| // +--------+----+----+----+-------------+
|
| // | OpCode | R1 | X2 | B2 | D2 |
|
| @@ -722,75 +690,6 @@ void Assembler::rie_form(Opcode op, Register r1, Register r3,
|
| emit6bytes(code);
|
| }
|
|
|
| -// RIL1 format: <insn> R1,I2
|
| -// +--------+----+----+------------------------------------+
|
| -// | OpCode | R1 |OpCd| I2 |
|
| -// +--------+----+----+------------------------------------+
|
| -// 0 8 12 16 47
|
| -#define RIL1_FORM_EMIT(name, op) \
|
| - void Assembler::name(Register r, const Operand& i2) { ril_form(op, r, i2); }
|
| -
|
| -void Assembler::ril_form(Opcode op, Register r1, const Operand& i2) {
|
| - DCHECK(is_uint12(op));
|
| - uint64_t code = (static_cast<uint64_t>(op & 0xFF0)) * B36 |
|
| - (static_cast<uint64_t>(r1.code())) * B36 |
|
| - (static_cast<uint64_t>(op & 0x00F)) * B32 |
|
| - (static_cast<uint64_t>(i2.imm_) & 0xFFFFFFFF);
|
| - emit6bytes(code);
|
| -}
|
| -
|
| -// RIL2 format: <insn> M1,I2
|
| -// +--------+----+----+------------------------------------+
|
| -// | OpCode | M1 |OpCd| I2 |
|
| -// +--------+----+----+------------------------------------+
|
| -// 0 8 12 16 47
|
| -#define RIL2_FORM_EMIT(name, op) \
|
| - void Assembler::name(Condition m1, const Operand& i2) { \
|
| - ril_form(op, m1, i2); \
|
| - }
|
| -
|
| -void Assembler::ril_form(Opcode op, Condition m1, const Operand& i2) {
|
| - DCHECK(is_uint12(op));
|
| - DCHECK(is_uint4(m1));
|
| - uint64_t code = (static_cast<uint64_t>(op & 0xFF0)) * B36 |
|
| - (static_cast<uint64_t>(m1)) * B36 |
|
| - (static_cast<uint64_t>(op & 0x00F)) * B32 |
|
| - (static_cast<uint64_t>(i2.imm_ & 0xFFFFFFFF));
|
| - emit6bytes(code);
|
| -}
|
| -
|
| -// RRE format: <insn> R1,R2
|
| -// +------------------+--------+----+----+
|
| -// | OpCode |////////| R1 | R2 |
|
| -// +------------------+--------+----+----+
|
| -// 0 16 24 28 31
|
| -#define RRE_FORM_EMIT(name, op) \
|
| - void Assembler::name(Register r1, Register r2) { rre_form(op, r1, r2); }
|
| -
|
| -void Assembler::rre_form(Opcode op, Register r1, Register r2) {
|
| - DCHECK(is_uint16(op));
|
| - emit4bytes(op << 16 | r1.code() * B4 | r2.code());
|
| -}
|
| -
|
| -void Assembler::rre_form(Opcode op, DoubleRegister r1, DoubleRegister r2) {
|
| - DCHECK(is_uint16(op));
|
| - emit4bytes(op << 16 | r1.code() * B4 | r2.code());
|
| -}
|
| -
|
| -// RRD format: <insn> R1,R3, R2
|
| -// +------------------+----+----+----+----+
|
| -// | OpCode | R1 |////| R3 | R2 |
|
| -// +------------------+----+----+----+----+
|
| -// 0 16 20 24 28 31
|
| -#define RRD_FORM_EMIT(name, op) \
|
| - void Assembler::name(Register r1, Register r3, Register r2) { \
|
| - rrd_form(op, r1, r3, r2); \
|
| - }
|
| -
|
| -void Assembler::rrd_form(Opcode op, Register r1, Register r3, Register r2) {
|
| - emit4bytes(op << 16 | r1.code() * B12 | r3.code() * B4 | r2.code());
|
| -}
|
| -
|
| // RS1 format: <insn> R1,R3,D2(B2)
|
| // +--------+----+----+----+-------------+
|
| // | OpCode | R1 | R3 | B2 | D2 |
|
| @@ -1424,46 +1323,27 @@ void Assembler::rrfe_form(Opcode op, Condition m3, Condition m4, Register r1,
|
|
|
| // start of S390 instruction
|
| RX_FORM_EMIT(bc, BC)
|
| -RR_FORM_EMIT(bctr, BCTR)
|
| RXE_FORM_EMIT(ceb, CEB)
|
| SS1_FORM_EMIT(ed, ED)
|
| RX_FORM_EMIT(ex, EX)
|
| -RRE_FORM_EMIT(flogr, FLOGR)
|
| -RRE_FORM_EMIT(lcgr, LCGR)
|
| -RR_FORM_EMIT(lcr, LCR)
|
| RX_FORM_EMIT(le_z, LE)
|
| RXY_FORM_EMIT(ley, LEY)
|
| -RIL1_FORM_EMIT(llihf, LLIHF)
|
| -RIL1_FORM_EMIT(llilf, LLILF)
|
| -RRE_FORM_EMIT(lngr, LNGR)
|
| -RR_FORM_EMIT(lnr, LNR)
|
| -RRE_FORM_EMIT(lrvr, LRVR)
|
| -RRE_FORM_EMIT(lrvgr, LRVGR)
|
| RXY_FORM_EMIT(lrv, LRV)
|
| RXY_FORM_EMIT(lrvg, LRVG)
|
| RXY_FORM_EMIT(lrvh, LRVH)
|
| SS1_FORM_EMIT(mvn, MVN)
|
| SS1_FORM_EMIT(nc, NC)
|
| SI_FORM_EMIT(ni, NI)
|
| -RIL1_FORM_EMIT(nihf, NIHF)
|
| -RIL1_FORM_EMIT(nilf, NILF)
|
| RI1_FORM_EMIT(nilh, NILH)
|
| RI1_FORM_EMIT(nill, NILL)
|
| -RIL1_FORM_EMIT(oihf, OIHF)
|
| -RIL1_FORM_EMIT(oilf, OILF)
|
| RI1_FORM_EMIT(oill, OILL)
|
| -RRE_FORM_EMIT(popcnt, POPCNT_Z)
|
| -RIL1_FORM_EMIT(slfi, SLFI)
|
| RXY_FORM_EMIT(slgf, SLGF)
|
| -RIL1_FORM_EMIT(slgfi, SLGFI)
|
| RXY_FORM_EMIT(strvh, STRVH)
|
| RXY_FORM_EMIT(strv, STRV)
|
| RXY_FORM_EMIT(strvg, STRVG)
|
| RI1_FORM_EMIT(tmll, TMLL)
|
| SS1_FORM_EMIT(tr, TR)
|
| S_FORM_EMIT(ts, TS)
|
| -RIL1_FORM_EMIT(xihf, XIHF)
|
| -RIL1_FORM_EMIT(xilf, XILF)
|
|
|
| // -------------------------
|
| // Load Address Instructions
|
| @@ -1479,11 +1359,6 @@ void Assembler::lay(Register r1, const MemOperand& opnd) {
|
| }
|
|
|
| // Load Address Relative Long
|
| -void Assembler::larl(Register r1, const Operand& opnd) {
|
| - ril_form(LARL, r1, opnd);
|
| -}
|
| -
|
| -// Load Address Relative Long
|
| void Assembler::larl(Register r1, Label* l) {
|
| larl(r1, Operand(branch_offset(l)));
|
| }
|
| @@ -1496,17 +1371,11 @@ void Assembler::lb(Register r, const MemOperand& src) {
|
| rxy_form(LB, r, src.rx(), src.rb(), src.offset());
|
| }
|
|
|
| -// Load Byte Register-Register (32<-8)
|
| -void Assembler::lbr(Register r1, Register r2) { rre_form(LBR, r1, r2); }
|
| -
|
| // Load Byte Register-Storage (64<-8)
|
| void Assembler::lgb(Register r, const MemOperand& src) {
|
| rxy_form(LGB, r, src.rx(), src.rb(), src.offset());
|
| }
|
|
|
| -// Load Byte Register-Register (64<-8)
|
| -void Assembler::lgbr(Register r1, Register r2) { rre_form(LGBR, r1, r2); }
|
| -
|
| // Load Halfword Register-Storage (32<-16)
|
| void Assembler::lh(Register r, const MemOperand& src) {
|
| rx_form(LH, r, src.rx(), src.rb(), src.offset());
|
| @@ -1517,17 +1386,11 @@ void Assembler::lhy(Register r, const MemOperand& src) {
|
| rxy_form(LHY, r, src.rx(), src.rb(), src.offset());
|
| }
|
|
|
| -// Load Halfword Register-Register (32<-16)
|
| -void Assembler::lhr(Register r1, Register r2) { rre_form(LHR, r1, r2); }
|
| -
|
| // Load Halfword Register-Storage (64<-16)
|
| void Assembler::lgh(Register r, const MemOperand& src) {
|
| rxy_form(LGH, r, src.rx(), src.rb(), src.offset());
|
| }
|
|
|
| -// Load Halfword Register-Register (64<-16)
|
| -void Assembler::lghr(Register r1, Register r2) { rre_form(LGHR, r1, r2); }
|
| -
|
| // Load Register-Storage (32)
|
| void Assembler::l(Register r, const MemOperand& src) {
|
| rx_form(L, r, src.rx(), src.rb(), src.offset());
|
| @@ -1538,25 +1401,16 @@ void Assembler::ly(Register r, const MemOperand& src) {
|
| rxy_form(LY, r, src.rx(), src.rb(), src.offset());
|
| }
|
|
|
| -// Load Register-Register (32)
|
| -void Assembler::lr(Register r1, Register r2) { rr_form(LR, r1, r2); }
|
| -
|
| // Load Register-Storage (64)
|
| void Assembler::lg(Register r, const MemOperand& src) {
|
| rxy_form(LG, r, src.rx(), src.rb(), src.offset());
|
| }
|
|
|
| -// Load Register-Register (64)
|
| -void Assembler::lgr(Register r1, Register r2) { rre_form(LGR, r1, r2); }
|
| -
|
| // Load Register-Storage (64<-32)
|
| void Assembler::lgf(Register r, const MemOperand& src) {
|
| rxy_form(LGF, r, src.rx(), src.rb(), src.offset());
|
| }
|
|
|
| -// Load Sign Extended Register-Register (64<-32)
|
| -void Assembler::lgfr(Register r1, Register r2) { rre_form(LGFR, r1, r2); }
|
| -
|
| // Load Halfword Immediate (32)
|
| void Assembler::lhi(Register r, const Operand& imm) { ri_form(LHI, r, imm); }
|
|
|
| @@ -1576,15 +1430,6 @@ void Assembler::ltg(Register r1, const MemOperand& opnd) {
|
| rxy_form(LTG, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Load and Test Register-Register (32)
|
| -void Assembler::ltr(Register r1, Register r2) { rr_form(LTR, r1, r2); }
|
| -
|
| -// Load and Test Register-Register (64)
|
| -void Assembler::ltgr(Register r1, Register r2) { rre_form(LTGR, r1, r2); }
|
| -
|
| -// Load and Test Register-Register (64<-32)
|
| -void Assembler::ltgfr(Register r1, Register r2) { rre_form(LTGFR, r1, r2); }
|
| -
|
| // -------------------------
|
| // Load Logical Instructions
|
| // -------------------------
|
| @@ -1603,9 +1448,6 @@ void Assembler::llgf(Register r1, const MemOperand& opnd) {
|
| rxy_form(LLGF, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Load Logical Register-Register (64<-32)
|
| -void Assembler::llgfr(Register r1, Register r2) { rre_form(LLGFR, r1, r2); }
|
| -
|
| // Load Logical halfword Register-Storage (32)
|
| void Assembler::llh(Register r1, const MemOperand& opnd) {
|
| rxy_form(LLH, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| @@ -1616,12 +1458,6 @@ void Assembler::llgh(Register r1, const MemOperand& opnd) {
|
| rxy_form(LLGH, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Load Logical halfword Register-Register (32)
|
| -void Assembler::llhr(Register r1, Register r2) { rre_form(LLHR, r1, r2); }
|
| -
|
| -// Load Logical halfword Register-Register (64)
|
| -void Assembler::llghr(Register r1, Register r2) { rre_form(LLGHR, r1, r2); }
|
| -
|
| // Load On Condition R-R (32)
|
| void Assembler::locr(Condition m3, Register r1, Register r2) {
|
| rrf2_form(LOCR << 16 | m3 * B12 | r1.code() * B4 | r2.code());
|
| @@ -1645,11 +1481,6 @@ void Assembler::locg(Condition m3, Register r1, const MemOperand& src) {
|
| // -------------------
|
| // Branch Instructions
|
| // -------------------
|
| -// Branch and Save
|
| -void Assembler::basr(Register r1, Register r2) { rr_form(BASR, r1, r2); }
|
| -
|
| -// Indirect Conditional Branch via register
|
| -void Assembler::bcr(Condition m, Register target) { rr_form(BCR, m, target); }
|
|
|
| // Branch on Count (32)
|
| void Assembler::bct(Register r, const MemOperand& opnd) {
|
| @@ -1666,31 +1497,8 @@ void Assembler::bras(Register r, const Operand& opnd) {
|
| ri_form(BRAS, r, opnd);
|
| }
|
|
|
| -// Branch Relative and Save (64)
|
| -void Assembler::brasl(Register r, const Operand& opnd) {
|
| - ril_form(BRASL, r, opnd);
|
| -}
|
| -
|
| // Branch relative on Condition (32)
|
| -void Assembler::brc(Condition c, const Operand& opnd) {
|
| - // BRC actually encodes # of halfwords, so divide by 2.
|
| - int16_t numHalfwords = static_cast<int16_t>(opnd.immediate()) / 2;
|
| - Operand halfwordOp = Operand(numHalfwords);
|
| - halfwordOp.setBits(16);
|
| - ri_form(BRC, c, halfwordOp);
|
| -}
|
| -
|
| -// Branch Relative on Condition (64)
|
| -void Assembler::brcl(Condition c, const Operand& opnd, bool isCodeTarget) {
|
| - Operand halfwordOp = opnd;
|
| - // Operand for code targets will be index to code_targets_
|
| - if (!isCodeTarget) {
|
| - // BRCL actually encodes # of halfwords, so divide by 2.
|
| - int32_t numHalfwords = static_cast<int32_t>(opnd.immediate()) / 2;
|
| - halfwordOp = Operand(numHalfwords);
|
| - }
|
| - ril_form(BRCL, c, halfwordOp);
|
| -}
|
| +void Assembler::brc(Condition c, const Operand& opnd) { ri_form(BRC, c, opnd); }
|
|
|
| // Branch On Count (32)
|
| void Assembler::brct(Register r1, const Operand& imm) {
|
| @@ -1723,17 +1531,11 @@ void Assembler::cy(Register r, const MemOperand& opnd) {
|
| rxy_form(CY, r, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Compare Register-Register (32)
|
| -void Assembler::cr_z(Register r1, Register r2) { rr_form(CR, r1, r2); }
|
| -
|
| // Compare Register-Storage (64)
|
| void Assembler::cg(Register r, const MemOperand& opnd) {
|
| rxy_form(CG, r, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Compare Register-Register (64)
|
| -void Assembler::cgr(Register r1, Register r2) { rre_form(CGR, r1, r2); }
|
| -
|
| // Compare Halfword Register-Storage (32)
|
| void Assembler::ch(Register r, const MemOperand& opnd) {
|
| rx_form(CH, r, opnd.rx(), opnd.rb(), opnd.offset());
|
| @@ -1752,14 +1554,6 @@ void Assembler::cghi(Register r, const Operand& opnd) {
|
| ri_form(CGHI, r, opnd);
|
| }
|
|
|
| -// Compare Immediate (32)
|
| -void Assembler::cfi(Register r, const Operand& opnd) { ril_form(CFI, r, opnd); }
|
| -
|
| -// Compare Immediate (64)
|
| -void Assembler::cgfi(Register r, const Operand& opnd) {
|
| - ril_form(CGFI, r, opnd);
|
| -}
|
| -
|
| // ----------------------------
|
| // Compare Logical Instructions
|
| // ----------------------------
|
| @@ -1773,25 +1567,11 @@ void Assembler::cly(Register r, const MemOperand& opnd) {
|
| rxy_form(CLY, r, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Compare Logical Register-Register (32)
|
| -void Assembler::clr(Register r1, Register r2) { rr_form(CLR, r1, r2); }
|
| -
|
| // Compare Logical Register-Storage (64)
|
| void Assembler::clg(Register r, const MemOperand& opnd) {
|
| rxy_form(CLG, r, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Compare Logical Register-Register (64)
|
| -void Assembler::clgr(Register r1, Register r2) { rre_form(CLGR, r1, r2); }
|
| -
|
| -// Compare Logical Immediate (32)
|
| -void Assembler::clfi(Register r1, const Operand& i2) { ril_form(CLFI, r1, i2); }
|
| -
|
| -// Compare Logical Immediate (64<32)
|
| -void Assembler::clgfi(Register r1, const Operand& i2) {
|
| - ril_form(CLGFI, r1, i2);
|
| -}
|
| -
|
| // Compare Immediate (Mem - Imm) (8)
|
| void Assembler::cli(const MemOperand& opnd, const Operand& imm) {
|
| si_form(CLI, imm, opnd.rb(), opnd.offset());
|
| @@ -1872,11 +1652,6 @@ void Assembler::ay(Register r1, const MemOperand& opnd) {
|
| rxy_form(AY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Add Immediate (32)
|
| -void Assembler::afi(Register r1, const Operand& opnd) {
|
| - ril_form(AFI, r1, opnd);
|
| -}
|
| -
|
| // Add Halfword Register-Storage (32)
|
| void Assembler::ah(Register r1, const MemOperand& opnd) {
|
| rx_form(AH, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| @@ -1895,9 +1670,6 @@ void Assembler::ahik(Register r1, Register r3, const Operand& i2) {
|
| rie_form(AHIK, r1, r3, i2);
|
| }
|
|
|
| -// Add Register (32)
|
| -void Assembler::ar(Register r1, Register r2) { rr_form(AR, r1, r2); }
|
| -
|
| // Add Register-Register-Register (32)
|
| void Assembler::ark(Register r1, Register r2, Register r3) {
|
| rrf1_form(ARK, r1, r2, r3);
|
| @@ -1923,14 +1695,6 @@ void Assembler::agf(Register r1, const MemOperand& opnd) {
|
| rxy_form(AGF, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Add Immediate (64)
|
| -void Assembler::agfi(Register r1, const Operand& opnd) {
|
| - ril_form(AGFI, r1, opnd);
|
| -}
|
| -
|
| -// Add Register-Register (64<-32)
|
| -void Assembler::agfr(Register r1, Register r2) { rre_form(AGFR, r1, r2); }
|
| -
|
| // Add Halfword Immediate (64)
|
| void Assembler::aghi(Register r1, const Operand& i2) { ri_form(AGHI, r1, i2); }
|
|
|
| @@ -1939,9 +1703,6 @@ void Assembler::aghik(Register r1, Register r3, const Operand& i2) {
|
| rie_form(AGHIK, r1, r3, i2);
|
| }
|
|
|
| -// Add Register (64)
|
| -void Assembler::agr(Register r1, Register r2) { rre_form(AGR, r1, r2); }
|
| -
|
| // Add Register-Register-Register (64)
|
| void Assembler::agrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(AGRK, r1, r2, r3);
|
| @@ -1967,17 +1728,6 @@ void Assembler::aly(Register r1, const MemOperand& opnd) {
|
| rxy_form(ALY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Add Logical Immediate (32)
|
| -void Assembler::alfi(Register r1, const Operand& opnd) {
|
| - ril_form(ALFI, r1, opnd);
|
| -}
|
| -
|
| -// Add Logical Register-Register (32)
|
| -void Assembler::alr(Register r1, Register r2) { rr_form(ALR, r1, r2); }
|
| -
|
| -// Add Logical With Carry Register-Register (32)
|
| -void Assembler::alcr(Register r1, Register r2) { rre_form(ALCR, r1, r2); }
|
| -
|
| // Add Logical Register-Register-Register (32)
|
| void Assembler::alrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(ALRK, r1, r2, r3);
|
| @@ -1991,14 +1741,6 @@ void Assembler::alg(Register r1, const MemOperand& opnd) {
|
| rxy_form(ALG, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Add Logical Immediate (64)
|
| -void Assembler::algfi(Register r1, const Operand& opnd) {
|
| - ril_form(ALGFI, r1, opnd);
|
| -}
|
| -
|
| -// Add Logical Register-Register (64)
|
| -void Assembler::algr(Register r1, Register r2) { rre_form(ALGR, r1, r2); }
|
| -
|
| // Add Logical Register-Register-Register (64)
|
| void Assembler::algrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(ALGRK, r1, r2, r3);
|
| @@ -2027,9 +1769,6 @@ void Assembler::shy(Register r1, const MemOperand& opnd) {
|
| rxy_form(SHY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Subtract Register (32)
|
| -void Assembler::sr(Register r1, Register r2) { rr_form(SR, r1, r2); }
|
| -
|
| // Subtract Register-Register-Register (32)
|
| void Assembler::srk(Register r1, Register r2, Register r3) {
|
| rrf1_form(SRK, r1, r2, r3);
|
| @@ -2048,12 +1787,6 @@ void Assembler::sgf(Register r1, const MemOperand& opnd) {
|
| rxy_form(SGF, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Subtract Register (64)
|
| -void Assembler::sgr(Register r1, Register r2) { rre_form(SGR, r1, r2); }
|
| -
|
| -// Subtract Register (64<-32)
|
| -void Assembler::sgfr(Register r1, Register r2) { rre_form(SGFR, r1, r2); }
|
| -
|
| // Subtract Register-Register-Register (64)
|
| void Assembler::sgrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(SGRK, r1, r2, r3);
|
| @@ -2072,12 +1805,6 @@ void Assembler::sly(Register r1, const MemOperand& opnd) {
|
| rxy_form(SLY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Subtract Logical Register-Register (32)
|
| -void Assembler::slr(Register r1, Register r2) { rr_form(SLR, r1, r2); }
|
| -
|
| -// Subtract Logical With Borrow Register-Register (32)
|
| -void Assembler::slbr(Register r1, Register r2) { rre_form(SLBR, r1, r2); }
|
| -
|
| // Subtract Logical Register-Register-Register (32)
|
| void Assembler::slrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(SLRK, r1, r2, r3);
|
| @@ -2091,9 +1818,6 @@ void Assembler::slg(Register r1, const MemOperand& opnd) {
|
| rxy_form(SLG, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Subtract Logical Register-Register (64)
|
| -void Assembler::slgr(Register r1, Register r2) { rre_form(SLGR, r1, r2); }
|
| -
|
| // Subtract Logical Register-Register-Register (64)
|
| void Assembler::slgrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(SLGRK, r1, r2, r3);
|
| @@ -2113,23 +1837,11 @@ void Assembler::mfy(Register r1, const MemOperand& opnd) {
|
| rxy_form(MFY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Multiply Register (64<32)
|
| -void Assembler::mr_z(Register r1, Register r2) {
|
| - DCHECK(r1.code() % 2 == 0);
|
| - rr_form(MR, r1, r2);
|
| -}
|
| -
|
| // Multiply Logical Register-Storage (64<32)
|
| void Assembler::ml(Register r1, const MemOperand& opnd) {
|
| rxy_form(ML, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Multiply Logical Register (64<32)
|
| -void Assembler::mlr(Register r1, Register r2) {
|
| - DCHECK(r1.code() % 2 == 0);
|
| - rre_form(MLR, r1, r2);
|
| -}
|
| -
|
| // Multiply Single Register-Storage (32)
|
| void Assembler::ms(Register r1, const MemOperand& opnd) {
|
| rx_form(MS, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| @@ -2140,14 +1852,6 @@ void Assembler::msy(Register r1, const MemOperand& opnd) {
|
| rxy_form(MSY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Multiply Single Immediate (32)
|
| -void Assembler::msfi(Register r1, const Operand& opnd) {
|
| - ril_form(MSFI, r1, opnd);
|
| -}
|
| -
|
| -// Multiply Single Register (64<32)
|
| -void Assembler::msr(Register r1, Register r2) { rre_form(MSR, r1, r2); }
|
| -
|
| // Multiply Halfword Register-Storage (32)
|
| void Assembler::mh(Register r1, const MemOperand& opnd) {
|
| rx_form(MH, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| @@ -2171,27 +1875,16 @@ void Assembler::mlg(Register r1, const MemOperand& opnd) {
|
| rxy_form(MLG, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Multiply Register (128<64)
|
| -void Assembler::mlgr(Register r1, Register r2) { rre_form(MLGR, r1, r2); }
|
| -
|
| // Multiply Halfword Immediate (64)
|
| void Assembler::mghi(Register r1, const Operand& opnd) {
|
| ri_form(MGHI, r1, opnd);
|
| }
|
|
|
| -// Multiply Single Immediate (64)
|
| -void Assembler::msgfi(Register r1, const Operand& opnd) {
|
| - ril_form(MSGFI, r1, opnd);
|
| -}
|
| -
|
| // Multiply Single Register-Storage (64)
|
| void Assembler::msg(Register r1, const MemOperand& opnd) {
|
| rxy_form(MSG, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Multiply Single Register-Register (64)
|
| -void Assembler::msgr(Register r1, Register r2) { rre_form(MSGR, r1, r2); }
|
| -
|
| // --------------------------
|
| // 32-bit Divide Instructions
|
| // --------------------------
|
| @@ -2200,29 +1893,11 @@ void Assembler::d(Register r1, const MemOperand& opnd) {
|
| rx_form(D, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Divide Register (32<-64)
|
| -void Assembler::dr(Register r1, Register r2) {
|
| - DCHECK(r1.code() % 2 == 0);
|
| - rr_form(DR, r1, r2);
|
| -}
|
| -
|
| // Divide Logical Register-Storage (32<-64)
|
| void Assembler::dl(Register r1, const MemOperand& opnd) {
|
| rx_form(DL, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Divide Logical Register (32<-64)
|
| -void Assembler::dlr(Register r1, Register r2) { rre_form(DLR, r1, r2); }
|
| -
|
| -// --------------------------
|
| -// 64-bit Divide Instructions
|
| -// --------------------------
|
| -// Divide Logical Register (64<-128)
|
| -void Assembler::dlgr(Register r1, Register r2) { rre_form(DLGR, r1, r2); }
|
| -
|
| -// Divide Single Register (64<-32)
|
| -void Assembler::dsgr(Register r1, Register r2) { rre_form(DSGR, r1, r2); }
|
| -
|
| // --------------------
|
| // Bitwise Instructions
|
| // --------------------
|
| @@ -2236,9 +1911,6 @@ void Assembler::ny(Register r1, const MemOperand& opnd) {
|
| rxy_form(NY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// AND Register (32)
|
| -void Assembler::nr(Register r1, Register r2) { rr_form(NR, r1, r2); }
|
| -
|
| // AND Register-Register-Register (32)
|
| void Assembler::nrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(NRK, r1, r2, r3);
|
| @@ -2249,9 +1921,6 @@ void Assembler::ng(Register r1, const MemOperand& opnd) {
|
| rxy_form(NG, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// AND Register (64)
|
| -void Assembler::ngr(Register r1, Register r2) { rre_form(NGR, r1, r2); }
|
| -
|
| // AND Register-Register-Register (64)
|
| void Assembler::ngrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(NGRK, r1, r2, r3);
|
| @@ -2267,9 +1936,6 @@ void Assembler::oy(Register r1, const MemOperand& opnd) {
|
| rxy_form(OY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// OR Register (32)
|
| -void Assembler::or_z(Register r1, Register r2) { rr_form(OR, r1, r2); }
|
| -
|
| // OR Register-Register-Register (32)
|
| void Assembler::ork(Register r1, Register r2, Register r3) {
|
| rrf1_form(ORK, r1, r2, r3);
|
| @@ -2280,9 +1946,6 @@ void Assembler::og(Register r1, const MemOperand& opnd) {
|
| rxy_form(OG, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// OR Register (64)
|
| -void Assembler::ogr(Register r1, Register r2) { rre_form(OGR, r1, r2); }
|
| -
|
| // OR Register-Register-Register (64)
|
| void Assembler::ogrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(OGRK, r1, r2, r3);
|
| @@ -2298,9 +1961,6 @@ void Assembler::xy(Register r1, const MemOperand& opnd) {
|
| rxy_form(XY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// XOR Register (32)
|
| -void Assembler::xr(Register r1, Register r2) { rr_form(XR, r1, r2); }
|
| -
|
| // XOR Register-Register-Register (32)
|
| void Assembler::xrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(XRK, r1, r2, r3);
|
| @@ -2311,9 +1971,6 @@ void Assembler::xg(Register r1, const MemOperand& opnd) {
|
| rxy_form(XG, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// XOR Register (64)
|
| -void Assembler::xgr(Register r1, Register r2) { rre_form(XGR, r1, r2); }
|
| -
|
| // XOR Register-Register-Register (64)
|
| void Assembler::xgrk(Register r1, Register r2, Register r3) {
|
| rrf1_form(XGRK, r1, r2, r3);
|
| @@ -2326,19 +1983,6 @@ void Assembler::xc(const MemOperand& opnd1, const MemOperand& opnd2,
|
| opnd2.getBaseRegister(), opnd2.getDisplacement());
|
| }
|
|
|
| -// -------------------------------------------
|
| -// Bitwise GPR <-> FPR Conversion Instructions
|
| -// -------------------------------------------
|
| -// Load GR from FPR (64 <- L)
|
| -void Assembler::lgdr(Register r1, DoubleRegister f2) {
|
| - rre_form(LGDR, r1, Register::from_code(f2.code()));
|
| -}
|
| -
|
| -// Load FPR from FR (L <- 64)
|
| -void Assembler::ldgr(DoubleRegister f1, Register r2) {
|
| - rre_form(LDGR, Register::from_code(f1.code()), r2);
|
| -}
|
| -
|
| void Assembler::EnsureSpaceFor(int space_needed) {
|
| if (buffer_space() <= (kGap + space_needed)) {
|
| GrowBuffer(space_needed);
|
| @@ -2553,7 +2197,7 @@ void Assembler::jump(Handle<Code> target, RelocInfo::Mode rmode,
|
| EnsureSpace ensure_space(this);
|
|
|
| int32_t target_index = emit_code_target(target, rmode);
|
| - brcl(cond, Operand(target_index), true);
|
| + brcl(cond, Operand(target_index));
|
| }
|
|
|
| // Store (32)
|
| @@ -2627,16 +2271,6 @@ void Assembler::icy(Register r1, const MemOperand& opnd) {
|
| rxy_form(ICY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Insert Immediate (High)
|
| -void Assembler::iihf(Register r1, const Operand& opnd) {
|
| - ril_form(IIHF, r1, opnd);
|
| -}
|
| -
|
| -// Insert Immediate (low)
|
| -void Assembler::iilf(Register r1, const Operand& opnd) {
|
| - ril_form(IILF, r1, opnd);
|
| -}
|
| -
|
| // Insert Immediate (high high)
|
| void Assembler::iihh(Register r1, const Operand& opnd) {
|
| ri_form(IIHH, r1, opnd);
|
| @@ -2657,164 +2291,46 @@ void Assembler::iill(Register r1, const Operand& opnd) {
|
| ri_form(IILL, r1, opnd);
|
| }
|
|
|
| -// Load Immediate 32->64
|
| -void Assembler::lgfi(Register r1, const Operand& opnd) {
|
| - ril_form(LGFI, r1, opnd);
|
| -}
|
| -
|
| // GPR <-> FPR Instructions
|
|
|
| // Floating point instructions
|
| //
|
| -// Load zero Register (64)
|
| -void Assembler::lzdr(DoubleRegister r1) {
|
| - rre_form(LZDR, Register::from_code(r1.code()), Register::from_code(0));
|
| -}
|
| -
|
| -// Add Register-Register (LB)
|
| -void Assembler::aebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(AEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| // Add Register-Storage (LB)
|
| void Assembler::adb(DoubleRegister r1, const MemOperand& opnd) {
|
| rxe_form(ADB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(),
|
| opnd.offset());
|
| }
|
|
|
| -// Add Register-Register (LB)
|
| -void Assembler::adbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(ADBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Compare Register-Register (LB)
|
| -void Assembler::cebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(CEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| // Compare Register-Storage (LB)
|
| void Assembler::cdb(DoubleRegister r1, const MemOperand& opnd) {
|
| rx_form(CD, Register::from_code(r1.code()), opnd.rx(), opnd.rb(),
|
| opnd.offset());
|
| }
|
|
|
| -// Compare Register-Register (LB)
|
| -void Assembler::cdbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(CDBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Divide Register-Register (LB)
|
| -void Assembler::debr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(DEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| // Divide Register-Storage (LB)
|
| void Assembler::ddb(DoubleRegister r1, const MemOperand& opnd) {
|
| rxe_form(DDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(),
|
| opnd.offset());
|
| }
|
|
|
| -// Divide Register-Register (LB)
|
| -void Assembler::ddbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(DDBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Multiply Register-Register (LB)
|
| -void Assembler::meebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(MEEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| // Multiply Register-Storage (LB)
|
| void Assembler::mdb(DoubleRegister r1, const MemOperand& opnd) {
|
| rxe_form(MDB, Register::from_code(r1.code()), opnd.rb(), opnd.rx(),
|
| opnd.offset());
|
| }
|
|
|
| -// Multiply Register-Register (LB)
|
| -void Assembler::mdbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(MDBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Subtract Register-Register (LB)
|
| -void Assembler::sebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(SEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| // Subtract Register-Storage (LB)
|
| void Assembler::sdb(DoubleRegister r1, const MemOperand& opnd) {
|
| rxe_form(SDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(),
|
| opnd.offset());
|
| }
|
|
|
| -// Subtract Register-Register (LB)
|
| -void Assembler::sdbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(SDBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| // Square Root (LB)
|
| void Assembler::sqdb(DoubleRegister r1, const MemOperand& opnd) {
|
| rxe_form(SQDB, Register::from_code(r1.code()), opnd.rx(), opnd.rb(),
|
| opnd.offset());
|
| }
|
|
|
| -// Square Root Register-Register (LB)
|
| -void Assembler::sqebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(SQEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Square Root Register-Register (LB)
|
| -void Assembler::sqdbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(SQDBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Load Rounded (double -> float)
|
| -void Assembler::ledbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(LEDBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Load Lengthen (float -> double)
|
| -void Assembler::ldebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(LDEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Load Complement Register-Register (LB)
|
| -void Assembler::lcdbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(LCDBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Load Complement Register-Register (LB)
|
| -void Assembler::lcebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(LCEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Load Positive Register-Register (LB)
|
| -void Assembler::lpebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(LPEBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| -// Load Positive Register-Register (LB)
|
| -void Assembler::lpdbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(LPDBR, Register::from_code(r1.code()),
|
| - Register::from_code(r2.code()));
|
| -}
|
| -
|
| // Store Double (64)
|
| void Assembler::std(DoubleRegister r1, const MemOperand& opnd) {
|
| rx_form(STD, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| @@ -2861,21 +2377,6 @@ void Assembler::ley(DoubleRegister r1, const MemOperand& opnd) {
|
| rxy_form(LEY, r1, opnd.rx(), opnd.rb(), opnd.offset());
|
| }
|
|
|
| -// Load Double Register-Register (64)
|
| -void Assembler::ldr(DoubleRegister r1, DoubleRegister r2) {
|
| - rr_form(LDR, r1, r2);
|
| -}
|
| -
|
| -// Load And Test Register-Register (L)
|
| -void Assembler::ltebr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(LTEBR, r1, r2);
|
| -}
|
| -
|
| -// Load And Test Register-Register (L)
|
| -void Assembler::ltdbr(DoubleRegister r1, DoubleRegister r2) {
|
| - rre_form(LTDBR, r1, r2);
|
| -}
|
| -
|
| // Convert to Fixed point (64<-S)
|
| void Assembler::cgebr(Condition m, Register r1, DoubleRegister r2) {
|
| rrfe_form(CGEBR, m, Condition(0), r1, Register::from_code(r2.code()));
|
| @@ -2891,21 +2392,6 @@ void Assembler::cfdbr(Condition m, Register r1, DoubleRegister r2) {
|
| rrfe_form(CFDBR, m, Condition(0), r1, Register::from_code(r2.code()));
|
| }
|
|
|
| -// Convert from Fixed point (L<-64)
|
| -void Assembler::cegbr(DoubleRegister r1, Register r2) {
|
| - rre_form(CEGBR, Register::from_code(r1.code()), r2);
|
| -}
|
| -
|
| -// Convert from Fixed point (L<-64)
|
| -void Assembler::cdgbr(DoubleRegister r1, Register r2) {
|
| - rre_form(CDGBR, Register::from_code(r1.code()), r2);
|
| -}
|
| -
|
| -// Convert from Fixed point (L<-32)
|
| -void Assembler::cdfbr(DoubleRegister r1, Register r2) {
|
| - rre_form(CDFBR, Register::from_code(r1.code()), r2);
|
| -}
|
| -
|
| // Convert to Fixed Logical (64<-L)
|
| void Assembler::clgdbr(Condition m3, Condition m4, Register r1,
|
| DoubleRegister r2) {
|
| @@ -2994,20 +2480,6 @@ void Assembler::fidbra(DoubleRegister d1, DoubleRegister d2, FIDBRA_MASK3 m3) {
|
| rrf2_form(FIDBRA << 16 | m3 * B12 | d1.code() * B4 | d2.code());
|
| }
|
|
|
| -// Multiply and Add - MADBR R1, R3, R2
|
| -// R1 = R3 * R2 + R1
|
| -void Assembler::madbr(DoubleRegister d1, DoubleRegister d3, DoubleRegister d2) {
|
| - rrd_form(MADBR, Register::from_code(d1.code()),
|
| - Register::from_code(d3.code()), Register::from_code(d2.code()));
|
| -}
|
| -
|
| -// Multiply and Subtract - MSDBR R1, R3, R2
|
| -// R1 = R3 * R2 - R1
|
| -void Assembler::msdbr(DoubleRegister d1, DoubleRegister d3, DoubleRegister d2) {
|
| - rrd_form(MSDBR, Register::from_code(d1.code()),
|
| - Register::from_code(d3.code()), Register::from_code(d2.code()));
|
| -}
|
| -
|
| // end of S390instructions
|
|
|
| bool Assembler::IsNop(SixByteInstr instr, int type) {
|
|
|