| Index: src/ppc/assembler-ppc.h
|
| diff --git a/src/ppc/assembler-ppc.h b/src/ppc/assembler-ppc.h
|
| index dde441e8439decf9c521d05eeecbcbc0ed929af8..fad3989370f4ac7b63727c4b8680b469aa396498 100644
|
| --- a/src/ppc/assembler-ppc.h
|
| +++ b/src/ppc/assembler-ppc.h
|
| @@ -552,6 +552,106 @@ class Assembler : public AssemblerBase {
|
| return ((cr.code() * CRWIDTH) + crbit);
|
| }
|
|
|
| +#define DECLARE_PPC_X_INSTRUCTIONS_A_FORM(name, instr_name, instr_value) \
|
| + inline void name(const Register rt, const Register ra, \
|
| + const Register rb, const RCBit rc = LeaveRC) { \
|
| + x_form(instr_name, rt, ra, rb, rc); \
|
| + }
|
| +
|
| +#define DECLARE_PPC_X_INSTRUCTIONS_B_FORM(name, instr_name, instr_value) \
|
| + inline void name(const Register ra, const Register rs, \
|
| + const Register rb, const RCBit rc = LeaveRC) { \
|
| + x_form(instr_name, rs, ra, rb, rc); \
|
| + }
|
| +
|
| +#define DECLARE_PPC_X_INSTRUCTIONS_C_FORM(name, instr_name, instr_value) \
|
| + inline void name(const Register dst, const Register src, \
|
| + const RCBit rc = LeaveRC) { \
|
| + x_form(instr_name, src, dst, r0, rc); \
|
| + }
|
| +
|
| +#define DECLARE_PPC_X_INSTRUCTIONS_D_FORM(name, instr_name, instr_value) \
|
| + template <class R> \
|
| + inline void name(const R rt, const Register ra, \
|
| + const Register rb, const RCBit rc = LeaveRC) { \
|
| + DCHECK(!ra.is(r0)); \
|
| + x_form(instr_name, rt.code(), ra.code(), rb.code(), rc); \
|
| + } \
|
| + template <class R> \
|
| + inline void name(const R dst, const MemOperand& src) { \
|
| + name(dst, src.ra(), src.rb()); \
|
| + }
|
| +
|
| +#define DECLARE_PPC_X_INSTRUCTIONS_E_FORM(name, instr_name, instr_value) \
|
| + inline void name(const Register dst, const Register src, \
|
| + const int sh, const RCBit rc = LeaveRC) { \
|
| + x_form(instr_name, src.code(), dst.code(), sh, rc); \
|
| + }
|
| +
|
| +#define DECLARE_PPC_X_INSTRUCTIONS_F_FORM(name, instr_name, instr_value) \
|
| + inline void name(const Register src1, const Register src2, \
|
| + const CRegister cr = cr7, const RCBit rc = LeaveRC) { \
|
| + x_form(instr_name, cr, src1, src2, rc); \
|
| + } \
|
| + inline void name##w(const Register src1, const Register src2, \
|
| + const CRegister cr = cr7, const RCBit rc = LeaveRC) { \
|
| + x_form(instr_name, cr.code() * B2, src1.code(), src2.code(), LeaveRC); \
|
| + }
|
| +
|
| + inline void x_form(Instr instr, int f1, int f2, int f3, int rc) {
|
| + emit(instr | f1 * B21 | f2 * B16 | f3 * B11 | rc);
|
| + }
|
| + inline void x_form(Instr instr, Register rs, Register ra, Register rb,
|
| + RCBit rc) {
|
| + emit(instr | rs.code() * B21 | ra.code() * B16 | rb.code() * B11 | rc);
|
| + }
|
| + inline void x_form(Instr instr, CRegister cr, Register s1, Register s2,
|
| + RCBit rc) {
|
| +#if V8_TARGET_ARCH_PPC64
|
| + int L = 1;
|
| +#else
|
| + int L = 0;
|
| +#endif
|
| + emit(instr | cr.code() * B23 | L * B21 | s1.code() * B16 |
|
| + s2.code() * B11 | rc);
|
| + }
|
| +
|
| + PPC_X_OPCODE_A_FORM_LIST(DECLARE_PPC_X_INSTRUCTIONS_A_FORM)
|
| + PPC_X_OPCODE_B_FORM_LIST(DECLARE_PPC_X_INSTRUCTIONS_B_FORM)
|
| + PPC_X_OPCODE_C_FORM_LIST(DECLARE_PPC_X_INSTRUCTIONS_C_FORM)
|
| + PPC_X_OPCODE_D_FORM_LIST(DECLARE_PPC_X_INSTRUCTIONS_D_FORM)
|
| + PPC_X_OPCODE_E_FORM_LIST(DECLARE_PPC_X_INSTRUCTIONS_E_FORM)
|
| + PPC_X_OPCODE_F_FORM_LIST(DECLARE_PPC_X_INSTRUCTIONS_F_FORM)
|
| +
|
| + inline void notx(Register dst, Register src, RCBit rc = LeaveRC) {
|
| + nor(dst, src, src, rc);
|
| + }
|
| + inline void lwax(Register rt, const MemOperand& src) {
|
| +#if V8_TARGET_ARCH_PPC64
|
| + Register ra = src.ra();
|
| + Register rb = src.rb();
|
| + DCHECK(!ra.is(r0));
|
| + x_form(LWAX, rt, ra, rb, LeaveRC);
|
| +#else
|
| + lwzx(rt, src);
|
| +#endif
|
| + }
|
| + inline void extsw(Register rs, Register ra, RCBit rc = LeaveRC) {
|
| +#if V8_TARGET_ARCH_PPC64
|
| + emit(EXT2 | EXTSW | ra.code() * B21 | rs.code() * B16 | rc);
|
| +#else
|
| + // nop on 32-bit
|
| + DCHECK(rs.is(ra) && rc == LeaveRC);
|
| +#endif
|
| + }
|
| +
|
| +#undef DECLARE_PPC_X_INSTRUCTIONS_A_FORM
|
| +#undef DECLARE_PPC_X_INSTRUCTIONS_B_FORM
|
| +#undef DECLARE_PPC_X_INSTRUCTIONS_C_FORM
|
| +#undef DECLARE_PPC_X_INSTRUCTIONS_D_FORM
|
| +#undef DECLARE_PPC_X_INSTRUCTIONS_E_FORM
|
| +#undef DECLARE_PPC_X_INSTRUCTIONS_F_FORM
|
| +
|
| #define DECLARE_PPC_XX3_INSTRUCTIONS(name, instr_name, instr_value) \
|
| inline void name(const DoubleRegister rt, const DoubleRegister ra, \
|
| const DoubleRegister rb) { \
|
| @@ -849,26 +949,17 @@ class Assembler : public AssemblerBase {
|
| RCBit r = LeaveRC);
|
| void divwu(Register dst, Register src1, Register src2, OEBit o = LeaveOE,
|
| RCBit r = LeaveRC);
|
| - void modsw(Register rt, Register ra, Register rb);
|
| - void moduw(Register rt, Register ra, Register rb);
|
|
|
| void addi(Register dst, Register src, const Operand& imm);
|
| void addis(Register dst, Register src, const Operand& imm);
|
| void addic(Register dst, Register src, const Operand& imm);
|
|
|
| - void and_(Register dst, Register src1, Register src2, RCBit rc = LeaveRC);
|
| - void andc(Register dst, Register src1, Register src2, RCBit rc = LeaveRC);
|
| void andi(Register ra, Register rs, const Operand& imm);
|
| void andis(Register ra, Register rs, const Operand& imm);
|
| - void nor(Register dst, Register src1, Register src2, RCBit r = LeaveRC);
|
| - void notx(Register dst, Register src, RCBit r = LeaveRC);
|
| void ori(Register dst, Register src, const Operand& imm);
|
| void oris(Register dst, Register src, const Operand& imm);
|
| - void orx(Register dst, Register src1, Register src2, RCBit rc = LeaveRC);
|
| - void orc(Register dst, Register src1, Register src2, RCBit rc = LeaveRC);
|
| void xori(Register dst, Register src, const Operand& imm);
|
| void xoris(Register ra, Register rs, const Operand& imm);
|
| - void xor_(Register dst, Register src1, Register src2, RCBit rc = LeaveRC);
|
| void cmpi(Register src1, const Operand& src2, CRegister cr = cr7);
|
| void cmpli(Register src1, const Operand& src2, CRegister cr = cr7);
|
| void cmpwi(Register src1, const Operand& src2, CRegister cr = cr7);
|
| @@ -878,48 +969,23 @@ class Assembler : public AssemblerBase {
|
| void mr(Register dst, Register src);
|
|
|
| void lbz(Register dst, const MemOperand& src);
|
| - void lbzx(Register dst, const MemOperand& src);
|
| - void lbzux(Register dst, const MemOperand& src);
|
| void lhz(Register dst, const MemOperand& src);
|
| - void lhzx(Register dst, const MemOperand& src);
|
| - void lhzux(Register dst, const MemOperand& src);
|
| void lha(Register dst, const MemOperand& src);
|
| - void lhax(Register dst, const MemOperand& src);
|
| void lwz(Register dst, const MemOperand& src);
|
| void lwzu(Register dst, const MemOperand& src);
|
| - void lwzx(Register dst, const MemOperand& src);
|
| - void lwzux(Register dst, const MemOperand& src);
|
| void lwa(Register dst, const MemOperand& src);
|
| - void lwax(Register dst, const MemOperand& src);
|
| - void ldbrx(Register dst, const MemOperand& src);
|
| - void lwbrx(Register dst, const MemOperand& src);
|
| - void lhbrx(Register dst, const MemOperand& src);
|
| void stb(Register dst, const MemOperand& src);
|
| - void stbx(Register dst, const MemOperand& src);
|
| - void stbux(Register dst, const MemOperand& src);
|
| void sth(Register dst, const MemOperand& src);
|
| - void sthx(Register dst, const MemOperand& src);
|
| - void sthux(Register dst, const MemOperand& src);
|
| void stw(Register dst, const MemOperand& src);
|
| void stwu(Register dst, const MemOperand& src);
|
| - void stwx(Register rs, const MemOperand& src);
|
| - void stwux(Register rs, const MemOperand& src);
|
| -
|
| - void extsb(Register rs, Register ra, RCBit r = LeaveRC);
|
| - void extsh(Register rs, Register ra, RCBit r = LeaveRC);
|
| - void extsw(Register rs, Register ra, RCBit r = LeaveRC);
|
|
|
| void neg(Register rt, Register ra, OEBit o = LeaveOE, RCBit c = LeaveRC);
|
|
|
| #if V8_TARGET_ARCH_PPC64
|
| void ld(Register rd, const MemOperand& src);
|
| - void ldx(Register rd, const MemOperand& src);
|
| void ldu(Register rd, const MemOperand& src);
|
| - void ldux(Register rd, const MemOperand& src);
|
| void std(Register rs, const MemOperand& src);
|
| - void stdx(Register rs, const MemOperand& src);
|
| void stdu(Register rs, const MemOperand& src);
|
| - void stdux(Register rs, const MemOperand& src);
|
| void rldic(Register dst, Register src, int sh, int mb, RCBit r = LeaveRC);
|
| void rldicl(Register dst, Register src, int sh, int mb, RCBit r = LeaveRC);
|
| void rldcl(Register ra, Register rs, Register rb, int mb, RCBit r = LeaveRC);
|
| @@ -932,22 +998,15 @@ class Assembler : public AssemblerBase {
|
| void clrldi(Register dst, Register src, const Operand& val,
|
| RCBit rc = LeaveRC);
|
| void sradi(Register ra, Register rs, int sh, RCBit r = LeaveRC);
|
| - void srd(Register dst, Register src1, Register src2, RCBit r = LeaveRC);
|
| - void sld(Register dst, Register src1, Register src2, RCBit r = LeaveRC);
|
| - void srad(Register dst, Register src1, Register src2, RCBit r = LeaveRC);
|
| void rotld(Register ra, Register rs, Register rb, RCBit r = LeaveRC);
|
| void rotldi(Register ra, Register rs, int sh, RCBit r = LeaveRC);
|
| void rotrdi(Register ra, Register rs, int sh, RCBit r = LeaveRC);
|
| - void cntlzd_(Register dst, Register src, RCBit rc = LeaveRC);
|
| - void popcntd(Register dst, Register src);
|
| void mulld(Register dst, Register src1, Register src2, OEBit o = LeaveOE,
|
| RCBit r = LeaveRC);
|
| void divd(Register dst, Register src1, Register src2, OEBit o = LeaveOE,
|
| RCBit r = LeaveRC);
|
| void divdu(Register dst, Register src1, Register src2, OEBit o = LeaveOE,
|
| RCBit r = LeaveRC);
|
| - void modsd(Register rt, Register ra, Register rb);
|
| - void modud(Register rt, Register ra, Register rb);
|
| #endif
|
|
|
| void rlwinm(Register ra, Register rs, int sh, int mb, int me,
|
| @@ -962,24 +1021,12 @@ class Assembler : public AssemblerBase {
|
| RCBit rc = LeaveRC);
|
| void clrlwi(Register dst, Register src, const Operand& val,
|
| RCBit rc = LeaveRC);
|
| - void srawi(Register ra, Register rs, int sh, RCBit r = LeaveRC);
|
| - void srw(Register dst, Register src1, Register src2, RCBit r = LeaveRC);
|
| - void slw(Register dst, Register src1, Register src2, RCBit r = LeaveRC);
|
| - void sraw(Register dst, Register src1, Register src2, RCBit r = LeaveRC);
|
| void rotlw(Register ra, Register rs, Register rb, RCBit r = LeaveRC);
|
| void rotlwi(Register ra, Register rs, int sh, RCBit r = LeaveRC);
|
| void rotrwi(Register ra, Register rs, int sh, RCBit r = LeaveRC);
|
|
|
| - void cntlzw_(Register dst, Register src, RCBit rc = LeaveRC);
|
| - void popcntw(Register dst, Register src);
|
| -
|
| void subi(Register dst, Register src1, const Operand& src2);
|
|
|
| - void cmp(Register src1, Register src2, CRegister cr = cr7);
|
| - void cmpl(Register src1, Register src2, CRegister cr = cr7);
|
| - void cmpw(Register src1, Register src2, CRegister cr = cr7);
|
| - void cmplw(Register src1, Register src2, CRegister cr = cr7);
|
| -
|
| void mov(Register dst, const Operand& src);
|
| void bitwise_mov(Register dst, intptr_t value);
|
| void bitwise_mov32(Register dst, int32_t value);
|
| @@ -1043,20 +1090,12 @@ class Assembler : public AssemblerBase {
|
| // Support for floating point
|
| void lfd(const DoubleRegister frt, const MemOperand& src);
|
| void lfdu(const DoubleRegister frt, const MemOperand& src);
|
| - void lfdx(const DoubleRegister frt, const MemOperand& src);
|
| - void lfdux(const DoubleRegister frt, const MemOperand& src);
|
| void lfs(const DoubleRegister frt, const MemOperand& src);
|
| void lfsu(const DoubleRegister frt, const MemOperand& src);
|
| - void lfsx(const DoubleRegister frt, const MemOperand& src);
|
| - void lfsux(const DoubleRegister frt, const MemOperand& src);
|
| void stfd(const DoubleRegister frs, const MemOperand& src);
|
| void stfdu(const DoubleRegister frs, const MemOperand& src);
|
| - void stfdx(const DoubleRegister frs, const MemOperand& src);
|
| - void stfdux(const DoubleRegister frs, const MemOperand& src);
|
| void stfs(const DoubleRegister frs, const MemOperand& src);
|
| void stfsu(const DoubleRegister frs, const MemOperand& src);
|
| - void stfsx(const DoubleRegister frs, const MemOperand& src);
|
| - void stfsux(const DoubleRegister frs, const MemOperand& src);
|
|
|
| void fadd(const DoubleRegister frt, const DoubleRegister fra,
|
| const DoubleRegister frb, RCBit rc = LeaveRC);
|
| @@ -1420,7 +1459,6 @@ class Assembler : public AssemblerBase {
|
| DoubleRegister frb, RCBit r);
|
| void d_form(Instr instr, Register rt, Register ra, const intptr_t val,
|
| bool signed_disp);
|
| - void x_form(Instr instr, Register ra, Register rs, Register rb, RCBit r);
|
| void xo_form(Instr instr, Register rt, Register ra, Register rb, OEBit o,
|
| RCBit r);
|
| void md_form(Instr instr, Register ra, Register rs, int shift, int maskbit,
|
|
|