| Index: src/IceAssemblerMIPS32.h
 | 
| diff --git a/src/IceAssemblerMIPS32.h b/src/IceAssemblerMIPS32.h
 | 
| index eefb1b2004e7f0e55c73013bba50967dd4b17d15..ff67904c9fab03693be9b04887d0888c99afbff2 100644
 | 
| --- a/src/IceAssemblerMIPS32.h
 | 
| +++ b/src/IceAssemblerMIPS32.h
 | 
| @@ -27,6 +27,13 @@ namespace MIPS32 {
 | 
|  using IValueT = uint32_t;
 | 
|  using IOffsetT = int32_t;
 | 
|  
 | 
| +enum FPInstDataFormat {
 | 
| +  SinglePrecision = 16,
 | 
| +  DoublePrecision = 17,
 | 
| +  Word = 20,
 | 
| +  Long = 21
 | 
| +};
 | 
| +
 | 
|  class AssemblerMIPS32 : public Assembler {
 | 
|    AssemblerMIPS32(const AssemblerMIPS32 &) = delete;
 | 
|    AssemblerMIPS32 &operator=(const AssemblerMIPS32 &) = delete;
 | 
| @@ -54,56 +61,134 @@ public:
 | 
|    void nop();
 | 
|  
 | 
|    void emitRtRsImm16(IValueT Opcode, const Operand *OpRt, const Operand *OpRs,
 | 
| -                     const uint32_t Imm, const char *InsnName);
 | 
| +                     uint32_t Imm, const char *InsnName);
 | 
| +
 | 
| +  void emitFtRsImm16(IValueT Opcode, const Operand *OpFt, const Operand *OpRs,
 | 
| +                     uint32_t Imm, const char *InsnName);
 | 
|  
 | 
|    void emitRdRtSa(IValueT Opcode, const Operand *OpRd, const Operand *OpRt,
 | 
| -                  const uint32_t Sa, const char *InsnName);
 | 
| +                  uint32_t Sa, const char *InsnName);
 | 
|  
 | 
|    void emitRdRsRt(IValueT Opcode, const Operand *OpRd, const Operand *OpRs,
 | 
|                    const Operand *OpRt, const char *InsnName);
 | 
|  
 | 
| +  void emitCOP1FmtFsFd(IValueT Opcode, FPInstDataFormat Format,
 | 
| +                       const Operand *OpFd, const Operand *OpFs,
 | 
| +                       const char *InsnName);
 | 
| +
 | 
| +  void emitCOP1FmtFtFsFd(IValueT Opcode, FPInstDataFormat Format,
 | 
| +                         const Operand *OpFd, const Operand *OpFs,
 | 
| +                         const Operand *OpFt, const char *InsnName);
 | 
| +
 | 
| +  void emitCOP1FmtRtFsFd(IValueT Opcode, FPInstDataFormat Format,
 | 
| +                         const Operand *OpFd, const Operand *OpFs,
 | 
| +                         const Operand *OpRt, const char *InsnName);
 | 
| +
 | 
| +  void emitCOP1MovRtFs(IValueT Opcode, const Operand *OpRt, const Operand *OpFs,
 | 
| +                       const char *InsnName);
 | 
| +
 | 
|    void emitBr(const CondMIPS32::Cond Cond, const Operand *OpRs,
 | 
|                const Operand *OpRt, IOffsetT Offset);
 | 
|  
 | 
| -  void addiu(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
| +  void abs_d(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void slti(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
| +  void abs_s(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void sltiu(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
| +  void add_d(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void add_s(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void addu(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
| +
 | 
| +  void addiu(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
|  
 | 
|    void and_(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
|  
 | 
|    void andi(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
|  
 | 
| -  void or_(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
| +  void b(Label *TargetLabel);
 | 
|  
 | 
| -  void ori(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
| +  void cvt_d_l(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void xor_(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
| +  void cvt_d_s(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void xori(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
| +  void cvt_d_w(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void sll(const Operand *OpRd, const Operand *OpRt, const uint32_t Sa);
 | 
| +  void cvt_s_d(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void srl(const Operand *OpRd, const Operand *OpRt, const uint32_t Sa);
 | 
| +  void cvt_s_l(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void sra(const Operand *OpRd, const Operand *OpRt, const uint32_t Sa);
 | 
| +  void cvt_s_w(const Operand *OpFd, const Operand *OpFs);
 | 
| +
 | 
| +  void div_d(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void div_s(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void lw(const Operand *OpRt, const Operand *OpBase, const uint32_t Offset);
 | 
| +
 | 
| +  void mfc1(const Operand *OpRt, const Operand *OpFs);
 | 
| +
 | 
| +  void mov_d(const Operand *OpFd, const Operand *OpFs);
 | 
| +
 | 
| +  void mov_s(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
|    void move(const Operand *OpRd, const Operand *OpRs);
 | 
|  
 | 
| -  void addu(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
| +  void movn_d(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void movn_s(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void movz_d(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void movz_s(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void mtc1(const Operand *OpRt, const Operand *OpFs);
 | 
| +
 | 
| +  void mul_d(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void mul_s(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void or_(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
| +
 | 
| +  void ori(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
| +
 | 
| +  void ret(void);
 | 
| +
 | 
| +  void sll(const Operand *OpRd, const Operand *OpRt, const uint32_t Sa);
 | 
|  
 | 
|    void slt(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
|  
 | 
| +  void slti(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
| +
 | 
| +  void sltiu(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
| +
 | 
|    void sltu(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
|  
 | 
| +  void sqrt_d(const Operand *OpFd, const Operand *OpFs);
 | 
| +
 | 
| +  void sqrt_s(const Operand *OpFd, const Operand *OpFs);
 | 
| +
 | 
| +  void sra(const Operand *OpRd, const Operand *OpRt, const uint32_t Sa);
 | 
| +
 | 
| +  void srl(const Operand *OpRd, const Operand *OpRt, const uint32_t Sa);
 | 
| +
 | 
| +  void sub_d(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
| +  void sub_s(const Operand *OpFd, const Operand *OpFs, const Operand *OpFt);
 | 
| +
 | 
|    void sw(const Operand *OpRt, const Operand *OpBase, const uint32_t Offset);
 | 
|  
 | 
| -  void lw(const Operand *OpRt, const Operand *OpBase, const uint32_t Offset);
 | 
| +  void trunc_l_d(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void ret(void);
 | 
| +  void trunc_l_s(const Operand *OpFd, const Operand *OpFs);
 | 
|  
 | 
| -  void b(Label *TargetLabel);
 | 
| +  void trunc_w_d(const Operand *OpFd, const Operand *OpFs);
 | 
| +
 | 
| +  void trunc_w_s(const Operand *OpFd, const Operand *OpFs);
 | 
| +
 | 
| +  void xor_(const Operand *OpRd, const Operand *OpRs, const Operand *OpRt);
 | 
| +
 | 
| +  void xori(const Operand *OpRt, const Operand *OpRs, const uint32_t Imm);
 | 
|  
 | 
|    void bcc(const CondMIPS32::Cond Cond, const Operand *OpRs,
 | 
|             const Operand *OpRt, Label *TargetLabel);
 | 
| 
 |