| Index: src/mips64/assembler-mips64.h
 | 
| diff --git a/src/mips64/assembler-mips64.h b/src/mips64/assembler-mips64.h
 | 
| index 03eeed9db54dbb915bc28508b1f73428b5cdbd44..423cd5ce1f8d59f00037e688c868e5fe56dea126 100644
 | 
| --- a/src/mips64/assembler-mips64.h
 | 
| +++ b/src/mips64/assembler-mips64.h
 | 
| @@ -64,7 +64,11 @@ namespace internal {
 | 
|    V(f24) V(f25) V(f26) V(f27) V(f28) V(f29) V(f30) V(f31)
 | 
|  
 | 
|  #define FLOAT_REGISTERS DOUBLE_REGISTERS
 | 
| -#define SIMD128_REGISTERS DOUBLE_REGISTERS
 | 
| +#define SIMD128_REGISTERS(V)                              \
 | 
| +  V(w0)  V(w1)  V(w2)  V(w3)  V(w4)  V(w5)  V(w6)  V(w7)  \
 | 
| +  V(w8)  V(w9)  V(w10) V(w11) V(w12) V(w13) V(w14) V(w15) \
 | 
| +  V(w16) V(w17) V(w18) V(w19) V(w20) V(w21) V(w22) V(w23) \
 | 
| +  V(w24) V(w25) V(w26) V(w27) V(w28) V(w29) V(w30) V(w31)
 | 
|  
 | 
|  #define ALLOCATABLE_DOUBLE_REGISTERS(V)                   \
 | 
|    V(f0)  V(f2)  V(f4)  V(f6)  V(f8)  V(f10) V(f12) V(f14) \
 | 
| @@ -163,7 +167,7 @@ struct FPURegister {
 | 
|      DOUBLE_REGISTERS(REGISTER_CODE)
 | 
|  #undef REGISTER_CODE
 | 
|          kAfterLast,
 | 
| -    kCode_no_reg = -1
 | 
| +    kCode_no_reg = kInvalidFPURegister
 | 
|    };
 | 
|  
 | 
|    static constexpr int kMaxNumRegisters = Code::kAfterLast;
 | 
| @@ -217,6 +221,44 @@ struct FPURegister {
 | 
|    int reg_code;
 | 
|  };
 | 
|  
 | 
| +// MIPS SIMD (MSA) register
 | 
| +struct MSARegister {
 | 
| +  enum Code {
 | 
| +#define REGISTER_CODE(R) kCode_##R,
 | 
| +    SIMD128_REGISTERS(REGISTER_CODE)
 | 
| +#undef REGISTER_CODE
 | 
| +        kAfterLast,
 | 
| +    kCode_no_reg = kInvalidMSARegister
 | 
| +  };
 | 
| +
 | 
| +  static const int kMaxNumRegisters = Code::kAfterLast;
 | 
| +
 | 
| +  inline static int NumRegisters();
 | 
| +
 | 
| +  bool is_valid() const { return 0 <= reg_code && reg_code < kMaxNumRegisters; }
 | 
| +  bool is(MSARegister reg) const { return reg_code == reg.reg_code; }
 | 
| +
 | 
| +  int code() const {
 | 
| +    DCHECK(is_valid());
 | 
| +    return reg_code;
 | 
| +  }
 | 
| +  int bit() const {
 | 
| +    DCHECK(is_valid());
 | 
| +    return 1 << reg_code;
 | 
| +  }
 | 
| +
 | 
| +  static MSARegister from_code(int code) {
 | 
| +    MSARegister r = {code};
 | 
| +    return r;
 | 
| +  }
 | 
| +  void setcode(int f) {
 | 
| +    reg_code = f;
 | 
| +    DCHECK(is_valid());
 | 
| +  }
 | 
| +  // Unfortunately we can't make this private in a struct.
 | 
| +  int reg_code;
 | 
| +};
 | 
| +
 | 
|  // A few double registers are reserved: one as a scratch register and one to
 | 
|  // hold 0.0.
 | 
|  //  f28: 0.0
 | 
| @@ -235,10 +277,7 @@ typedef FPURegister FloatRegister;
 | 
|  
 | 
|  typedef FPURegister DoubleRegister;
 | 
|  
 | 
| -// TODO(mips64) Define SIMD registers.
 | 
| -typedef FPURegister Simd128Register;
 | 
| -
 | 
| -constexpr DoubleRegister no_freg = {-1};
 | 
| +constexpr DoubleRegister no_freg = {kInvalidFPURegister};
 | 
|  
 | 
|  constexpr DoubleRegister f0 = {0};  // Return value in hard float mode.
 | 
|  constexpr DoubleRegister f1 = {1};
 | 
| @@ -273,6 +312,44 @@ constexpr DoubleRegister f29 = {29};
 | 
|  constexpr DoubleRegister f30 = {30};
 | 
|  constexpr DoubleRegister f31 = {31};
 | 
|  
 | 
| +// SIMD registers.
 | 
| +typedef MSARegister Simd128Register;
 | 
| +
 | 
| +const Simd128Register no_msareg = {kInvalidMSARegister};
 | 
| +
 | 
| +constexpr Simd128Register w0 = {0};
 | 
| +constexpr Simd128Register w1 = {1};
 | 
| +constexpr Simd128Register w2 = {2};
 | 
| +constexpr Simd128Register w3 = {3};
 | 
| +constexpr Simd128Register w4 = {4};
 | 
| +constexpr Simd128Register w5 = {5};
 | 
| +constexpr Simd128Register w6 = {6};
 | 
| +constexpr Simd128Register w7 = {7};
 | 
| +constexpr Simd128Register w8 = {8};
 | 
| +constexpr Simd128Register w9 = {9};
 | 
| +constexpr Simd128Register w10 = {10};
 | 
| +constexpr Simd128Register w11 = {11};
 | 
| +constexpr Simd128Register w12 = {12};
 | 
| +constexpr Simd128Register w13 = {13};
 | 
| +constexpr Simd128Register w14 = {14};
 | 
| +constexpr Simd128Register w15 = {15};
 | 
| +constexpr Simd128Register w16 = {16};
 | 
| +constexpr Simd128Register w17 = {17};
 | 
| +constexpr Simd128Register w18 = {18};
 | 
| +constexpr Simd128Register w19 = {19};
 | 
| +constexpr Simd128Register w20 = {20};
 | 
| +constexpr Simd128Register w21 = {21};
 | 
| +constexpr Simd128Register w22 = {22};
 | 
| +constexpr Simd128Register w23 = {23};
 | 
| +constexpr Simd128Register w24 = {24};
 | 
| +constexpr Simd128Register w25 = {25};
 | 
| +constexpr Simd128Register w26 = {26};
 | 
| +constexpr Simd128Register w27 = {27};
 | 
| +constexpr Simd128Register w28 = {28};
 | 
| +constexpr Simd128Register w29 = {29};
 | 
| +constexpr Simd128Register w30 = {30};
 | 
| +constexpr Simd128Register w31 = {31};
 | 
| +
 | 
|  // Register aliases.
 | 
|  // cp is assumed to be a callee saved register.
 | 
|  constexpr Register kRootRegister = s6;
 | 
| @@ -309,6 +386,32 @@ struct FPUControlRegister {
 | 
|  constexpr FPUControlRegister no_fpucreg = {kInvalidFPUControlRegister};
 | 
|  constexpr FPUControlRegister FCSR = {kFCSRRegister};
 | 
|  
 | 
| +// MSA control registers
 | 
| +struct MSAControlRegister {
 | 
| +  bool is_valid() const {
 | 
| +    return (reg_code == kMSAIRRegister) || (reg_code == kMSACSRRegister);
 | 
| +  }
 | 
| +  bool is(MSAControlRegister creg) const { return reg_code == creg.reg_code; }
 | 
| +  int code() const {
 | 
| +    DCHECK(is_valid());
 | 
| +    return reg_code;
 | 
| +  }
 | 
| +  int bit() const {
 | 
| +    DCHECK(is_valid());
 | 
| +    return 1 << reg_code;
 | 
| +  }
 | 
| +  void setcode(int f) {
 | 
| +    reg_code = f;
 | 
| +    DCHECK(is_valid());
 | 
| +  }
 | 
| +  // Unfortunately we can't make this private in a struct.
 | 
| +  int reg_code;
 | 
| +};
 | 
| +
 | 
| +constexpr MSAControlRegister no_msacreg = {kInvalidMSAControlRegister};
 | 
| +constexpr MSAControlRegister MSAIR = {kMSAIRRegister};
 | 
| +constexpr MSAControlRegister MSACSR = {kMSACSRRegister};
 | 
| +
 | 
|  // -----------------------------------------------------------------------------
 | 
|  // Machine instruction Operands.
 | 
|  constexpr int kSmiShift = kSmiTagSize + kSmiShiftSize;
 | 
| @@ -1042,6 +1145,566 @@ class Assembler : public AssemblerBase {
 | 
|    }
 | 
|    void fcmp(FPURegister src1, const double src2, FPUCondition cond);
 | 
|  
 | 
| +  // MSA instructions
 | 
| +  void bz_v(MSARegister wt, int16_t offset);
 | 
| +  void bz_b(MSARegister wt, int16_t offset);
 | 
| +  void bz_h(MSARegister wt, int16_t offset);
 | 
| +  void bz_w(MSARegister wt, int16_t offset);
 | 
| +  void bz_d(MSARegister wt, int16_t offset);
 | 
| +  void bnz_v(MSARegister wt, int16_t offset);
 | 
| +  void bnz_b(MSARegister wt, int16_t offset);
 | 
| +  void bnz_h(MSARegister wt, int16_t offset);
 | 
| +  void bnz_w(MSARegister wt, int16_t offset);
 | 
| +  void bnz_d(MSARegister wt, int16_t offset);
 | 
| +
 | 
| +  void ld_b(MSARegister wd, const MemOperand& rs);
 | 
| +  void ld_h(MSARegister wd, const MemOperand& rs);
 | 
| +  void ld_w(MSARegister wd, const MemOperand& rs);
 | 
| +  void ld_d(MSARegister wd, const MemOperand& rs);
 | 
| +  void st_b(MSARegister wd, const MemOperand& rs);
 | 
| +  void st_h(MSARegister wd, const MemOperand& rs);
 | 
| +  void st_w(MSARegister wd, const MemOperand& rs);
 | 
| +  void st_d(MSARegister wd, const MemOperand& rs);
 | 
| +
 | 
| +  void ldi_b(MSARegister wd, int32_t imm10);
 | 
| +  void ldi_h(MSARegister wd, int32_t imm10);
 | 
| +  void ldi_w(MSARegister wd, int32_t imm10);
 | 
| +  void ldi_d(MSARegister wd, int32_t imm10);
 | 
| +
 | 
| +  void addvi_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void addvi_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void addvi_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void addvi_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void subvi_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void subvi_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void subvi_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void subvi_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void maxi_s_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void maxi_s_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void maxi_s_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void maxi_s_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void maxi_u_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void maxi_u_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void maxi_u_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void maxi_u_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void mini_s_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void mini_s_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void mini_s_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void mini_s_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void mini_u_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void mini_u_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void mini_u_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void mini_u_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void ceqi_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void ceqi_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void ceqi_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void ceqi_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clti_s_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clti_s_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clti_s_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clti_s_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clti_u_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clti_u_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clti_u_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clti_u_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clei_s_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clei_s_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clei_s_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clei_s_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clei_u_b(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clei_u_h(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clei_u_w(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +  void clei_u_d(MSARegister wd, MSARegister ws, uint32_t imm5);
 | 
| +
 | 
| +  void andi_b(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void ori_b(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void nori_b(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void xori_b(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void bmnzi_b(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void bmzi_b(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void bseli_b(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void shf_b(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void shf_h(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +  void shf_w(MSARegister wd, MSARegister ws, uint32_t imm8);
 | 
| +
 | 
| +  void and_v(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void or_v(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void nor_v(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void xor_v(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bmnz_v(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bmz_v(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bsel_v(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +
 | 
| +  void fill_b(MSARegister wd, Register rs);
 | 
| +  void fill_h(MSARegister wd, Register rs);
 | 
| +  void fill_w(MSARegister wd, Register rs);
 | 
| +  void fill_d(MSARegister wd, Register rs);
 | 
| +  void pcnt_b(MSARegister wd, MSARegister ws);
 | 
| +  void pcnt_h(MSARegister wd, MSARegister ws);
 | 
| +  void pcnt_w(MSARegister wd, MSARegister ws);
 | 
| +  void pcnt_d(MSARegister wd, MSARegister ws);
 | 
| +  void nloc_b(MSARegister wd, MSARegister ws);
 | 
| +  void nloc_h(MSARegister wd, MSARegister ws);
 | 
| +  void nloc_w(MSARegister wd, MSARegister ws);
 | 
| +  void nloc_d(MSARegister wd, MSARegister ws);
 | 
| +  void nlzc_b(MSARegister wd, MSARegister ws);
 | 
| +  void nlzc_h(MSARegister wd, MSARegister ws);
 | 
| +  void nlzc_w(MSARegister wd, MSARegister ws);
 | 
| +  void nlzc_d(MSARegister wd, MSARegister ws);
 | 
| +
 | 
| +  void fclass_w(MSARegister wd, MSARegister ws);
 | 
| +  void fclass_d(MSARegister wd, MSARegister ws);
 | 
| +  void ftrunc_s_w(MSARegister wd, MSARegister ws);
 | 
| +  void ftrunc_s_d(MSARegister wd, MSARegister ws);
 | 
| +  void ftrunc_u_w(MSARegister wd, MSARegister ws);
 | 
| +  void ftrunc_u_d(MSARegister wd, MSARegister ws);
 | 
| +  void fsqrt_w(MSARegister wd, MSARegister ws);
 | 
| +  void fsqrt_d(MSARegister wd, MSARegister ws);
 | 
| +  void frsqrt_w(MSARegister wd, MSARegister ws);
 | 
| +  void frsqrt_d(MSARegister wd, MSARegister ws);
 | 
| +  void frcp_w(MSARegister wd, MSARegister ws);
 | 
| +  void frcp_d(MSARegister wd, MSARegister ws);
 | 
| +  void frint_w(MSARegister wd, MSARegister ws);
 | 
| +  void frint_d(MSARegister wd, MSARegister ws);
 | 
| +  void flog2_w(MSARegister wd, MSARegister ws);
 | 
| +  void flog2_d(MSARegister wd, MSARegister ws);
 | 
| +  void fexupl_w(MSARegister wd, MSARegister ws);
 | 
| +  void fexupl_d(MSARegister wd, MSARegister ws);
 | 
| +  void fexupr_w(MSARegister wd, MSARegister ws);
 | 
| +  void fexupr_d(MSARegister wd, MSARegister ws);
 | 
| +  void ffql_w(MSARegister wd, MSARegister ws);
 | 
| +  void ffql_d(MSARegister wd, MSARegister ws);
 | 
| +  void ffqr_w(MSARegister wd, MSARegister ws);
 | 
| +  void ffqr_d(MSARegister wd, MSARegister ws);
 | 
| +  void ftint_s_w(MSARegister wd, MSARegister ws);
 | 
| +  void ftint_s_d(MSARegister wd, MSARegister ws);
 | 
| +  void ftint_u_w(MSARegister wd, MSARegister ws);
 | 
| +  void ftint_u_d(MSARegister wd, MSARegister ws);
 | 
| +  void ffint_s_w(MSARegister wd, MSARegister ws);
 | 
| +  void ffint_s_d(MSARegister wd, MSARegister ws);
 | 
| +  void ffint_u_w(MSARegister wd, MSARegister ws);
 | 
| +  void ffint_u_d(MSARegister wd, MSARegister ws);
 | 
| +
 | 
| +  void sll_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void sll_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void sll_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void sll_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void sra_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void sra_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void sra_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void sra_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srl_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srl_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srl_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srl_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bclr_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bclr_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bclr_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bclr_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bset_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bset_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bset_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bset_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bneg_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bneg_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bneg_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void bneg_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void binsl_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void binsl_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void binsl_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void binsl_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void binsr_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void binsr_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void binsr_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void binsr_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void addv_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void addv_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void addv_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void addv_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subv_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subv_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subv_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subv_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_a_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_a_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void max_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_a_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_a_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void min_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ceq_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ceq_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ceq_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ceq_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void clt_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void clt_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void clt_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void clt_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void clt_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void clt_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void clt_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void clt_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void cle_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void cle_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void cle_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void cle_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void cle_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void cle_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void cle_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void cle_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void add_a_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void add_a_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void add_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void add_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_a_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_a_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void adds_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ave_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ave_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ave_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ave_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ave_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ave_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ave_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ave_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void aver_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void aver_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void aver_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void aver_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void aver_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void aver_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void aver_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void aver_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subs_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subs_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subs_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subs_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subs_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subs_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subs_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subs_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsus_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsus_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsus_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsus_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsus_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsus_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsus_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsus_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsuu_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsuu_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsuu_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsuu_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsuu_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsuu_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsuu_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void subsuu_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void asub_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void asub_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void asub_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void asub_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void asub_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void asub_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void asub_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void asub_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mulv_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mulv_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mulv_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mulv_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void maddv_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void maddv_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void maddv_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void maddv_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void msubv_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void msubv_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void msubv_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void msubv_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void div_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void div_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void div_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void div_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void div_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void div_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void div_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void div_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mod_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mod_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mod_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mod_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mod_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mod_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mod_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mod_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dotp_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dotp_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dotp_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dotp_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dotp_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dotp_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dotp_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dotp_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpadd_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpadd_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpadd_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpadd_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpadd_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpadd_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpadd_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpadd_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpsub_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpsub_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpsub_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpsub_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpsub_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpsub_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpsub_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void dpsub_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void sld_b(MSARegister wd, MSARegister ws, Register rt);
 | 
| +  void sld_h(MSARegister wd, MSARegister ws, Register rt);
 | 
| +  void sld_w(MSARegister wd, MSARegister ws, Register rt);
 | 
| +  void sld_d(MSARegister wd, MSARegister ws, Register rt);
 | 
| +  void splat_b(MSARegister wd, MSARegister ws, Register rt);
 | 
| +  void splat_h(MSARegister wd, MSARegister ws, Register rt);
 | 
| +  void splat_w(MSARegister wd, MSARegister ws, Register rt);
 | 
| +  void splat_d(MSARegister wd, MSARegister ws, Register rt);
 | 
| +  void pckev_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void pckev_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void pckev_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void pckev_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void pckod_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void pckod_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void pckod_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void pckod_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvl_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvl_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvl_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvl_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvr_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvr_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvr_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvr_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvev_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvev_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvev_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvev_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvod_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvod_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvod_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ilvod_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void vshf_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void vshf_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void vshf_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void vshf_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srar_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srar_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srar_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srar_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srlr_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srlr_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srlr_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void srlr_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hadd_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hadd_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hadd_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hadd_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hadd_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hadd_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hadd_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hadd_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hsub_s_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hsub_s_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hsub_s_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hsub_s_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hsub_u_b(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hsub_u_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hsub_u_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void hsub_u_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +
 | 
| +  void fcaf_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcaf_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcun_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcun_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fceq_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fceq_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcueq_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcueq_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fclt_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fclt_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcult_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcult_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcle_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcle_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcule_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcule_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsaf_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsaf_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsun_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsun_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fseq_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fseq_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsueq_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsueq_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fslt_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fslt_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsult_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsult_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsle_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsle_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsule_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsule_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fadd_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fadd_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsub_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsub_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmul_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmul_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fdiv_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fdiv_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmadd_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmadd_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmsub_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmsub_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fexp2_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fexp2_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fexdo_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fexdo_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ftq_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void ftq_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmin_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmin_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmin_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmin_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmax_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmax_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmax_a_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fmax_a_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcor_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcor_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcune_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcune_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcne_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fcne_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mul_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mul_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void madd_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void madd_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void msub_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void msub_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsor_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsor_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsune_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsune_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsne_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void fsne_d(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mulr_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void mulr_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void maddr_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void maddr_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void msubr_q_h(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +  void msubr_q_w(MSARegister wd, MSARegister ws, MSARegister wt);
 | 
| +
 | 
| +  void sldi_b(MSARegister wd, MSARegister ws, uint32_t n);
 | 
| +  void sldi_h(MSARegister wd, MSARegister ws, uint32_t n);
 | 
| +  void sldi_w(MSARegister wd, MSARegister ws, uint32_t n);
 | 
| +  void sldi_d(MSARegister wd, MSARegister ws, uint32_t n);
 | 
| +  void splati_b(MSARegister wd, MSARegister ws, uint32_t n);
 | 
| +  void splati_h(MSARegister wd, MSARegister ws, uint32_t n);
 | 
| +  void splati_w(MSARegister wd, MSARegister ws, uint32_t n);
 | 
| +  void splati_d(MSARegister wd, MSARegister ws, uint32_t n);
 | 
| +  void copy_s_b(Register rd, MSARegister ws, uint32_t n);
 | 
| +  void copy_s_h(Register rd, MSARegister ws, uint32_t n);
 | 
| +  void copy_s_w(Register rd, MSARegister ws, uint32_t n);
 | 
| +  void copy_s_d(Register rd, MSARegister ws, uint32_t n);
 | 
| +  void copy_u_b(Register rd, MSARegister ws, uint32_t n);
 | 
| +  void copy_u_h(Register rd, MSARegister ws, uint32_t n);
 | 
| +  void copy_u_w(Register rd, MSARegister ws, uint32_t n);
 | 
| +  void insert_b(MSARegister wd, uint32_t n, Register rs);
 | 
| +  void insert_h(MSARegister wd, uint32_t n, Register rs);
 | 
| +  void insert_w(MSARegister wd, uint32_t n, Register rs);
 | 
| +  void insert_d(MSARegister wd, uint32_t n, Register rs);
 | 
| +  void insve_b(MSARegister wd, uint32_t n, MSARegister ws);
 | 
| +  void insve_h(MSARegister wd, uint32_t n, MSARegister ws);
 | 
| +  void insve_w(MSARegister wd, uint32_t n, MSARegister ws);
 | 
| +  void insve_d(MSARegister wd, uint32_t n, MSARegister ws);
 | 
| +  void move_v(MSARegister wd, MSARegister ws);
 | 
| +  void ctcmsa(MSAControlRegister cd, Register rs);
 | 
| +  void cfcmsa(Register rd, MSAControlRegister cs);
 | 
| +
 | 
| +  void slli_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void slli_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void slli_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void slli_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srai_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srai_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srai_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srai_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srli_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srli_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srli_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srli_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bclri_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bclri_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bclri_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bclri_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bseti_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bseti_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bseti_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bseti_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bnegi_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bnegi_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bnegi_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void bnegi_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void binsli_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void binsli_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void binsli_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void binsli_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void binsri_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void binsri_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void binsri_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void binsri_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void sat_s_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void sat_s_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void sat_s_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void sat_s_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void sat_u_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void sat_u_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void sat_u_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void sat_u_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srari_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srari_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srari_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srari_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srlri_b(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srlri_h(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srlri_w(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +  void srlri_d(MSARegister wd, MSARegister ws, uint32_t m);
 | 
| +
 | 
|    // Check the code size generated from label to here.
 | 
|    int SizeOfCodeGeneratedSince(Label* label) {
 | 
|      return pc_offset() - label->pos();
 | 
| @@ -1430,6 +2093,75 @@ class Assembler : public AssemblerBase {
 | 
|    void GenInstrJump(Opcode opcode,
 | 
|                       uint32_t address);
 | 
|  
 | 
| +  // MSA
 | 
| +  void GenInstrMsaI8(SecondaryField operation, uint32_t imm8, MSARegister ws,
 | 
| +                     MSARegister wd);
 | 
| +
 | 
| +  void GenInstrMsaI5(SecondaryField operation, SecondaryField df, int32_t imm5,
 | 
| +                     MSARegister ws, MSARegister wd);
 | 
| +
 | 
| +  void GenInstrMsaBit(SecondaryField operation, SecondaryField df, uint32_t m,
 | 
| +                      MSARegister ws, MSARegister wd);
 | 
| +
 | 
| +  void GenInstrMsaI10(SecondaryField operation, SecondaryField df,
 | 
| +                      int32_t imm10, MSARegister wd);
 | 
| +
 | 
| +  template <typename RegType>
 | 
| +  void GenInstrMsa3R(SecondaryField operation, SecondaryField df, RegType t,
 | 
| +                     MSARegister ws, MSARegister wd);
 | 
| +
 | 
| +  template <typename DstType, typename SrcType>
 | 
| +  void GenInstrMsaElm(SecondaryField operation, SecondaryField df, uint32_t n,
 | 
| +                      SrcType src, DstType dst);
 | 
| +
 | 
| +  void GenInstrMsa3RF(SecondaryField operation, uint32_t df, MSARegister wt,
 | 
| +                      MSARegister ws, MSARegister wd);
 | 
| +
 | 
| +  void GenInstrMsaVec(SecondaryField operation, MSARegister wt, MSARegister ws,
 | 
| +                      MSARegister wd);
 | 
| +
 | 
| +  void GenInstrMsaMI10(SecondaryField operation, int32_t s10, Register rs,
 | 
| +                       MSARegister wd);
 | 
| +
 | 
| +  void GenInstrMsa2R(SecondaryField operation, SecondaryField df,
 | 
| +                     MSARegister ws, MSARegister wd);
 | 
| +
 | 
| +  void GenInstrMsa2RF(SecondaryField operation, SecondaryField df,
 | 
| +                      MSARegister ws, MSARegister wd);
 | 
| +
 | 
| +  void GenInstrMsaBranch(SecondaryField operation, MSARegister wt,
 | 
| +                         int32_t offset16);
 | 
| +
 | 
| +  inline bool is_valid_msa_df_m(SecondaryField bit_df, uint32_t m) {
 | 
| +    switch (bit_df) {
 | 
| +      case BIT_DF_b:
 | 
| +        return is_uint3(m);
 | 
| +      case BIT_DF_h:
 | 
| +        return is_uint4(m);
 | 
| +      case BIT_DF_w:
 | 
| +        return is_uint5(m);
 | 
| +      case BIT_DF_d:
 | 
| +        return is_uint6(m);
 | 
| +      default:
 | 
| +        return false;
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
| +  inline bool is_valid_msa_df_n(SecondaryField elm_df, uint32_t n) {
 | 
| +    switch (elm_df) {
 | 
| +      case ELM_DF_B:
 | 
| +        return is_uint4(n);
 | 
| +      case ELM_DF_H:
 | 
| +        return is_uint3(n);
 | 
| +      case ELM_DF_W:
 | 
| +        return is_uint2(n);
 | 
| +      case ELM_DF_D:
 | 
| +        return is_uint1(n);
 | 
| +      default:
 | 
| +        return false;
 | 
| +    }
 | 
| +  }
 | 
| +
 | 
|    // Labels.
 | 
|    void print(Label* L);
 | 
|    void bind_to(Label* L, int pos);
 | 
| 
 |