summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td73
-rw-r--r--llvm/lib/Target/Mips/MicroMipsInstrFPU.td104
-rw-r--r--llvm/lib/Target/Mips/MicroMipsInstrFormats.td1
-rw-r--r--llvm/lib/Target/Mips/MipsISelLowering.cpp5
-rw-r--r--llvm/lib/Target/Mips/MipsISelLowering.h2
-rw-r--r--llvm/lib/Target/Mips/MipsInstrFPU.td95
-rw-r--r--llvm/lib/Target/Mips/MipsRegisterInfo.cpp4
-rw-r--r--llvm/lib/Target/Mips/MipsSEInstrInfo.cpp27
-rw-r--r--llvm/lib/Target/Mips/MipsSEInstrInfo.h6
-rw-r--r--llvm/test/CodeGen/Mips/llvm-ir/arith-fp.ll55
-rw-r--r--llvm/test/CodeGen/Mips/llvm-ir/bitcast.ll30
-rw-r--r--llvm/test/CodeGen/Mips/llvm-ir/cvt.ll37
-rw-r--r--llvm/test/CodeGen/Mips/maxcallframesize.ll17
-rw-r--r--llvm/test/MC/Disassembler/Mips/micromips32r3/valid-el.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64-el.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/micromips32r3/valid.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/mips32/valid-fp64-el.txt10
-rw-r--r--llvm/test/MC/Disassembler/Mips/mips32/valid-fp64.txt10
-rw-r--r--llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64-el.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64-el.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64-el.txt12
-rw-r--r--llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64.txt12
-rw-r--r--llvm/test/MC/Mips/micromips/valid-fp64.s40
-rw-r--r--llvm/test/MC/Mips/micromips/valid.s24
-rw-r--r--llvm/test/MC/Mips/micromips32r6/valid.s14
-rw-r--r--llvm/test/MC/Mips/mips1/valid.s30
-rw-r--r--llvm/test/MC/Mips/mips2/valid.s30
-rw-r--r--llvm/test/MC/Mips/mips32/valid.s30
-rw-r--r--llvm/test/MC/Mips/mips32r2/valid-fp64.s40
-rw-r--r--llvm/test/MC/Mips/mips32r2/valid.s36
-rw-r--r--llvm/test/MC/Mips/mips32r3/valid-fp64.s40
-rw-r--r--llvm/test/MC/Mips/mips32r3/valid.s36
-rw-r--r--llvm/test/MC/Mips/mips32r5/valid-fp64.s40
-rw-r--r--llvm/test/MC/Mips/mips32r5/valid.s36
37 files changed, 738 insertions, 254 deletions
diff --git a/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td b/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td
index 7fa24062a62..f1a7f7852e1 100644
--- a/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td
+++ b/llvm/lib/Target/Mips/MicroMips32r6InstrInfo.td
@@ -119,7 +119,6 @@ class MFC0_MMR6_ENC : POOL32A_MFTC0_FM_MMR6<"mfc0", 0b00011, 0b111100>;
class MFC1_MMR6_ENC : POOL32F_MFTC1_FM_MMR6<"mfc1", 0b10000000>;
class MFC2_MMR6_ENC : POOL32A_MFTC2_FM_MMR6<"mfc2", 0b0100110100>;
class MFHC0_MMR6_ENC : POOL32A_MFTC0_FM_MMR6<"mfhc0", 0b00011, 0b110100>;
-class MFHC1_MMR6_ENC : POOL32F_MFTC1_FM_MMR6<"mfhc1", 0b11000000>;
class MFHC2_MMR6_ENC : POOL32A_MFTC2_FM_MMR6<"mfhc2", 0b1000110100>;
class MOD_MMR6_ENC : ARITH_FM_MMR6<"mod", 0x158>;
class MODU_MMR6_ENC : ARITH_FM_MMR6<"modu", 0x1d8>;
@@ -131,7 +130,6 @@ class MTC0_MMR6_ENC : POOL32A_MFTC0_FM_MMR6<"mtc0", 0b01011, 0b111100>;
class MTC1_MMR6_ENC : POOL32F_MFTC1_FM_MMR6<"mtc1", 0b10100000>;
class MTC2_MMR6_ENC : POOL32A_MFTC2_FM_MMR6<"mtc2", 0b0101110100>;
class MTHC0_MMR6_ENC : POOL32A_MFTC0_FM_MMR6<"mthc0", 0b01011, 0b110100>;
-class MTHC1_MMR6_ENC : POOL32F_MFTC1_FM_MMR6<"mthc1", 0b11100000>;
class MTHC2_MMR6_ENC : POOL32A_MFTC2_FM_MMR6<"mthc2", 0b1001110100>;
class NOR_MMR6_ENC : ARITH_FM_MMR6<"nor", 0x2d0>;
class OR_MMR6_ENC : ARITH_FM_MMR6<"or", 0x290>;
@@ -238,21 +236,15 @@ class SWC2_MMR6_ENC : POOL32B_LDWC2_SDWC2_FM_MMR6<"swc2", 0b1000>;
/// Floating Point Instructions
class FADD_S_MMR6_ENC : POOL32F_ARITH_FM_MMR6<"add.s", 0, 0b00110000>;
-class FADD_D_MMR6_ENC : POOL32F_ARITH_FM_MMR6<"add.d", 1, 0b00110000>;
class FSUB_S_MMR6_ENC : POOL32F_ARITH_FM_MMR6<"sub.s", 0, 0b01110000>;
-class FSUB_D_MMR6_ENC : POOL32F_ARITH_FM_MMR6<"sub.d", 1, 0b01110000>;
class FMUL_S_MMR6_ENC : POOL32F_ARITH_FM_MMR6<"mul.s", 0, 0b10110000>;
-class FMUL_D_MMR6_ENC : POOL32F_ARITH_FM_MMR6<"mul.d", 1, 0b10110000>;
class FDIV_S_MMR6_ENC : POOL32F_ARITH_FM_MMR6<"div.s", 0, 0b11110000>;
-class FDIV_D_MMR6_ENC : POOL32F_ARITH_FM_MMR6<"div.d", 1, 0b11110000>;
class MADDF_S_MMR6_ENC : POOL32F_ARITHF_FM_MMR6<"maddf.s", 0, 0b110111000>;
class MADDF_D_MMR6_ENC : POOL32F_ARITHF_FM_MMR6<"maddf.d", 1, 0b110111000>;
class MSUBF_S_MMR6_ENC : POOL32F_ARITHF_FM_MMR6<"msubf.s", 0, 0b111111000>;
class MSUBF_D_MMR6_ENC : POOL32F_ARITHF_FM_MMR6<"msubf.d", 1, 0b111111000>;
class FMOV_S_MMR6_ENC : POOL32F_MOV_NEG_FM_MMR6<"mov.s", 0, 0b0000001>;
-class FMOV_D_MMR6_ENC : POOL32F_MOV_NEG_FM_MMR6<"mov.d", 1, 0b0000001>;
class FNEG_S_MMR6_ENC : POOL32F_MOV_NEG_FM_MMR6<"neg.s", 0, 0b0101101>;
-class FNEG_D_MMR6_ENC : POOL32F_MOV_NEG_FM_MMR6<"neg.d", 1, 0b0101101>;
class MAX_S_MMR6_ENC : POOL32F_MINMAX_FM<"max.s", 0, 0b000001011>;
class MAX_D_MMR6_ENC : POOL32F_MINMAX_FM<"max.d", 1, 0b000001011>;
class MAXA_S_MMR6_ENC : POOL32F_MINMAX_FM<"maxa.s", 0, 0b000101011>;
@@ -265,11 +257,7 @@ class MINA_D_MMR6_ENC : POOL32F_MINMAX_FM<"mina.d", 1, 0b000100011>;
class CVT_L_S_MMR6_ENC : POOL32F_CVT_LW_FM<"cvt.l.s", 0, 0b00000100>;
class CVT_L_D_MMR6_ENC : POOL32F_CVT_LW_FM<"cvt.l.d", 1, 0b00000100>;
class CVT_W_S_MMR6_ENC : POOL32F_CVT_LW_FM<"cvt.w.s", 0, 0b00100100>;
-class CVT_W_D_MMR6_ENC : POOL32F_CVT_LW_FM<"cvt.w.d", 1, 0b00100100>;
-class CVT_D_S_MMR6_ENC : POOL32F_CVT_DS_FM<"cvt.d.s", 0, 0b1001101>;
-class CVT_D_W_MMR6_ENC : POOL32F_CVT_DS_FM<"cvt.d.w", 1, 0b1001101>;
class CVT_D_L_MMR6_ENC : POOL32F_CVT_DS_FM<"cvt.d.l", 2, 0b1001101>;
-class CVT_S_D_MMR6_ENC : POOL32F_CVT_DS_FM<"cvt.s.d", 0, 0b1101101>;
class CVT_S_W_MMR6_ENC : POOL32F_CVT_DS_FM<"cvt.s.w", 1, 0b1101101>;
class CVT_S_L_MMR6_ENC : POOL32F_CVT_DS_FM<"cvt.s.l", 2, 0b1101101>;
@@ -744,12 +732,6 @@ class MTC2_MMR6_DESC : MTC2_MMR6_DESC_BASE<"mtc2", COP2Opnd, GPR32Opnd,
II_MTC2>;
class MTHC0_MMR6_DESC : MTC0_MMR6_DESC_BASE<"mthc0", COP0Opnd, GPR32Opnd,
II_MTHC0>;
-class MTHC1_D32_MMR6_DESC : MTC1_64_MMR6_DESC_BASE<"mthc1", AFGR64Opnd,
- GPR32Opnd, II_MTC1>,
- HARDFLOAT, FGR_32;
-class MTHC1_D64_MMR6_DESC : MTC1_64_MMR6_DESC_BASE<"mthc1", FGR64Opnd,
- GPR32Opnd, II_MTC1>,
- HARDFLOAT, FGR_64;
class MTHC2_MMR6_DESC : MTC2_MMR6_DESC_BASE<"mthc2", COP2Opnd, GPR32Opnd,
II_MTC2>;
@@ -793,10 +775,6 @@ class MFC2_MMR6_DESC : MFC2_MMR6_DESC_BASE<"mfc2", GPR32Opnd, COP2Opnd,
II_MFC2>;
class MFHC0_MMR6_DESC : MFC0_MMR6_DESC_BASE<"mfhc0", GPR32Opnd, COP0Opnd,
II_MFHC0>;
-class MFHC1_D32_MMR6_DESC : MFC1_MMR6_DESC_BASE<"mfhc1", GPR32Opnd, AFGR64Opnd,
- II_MFHC1>, HARDFLOAT, FGR_32;
-class MFHC1_D64_MMR6_DESC : MFC1_MMR6_DESC_BASE<"mfhc1", GPR32Opnd, FGR64Opnd,
- II_MFHC1>, HARDFLOAT, FGR_64;
class MFHC2_MMR6_DESC : MFC2_MMR6_DESC_BASE<"mfhc2", GPR32Opnd, COP2Opnd,
II_MFC2>;
@@ -865,20 +843,12 @@ class FARITH_MMR6_DESC_BASE<string instr_asm, RegisterOperand RC,
}
class FADD_S_MMR6_DESC
: FARITH_MMR6_DESC_BASE<"add.s", FGR32Opnd, II_ADD_S, 1, fadd>;
-class FADD_D_MMR6_DESC
- : FARITH_MMR6_DESC_BASE<"add.d", AFGR64Opnd, II_ADD_D, 1, fadd>;
class FSUB_S_MMR6_DESC
: FARITH_MMR6_DESC_BASE<"sub.s", FGR32Opnd, II_SUB_S, 0, fsub>;
-class FSUB_D_MMR6_DESC
- : FARITH_MMR6_DESC_BASE<"sub.d", AFGR64Opnd, II_SUB_D, 0, fsub>;
class FMUL_S_MMR6_DESC
: FARITH_MMR6_DESC_BASE<"mul.s", FGR32Opnd, II_MUL_S, 1, fmul>;
-class FMUL_D_MMR6_DESC
- : FARITH_MMR6_DESC_BASE<"mul.d", AFGR64Opnd, II_MUL_D, 1, fmul>;
class FDIV_S_MMR6_DESC
: FARITH_MMR6_DESC_BASE<"div.s", FGR32Opnd, II_DIV_S, 0, fdiv>;
-class FDIV_D_MMR6_DESC
- : FARITH_MMR6_DESC_BASE<"div.d", AFGR64Opnd, II_DIV_D, 0, fdiv>;
class MADDF_S_MMR6_DESC : COP1_4R_DESC_BASE<"maddf.s", FGR32Opnd,
II_MADDF_S>, HARDFLOAT;
class MADDF_D_MMR6_DESC : COP1_4R_DESC_BASE<"maddf.d", FGR64Opnd,
@@ -901,12 +871,8 @@ class FMOV_FNEG_MMR6_DESC_BASE<string instr_asm, RegisterOperand DstRC,
}
class FMOV_S_MMR6_DESC
: FMOV_FNEG_MMR6_DESC_BASE<"mov.s", FGR32Opnd, FGR32Opnd, II_MOV_S>;
-class FMOV_D_MMR6_DESC
- : FMOV_FNEG_MMR6_DESC_BASE<"mov.d", AFGR64Opnd, AFGR64Opnd, II_MOV_D>;
class FNEG_S_MMR6_DESC
: FMOV_FNEG_MMR6_DESC_BASE<"neg.s", FGR32Opnd, FGR32Opnd, II_NEG, fneg>;
-class FNEG_D_MMR6_DESC
- : FMOV_FNEG_MMR6_DESC_BASE<"neg.d", AFGR64Opnd, AFGR64Opnd, II_NEG, fneg>;
class MAX_S_MMR6_DESC : MAX_MIN_DESC_BASE<"max.s", FGR32Opnd, II_MAX_S>,
HARDFLOAT;
@@ -944,16 +910,8 @@ class CVT_L_D_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.l.d", FGR64Opnd, FGR64Opnd,
II_CVT>;
class CVT_W_S_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.w.s", FGR32Opnd, FGR32Opnd,
II_CVT>;
-class CVT_W_D_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.w.d", FGR32Opnd, AFGR64Opnd,
- II_CVT>;
-class CVT_D_S_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.d.s", FGR32Opnd, AFGR64Opnd,
- II_CVT>;
-class CVT_D_W_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.d.w", FGR32Opnd, AFGR64Opnd,
- II_CVT>;
class CVT_D_L_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.d.l", FGR64Opnd, FGR64Opnd,
II_CVT>, FGR_64;
-class CVT_S_D_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.s.d", AFGR64Opnd, FGR32Opnd,
- II_CVT>;
class CVT_S_W_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.s.w", FGR32Opnd, FGR32Opnd,
II_CVT>;
class CVT_S_L_MMR6_DESC : CVT_MMR6_DESC_BASE<"cvt.s.l", FGR64Opnd, FGR32Opnd,
@@ -1414,22 +1372,11 @@ def MTC0_MMR6 : StdMMR6Rel, MTC0_MMR6_ENC, MTC0_MMR6_DESC, ISA_MICROMIPS32R6;
def MTC1_MMR6 : StdMMR6Rel, MTC1_MMR6_DESC, MTC1_MMR6_ENC, ISA_MICROMIPS32R6;
def MTC2_MMR6 : StdMMR6Rel, MTC2_MMR6_ENC, MTC2_MMR6_DESC, ISA_MICROMIPS32R6;
def MTHC0_MMR6 : R6MMR6Rel, MTHC0_MMR6_ENC, MTHC0_MMR6_DESC, ISA_MICROMIPS32R6;
-def MTHC1_D32_MMR6 : StdMMR6Rel, MTHC1_D32_MMR6_DESC, MTHC1_MMR6_ENC, ISA_MICROMIPS32R6;
-let DecoderNamespace = "MicroMipsFP64" in {
- def MTHC1_D64_MMR6 : R6MMR6Rel, MTHC1_D64_MMR6_DESC, MTHC1_MMR6_ENC,
- ISA_MICROMIPS32R6;
-}
def MTHC2_MMR6 : StdMMR6Rel, MTHC2_MMR6_ENC, MTHC2_MMR6_DESC, ISA_MICROMIPS32R6;
def MFC0_MMR6 : StdMMR6Rel, MFC0_MMR6_ENC, MFC0_MMR6_DESC, ISA_MICROMIPS32R6;
def MFC1_MMR6 : StdMMR6Rel, MFC1_MMR6_DESC, MFC1_MMR6_ENC, ISA_MICROMIPS32R6;
def MFC2_MMR6 : StdMMR6Rel, MFC2_MMR6_ENC, MFC2_MMR6_DESC, ISA_MICROMIPS32R6;
def MFHC0_MMR6 : R6MMR6Rel, MFHC0_MMR6_ENC, MFHC0_MMR6_DESC, ISA_MICROMIPS32R6;
-def MFHC1_D32_MMR6 : StdMMR6Rel, MFHC1_D32_MMR6_DESC, MFHC1_MMR6_ENC,
- ISA_MICROMIPS32R6;
-let DecoderNamespace = "MicroMipsFP64" in {
- def MFHC1_D64_MMR6 : StdMMR6Rel, MFHC1_D64_MMR6_DESC, MFHC1_MMR6_ENC,
- ISA_MICROMIPS32R6;
-}
def MFHC2_MMR6 : StdMMR6Rel, MFHC2_MMR6_ENC, MFHC2_MMR6_DESC, ISA_MICROMIPS32R6;
def MOD_MMR6 : R6MMR6Rel, MOD_MMR6_DESC, MOD_MMR6_ENC, ISA_MICROMIPS32R6;
def MODU_MMR6 : R6MMR6Rel, MODU_MMR6_DESC, MODU_MMR6_ENC, ISA_MICROMIPS32R6;
@@ -1478,20 +1425,12 @@ let DecoderMethod = "DecodeMemMMImm16" in {
/// Floating Point Instructions
def FADD_S_MMR6 : StdMMR6Rel, FADD_S_MMR6_ENC, FADD_S_MMR6_DESC,
ISA_MICROMIPS32R6;
-def FADD_D_MMR6 : StdMMR6Rel, FADD_D_MMR6_ENC, FADD_D_MMR6_DESC,
- ISA_MICROMIPS32R6;
def FSUB_S_MMR6 : StdMMR6Rel, FSUB_S_MMR6_ENC, FSUB_S_MMR6_DESC,
ISA_MICROMIPS32R6;
-def FSUB_D_MMR6 : StdMMR6Rel, FSUB_D_MMR6_ENC, FSUB_D_MMR6_DESC,
- ISA_MICROMIPS32R6;
def FMUL_S_MMR6 : StdMMR6Rel, FMUL_S_MMR6_ENC, FMUL_S_MMR6_DESC,
ISA_MICROMIPS32R6;
-def FMUL_D_MMR6 : StdMMR6Rel, FMUL_D_MMR6_ENC, FMUL_D_MMR6_DESC,
- ISA_MICROMIPS32R6;
def FDIV_S_MMR6 : StdMMR6Rel, FDIV_S_MMR6_ENC, FDIV_S_MMR6_DESC,
ISA_MICROMIPS32R6;
-def FDIV_D_MMR6 : StdMMR6Rel, FDIV_D_MMR6_ENC, FDIV_D_MMR6_DESC,
- ISA_MICROMIPS32R6;
def MADDF_S_MMR6 : R6MMR6Rel, MADDF_S_MMR6_ENC, MADDF_S_MMR6_DESC,
ISA_MICROMIPS32R6;
def MADDF_D_MMR6 : R6MMR6Rel, MADDF_D_MMR6_ENC, MADDF_D_MMR6_DESC,
@@ -1502,12 +1441,8 @@ def MSUBF_D_MMR6 : R6MMR6Rel, MSUBF_D_MMR6_ENC, MSUBF_D_MMR6_DESC,
ISA_MICROMIPS32R6;
def FMOV_S_MMR6 : StdMMR6Rel, FMOV_S_MMR6_ENC, FMOV_S_MMR6_DESC,
ISA_MICROMIPS32R6;
-def FMOV_D_MMR6 : StdMMR6Rel, FMOV_D_MMR6_ENC, FMOV_D_MMR6_DESC,
- ISA_MICROMIPS32R6;
def FNEG_S_MMR6 : StdMMR6Rel, FNEG_S_MMR6_ENC, FNEG_S_MMR6_DESC,
ISA_MICROMIPS32R6;
-def FNEG_D_MMR6 : StdMMR6Rel, FNEG_D_MMR6_ENC, FNEG_D_MMR6_DESC,
- ISA_MICROMIPS32R6;
def MAX_S_MMR6 : R6MMR6Rel, MAX_S_MMR6_ENC, MAX_S_MMR6_DESC, ISA_MICROMIPS32R6;
def MAX_D_MMR6 : R6MMR6Rel, MAX_D_MMR6_ENC, MAX_D_MMR6_DESC, ISA_MICROMIPS32R6;
def MIN_S_MMR6 : R6MMR6Rel, MIN_S_MMR6_ENC, MIN_S_MMR6_DESC, ISA_MICROMIPS32R6;
@@ -1526,16 +1461,8 @@ def CVT_L_D_MMR6 : StdMMR6Rel, CVT_L_D_MMR6_ENC, CVT_L_D_MMR6_DESC,
ISA_MICROMIPS32R6;
def CVT_W_S_MMR6 : StdMMR6Rel, CVT_W_S_MMR6_ENC, CVT_W_S_MMR6_DESC,
ISA_MICROMIPS32R6;
-def CVT_W_D_MMR6 : StdMMR6Rel, CVT_W_D_MMR6_ENC, CVT_W_D_MMR6_DESC,
- ISA_MICROMIPS32R6;
-def CVT_D_S_MMR6 : StdMMR6Rel, CVT_D_S_MMR6_ENC, CVT_D_S_MMR6_DESC,
- ISA_MICROMIPS32R6;
-def CVT_D_W_MMR6 : StdMMR6Rel, CVT_D_W_MMR6_ENC, CVT_D_W_MMR6_DESC,
- ISA_MICROMIPS32R6;
def CVT_D_L_MMR6 : StdMMR6Rel, CVT_D_L_MMR6_ENC, CVT_D_L_MMR6_DESC,
ISA_MICROMIPS32R6;
-def CVT_S_D_MMR6 : StdMMR6Rel, CVT_S_D_MMR6_ENC, CVT_S_D_MMR6_DESC,
- ISA_MICROMIPS32R6;
def CVT_S_W_MMR6 : StdMMR6Rel, CVT_S_W_MMR6_ENC, CVT_S_W_MMR6_DESC,
ISA_MICROMIPS32R6;
def CVT_S_L_MMR6 : StdMMR6Rel, CVT_S_L_MMR6_ENC, CVT_S_L_MMR6_DESC,
diff --git a/llvm/lib/Target/Mips/MicroMipsInstrFPU.td b/llvm/lib/Target/Mips/MicroMipsInstrFPU.td
index ce1cf3013fd..ac805caca58 100644
--- a/llvm/lib/Target/Mips/MicroMipsInstrFPU.td
+++ b/llvm/lib/Target/Mips/MicroMipsInstrFPU.td
@@ -11,7 +11,18 @@
//
//===----------------------------------------------------------------------===//
-let isCodeGenOnly = 1 in {
+multiclass ADDS_MMM<string opstr, InstrItinClass Itin, bit IsComm,
+ SDPatternOperator OpNode = null_frag> {
+ def _D32_MM : MMRel, ADDS_FT<opstr, AFGR64Opnd, Itin, IsComm, OpNode>,
+ FGR_32 {
+ string DecoderNamespace = "MicroMips";
+ }
+ // FIXME: This needs to be part of the instruction mapping tables.
+ def _D64_MM : ADDS_FT<opstr, FGR64Opnd, Itin, IsComm, OpNode>, FGR_64 {
+ string DecoderNamespace = "MicroMipsFP64";
+ }
+}
+
def FADD_S_MM : MMRel, ADDS_FT<"add.s", FGR32Opnd, II_ADD_S, 1, fadd>,
ADDS_FM_MM<0, 0x30>, ISA_MICROMIPS;
def FDIV_S_MM : MMRel, ADDS_FT<"div.s", FGR32Opnd, II_DIV_S, 0, fdiv>,
@@ -21,15 +32,16 @@ def FMUL_S_MM : MMRel, ADDS_FT<"mul.s", FGR32Opnd, II_MUL_S, 1, fmul>,
def FSUB_S_MM : MMRel, ADDS_FT<"sub.s", FGR32Opnd, II_SUB_S, 0, fsub>,
ADDS_FM_MM<0, 0x70>, ISA_MICROMIPS;
-def FADD_MM : MMRel, ADDS_FT<"add.d", AFGR64Opnd, II_ADD_D, 1, fadd>,
- ADDS_FM_MM<1, 0x30>, ISA_MICROMIPS;
-def FDIV_MM : MMRel, ADDS_FT<"div.d", AFGR64Opnd, II_DIV_D, 0, fdiv>,
- ADDS_FM_MM<1, 0xf0>, ISA_MICROMIPS;
-def FMUL_MM : MMRel, ADDS_FT<"mul.d", AFGR64Opnd, II_MUL_D, 1, fmul>,
- ADDS_FM_MM<1, 0xb0>, ISA_MICROMIPS;
-def FSUB_MM : MMRel, ADDS_FT<"sub.d", AFGR64Opnd, II_SUB_D, 0, fsub>,
- ADDS_FM_MM<1, 0x70>, ISA_MICROMIPS;
+defm FADD : ADDS_MMM<"add.d", II_ADD_D, 1, fadd>,
+ ADDS_FM_MM<1, 0x30>, ISA_MICROMIPS;
+defm FDIV : ADDS_MMM<"div.d", II_DIV_D, 0, fdiv>,
+ ADDS_FM_MM<1, 0xf0>, ISA_MICROMIPS;
+defm FMUL : ADDS_MMM<"mul.d", II_MUL_D, 1, fmul>,
+ ADDS_FM_MM<1, 0xb0>, ISA_MICROMIPS;
+defm FSUB : ADDS_MMM<"sub.d", II_SUB_D, 0, fsub>,
+ ADDS_FM_MM<1, 0x70>, ISA_MICROMIPS;
+let isCodeGenOnly = 1 in {
def LWXC1_MM : MMRel, LWXC1_FT<"lwxc1", FGR32Opnd, II_LWXC1, load>,
LWXC1_FM_MM<0x48>, ISA_MICROMIPS32_NOT_MIPS32R6;
def SWXC1_MM : MMRel, SWXC1_FT<"swxc1", FGR32Opnd, II_SWXC1, store>,
@@ -76,8 +88,6 @@ def ROUND_W_S_MM : MMRel, StdMMR6Rel, ABSS_FT<"round.w.s", FGR32Opnd, FGR32Opnd,
def CEIL_W_MM : MMRel, ABSS_FT<"ceil.w.d", FGR32Opnd, AFGR64Opnd, II_CEIL>,
ROUND_W_FM_MM<1, 0x6c>, ISA_MICROMIPS, FGR_32;
-def CVT_W_MM : MMRel, ABSS_FT<"cvt.w.d", FGR32Opnd, AFGR64Opnd, II_CVT>,
- ROUND_W_FM_MM<1, 0x24>, ISA_MICROMIPS, FGR_32;
def FLOOR_W_MM : MMRel, ABSS_FT<"floor.w.d", FGR32Opnd, AFGR64Opnd, II_FLOOR>,
ROUND_W_FM_MM<1, 0x2c>, ISA_MICROMIPS, FGR_32;
def ROUND_W_MM : MMRel, StdMMR6Rel, ABSS_FT<"round.w.d", FGR32Opnd, AFGR64Opnd,
@@ -91,6 +101,14 @@ def CVT_L_D64_MM : MMRel, ABSS_FT<"cvt.l.d", FGR64Opnd, FGR64Opnd, II_CVT>,
ROUND_W_FM_MM<1, 0x4>, ISA_MICROMIPS, FGR_64;
}
+let DecoderNamespace = "MicroMips" in {
+ def CVT_W_D32_MM : MMRel, ABSS_FT<"cvt.w.d", FGR32Opnd, AFGR64Opnd, II_CVT>,
+ ROUND_W_FM_MM<1, 0x24>, ISA_MICROMIPS, FGR_32;
+}
+let DecoderNamespace = "MicroMipsFP64" in {
+ def CVT_W_D64_MM : ABSS_FT<"cvt.w.d", FGR32Opnd, FGR64Opnd, II_CVT>,
+ ROUND_W_FM_MM<1, 0x24>, ISA_MICROMIPS, FGR_64;
+}
multiclass ABSS_MMM<string opstr, InstrItinClass Itin,
SDPatternOperator OpNode = null_frag> {
@@ -113,26 +131,39 @@ let DecoderNamespace = "MicroMips" in {
ABS_FM_MM<0, 0xd>, ISA_MICROMIPS;
}
-let isCodeGenOnly = 1 in {
def FMOV_S_MM : MMRel, ABSS_FT<"mov.s", FGR32Opnd, FGR32Opnd, II_MOV_S>,
ABS_FM_MM<0, 0x1>, ISA_MICROMIPS;
def FNEG_S_MM : MMRel, ABSS_FT<"neg.s", FGR32Opnd, FGR32Opnd, II_NEG, fneg>,
ABS_FM_MM<0, 0x2d>, ISA_MICROMIPS;
-def CVT_D_S_MM : MMRel, ABSS_FT<"cvt.d.s", AFGR64Opnd, FGR32Opnd, II_CVT>,
- ABS_FM_MM<0, 0x4d>, ISA_MICROMIPS, FGR_32;
-def CVT_D32_W_MM : MMRel, ABSS_FT<"cvt.d.w", AFGR64Opnd, FGR32Opnd, II_CVT>,
- ABS_FM_MM<1, 0x4d>, ISA_MICROMIPS, FGR_32;
-def CVT_S_D32_MM : MMRel, ABSS_FT<"cvt.s.d", FGR32Opnd, AFGR64Opnd, II_CVT>,
- ABS_FM_MM<0, 0x6d>, ISA_MICROMIPS, FGR_32;
+
+let DecoderNamespace = "MicroMips" in {
+ def CVT_D32_S_MM : MMRel, ABSS_FT<"cvt.d.s", AFGR64Opnd, FGR32Opnd, II_CVT>,
+ ABS_FM_MM<0, 0x4d>, ISA_MICROMIPS, FGR_32;
+ def CVT_D32_W_MM : MMRel, ABSS_FT<"cvt.d.w", AFGR64Opnd, FGR32Opnd, II_CVT>,
+ ABS_FM_MM<1, 0x4d>, ISA_MICROMIPS, FGR_32;
+}
+
+let DecoderNamespace = "MicroMipsFP64" in {
+ def CVT_D64_S_MM : ABSS_FT<"cvt.d.s", FGR64Opnd, FGR32Opnd, II_CVT>,
+ ABS_FM_MM<0, 0x4d>, ISA_MICROMIPS, FGR_64;
+ def CVT_D64_W_MM : ABSS_FT<"cvt.d.w", FGR64Opnd, FGR32Opnd, II_CVT>,
+ ABS_FM_MM<1, 0x4d>, ISA_MICROMIPS, FGR_64;
+ def CVT_S_D64_MM : ABSS_FT<"cvt.s.d", FGR32Opnd, FGR64Opnd, II_CVT>,
+ ABS_FM_MM<0, 0x6d>, ISA_MICROMIPS, FGR_64;
+}
+
+let DecoderNamespace = "MicroMips" in {
+ def CVT_S_D32_MM : MMRel, ABSS_FT<"cvt.s.d", FGR32Opnd, AFGR64Opnd, II_CVT>,
+ ABS_FM_MM<0, 0x6d>, ISA_MICROMIPS, FGR_32;
+}
+
def CVT_S_W_MM : MMRel, ABSS_FT<"cvt.s.w", FGR32Opnd, FGR32Opnd, II_CVT>,
ABS_FM_MM<1, 0x6d>, ISA_MICROMIPS;
-def FNEG_MM : MMRel, ABSS_FT<"neg.d", AFGR64Opnd, AFGR64Opnd, II_NEG, fneg>,
- ABS_FM_MM<1, 0x2d>, ISA_MICROMIPS, FGR_32;
-
-def FMOV_D32_MM : MMRel, ABSS_FT<"mov.d", AFGR64Opnd, AFGR64Opnd, II_MOV_D>,
- ABS_FM_MM<1, 0x1>, ISA_MICROMIPS, FGR_32;
+defm FNEG : ABSS_MMM<"neg.d", II_NEG, fneg>, ABS_FM_MM<1, 0x2d>;
+defm FMOV : ABSS_MMM<"mov.d", II_MOV_D>, ABS_FM_MM<1, 0x1>;
+let isCodeGenOnly = 1 in {
def MOVZ_I_S_MM : MMRel, CMov_I_F_FT<"movz.s", GPR32Opnd, FGR32Opnd,
II_MOVZ_S>, CMov_I_F_FM_MM<0x78, 0>,
ISA_MICROMIPS32_NOT_MIPS32R6;
@@ -196,10 +227,20 @@ def FSQRT_S_MM : MMRel, ABSS_FT<"sqrt.s", FGR32Opnd, FGR32Opnd, II_SQRT_S,
fsqrt>, ROUND_W_FM_MM<0, 0x28>, ISA_MICROMIPS {
string DecoderNamespace = "MicroMips";
}
-def MTHC1_MM : MMRel, MTC1_64_FT<"mthc1", AFGR64Opnd, GPR32Opnd, II_MTHC1>,
- MFC1_FM_MM<0xe0>, ISA_MICROMIPS, FGR_32;
-def MFHC1_MM : MMRel, MFC1_FT<"mfhc1", GPR32Opnd, AFGR64Opnd, II_MFHC1>,
- MFC1_FM_MM<0xc0>, ISA_MICROMIPS, FGR_32;
+
+let DecoderNamespace = "MicroMips" in {
+ def MTHC1_D32_MM : MMRel, MTC1_64_FT<"mthc1", AFGR64Opnd, GPR32Opnd, II_MTHC1>,
+ MFC1_FM_MM<0xe0>, ISA_MICROMIPS, FGR_32;
+ def MFHC1_D32_MM : MMRel, MFC1_FT<"mfhc1", GPR32Opnd, AFGR64Opnd, II_MFHC1>,
+ MFC1_FM_MM<0xc0>, ISA_MICROMIPS, FGR_32;
+}
+
+let DecoderNamespace = "MicroMipsFP64" in {
+ def MTHC1_D64_MM : MTC1_64_FT<"mthc1", FGR64Opnd, GPR32Opnd, II_MTHC1>,
+ MFC1_FM_MM<0xe0>, ISA_MICROMIPS, FGR_64;
+ def MFHC1_D64_MM : MFC1_FT<"mfhc1", GPR32Opnd, FGR64Opnd, II_MFHC1>,
+ MFC1_FM_MM<0xc0>, ISA_MICROMIPS, FGR_64;
+}
let DecoderNamespace = "MicroMips" in {
def CFC1_MM : MMRel, MFC1_FT<"cfc1", GPR32Opnd, CCROpnd, II_CFC1>,
@@ -358,3 +399,12 @@ let AddedComplexity = 40 in {
def : LoadRegImmPat<LWC1_MM, f32, load>, ISA_MICROMIPS;
def : StoreRegImmPat<SWC1_MM, f32>, ISA_MICROMIPS;
}
+
+ def : MipsPat<(f32 (fpround FGR64Opnd:$src)),
+ (CVT_S_D64_MM FGR64Opnd:$src)>, ISA_MICROMIPS, FGR_64;
+ def : MipsPat<(f64 (fpextend FGR32Opnd:$src)),
+ (CVT_D64_S_MM FGR32Opnd:$src)>, ISA_MICROMIPS, FGR_64;
+ def : MipsPat<(f32 (fpround AFGR64Opnd:$src)),
+ (CVT_S_D32_MM AFGR64Opnd:$src)>, ISA_MICROMIPS, FGR_32;
+ def : MipsPat<(f64 (fpextend FGR32Opnd:$src)),
+ (CVT_D32_S_MM FGR32Opnd:$src)>, ISA_MICROMIPS, FGR_32;
diff --git a/llvm/lib/Target/Mips/MicroMipsInstrFormats.td b/llvm/lib/Target/Mips/MicroMipsInstrFormats.td
index aff8cca3020..0b2b1172ec4 100644
--- a/llvm/lib/Target/Mips/MicroMipsInstrFormats.td
+++ b/llvm/lib/Target/Mips/MicroMipsInstrFormats.td
@@ -730,7 +730,6 @@ class ADDS_FM_MM<bits<2> fmt, bits<8> funct> : MMArch {
let Inst{9-8} = fmt;
let Inst{7-0} = funct;
- list<dag> Pattern = [];
}
class LWXC1_FM_MM<bits<9> funct> : MMArch {
diff --git a/llvm/lib/Target/Mips/MipsISelLowering.cpp b/llvm/lib/Target/Mips/MipsISelLowering.cpp
index ba05b0f48df..427866d2bb0 100644
--- a/llvm/lib/Target/Mips/MipsISelLowering.cpp
+++ b/llvm/lib/Target/Mips/MipsISelLowering.cpp
@@ -108,6 +108,11 @@ static bool isShiftedMask(uint64_t I, uint64_t &Pos, uint64_t &Size) {
return true;
}
+void MipsTargetLowering::finalizeLowering(MachineFunction &MF) const {
+ MF.getFrameInfo().computeMaxCallFrameSize(MF);
+ TargetLoweringBase::finalizeLowering(MF);
+}
+
// The MIPS MSA ABI passes vector arguments in the integer register set.
// The number of integer registers used is dependant on the ABI used.
MVT MipsTargetLowering::getRegisterTypeForCallingConv(MVT VT) const {
diff --git a/llvm/lib/Target/Mips/MipsISelLowering.h b/llvm/lib/Target/Mips/MipsISelLowering.h
index ce4f0376ca9..80dfada2924 100644
--- a/llvm/lib/Target/Mips/MipsISelLowering.h
+++ b/llvm/lib/Target/Mips/MipsISelLowering.h
@@ -370,6 +370,8 @@ class TargetRegisterClass;
bool isJumpTableRelative() const override {
return getTargetMachine().isPositionIndependent();
}
+
+ void finalizeLowering(MachineFunction &MF) const override;
protected:
SDValue getGlobalReg(SelectionDAG &DAG, EVT Ty) const;
diff --git a/llvm/lib/Target/Mips/MipsInstrFPU.td b/llvm/lib/Target/Mips/MipsInstrFPU.td
index ee69a202536..23fa4566106 100644
--- a/llvm/lib/Target/Mips/MipsInstrFPU.td
+++ b/llvm/lib/Target/Mips/MipsInstrFPU.td
@@ -364,7 +364,9 @@ def CVT_W_S : MMRel, ABSS_FT<"cvt.w.s", FGR32Opnd, FGR32Opnd, II_CVT>,
defm TRUNC_W : ROUND_M<"trunc.w.d", II_TRUNC>, ABSS_FM<0xd, 17>, ISA_MIPS2;
defm CEIL_W : ROUND_M<"ceil.w.d", II_CEIL>, ABSS_FM<0xe, 17>, ISA_MIPS2;
defm FLOOR_W : ROUND_M<"floor.w.d", II_FLOOR>, ABSS_FM<0xf, 17>, ISA_MIPS2;
-defm CVT_W : ROUND_M<"cvt.w.d", II_CVT>, ABSS_FM<0x24, 17>;
+let AdditionalPredicates = [NotInMicroMips] in {
+ defm CVT_W : ROUND_M<"cvt.w.d", II_CVT>, ABSS_FM<0x24, 17>;
+}
let AdditionalPredicates = [NotInMicroMips] in {
def RECIP_S : MMRel, ABSS_FT<"recip.s", FGR32Opnd, FGR32Opnd, II_RECIP_S>,
@@ -418,24 +420,26 @@ let AdditionalPredicates = [NotInMicroMips] in{
ABSS_FM<0x25, 17>, INSN_MIPS3_32R2;
}
-def CVT_S_D32 : MMRel, ABSS_FT<"cvt.s.d", FGR32Opnd, AFGR64Opnd, II_CVT>,
- ABSS_FM<0x20, 17>, FGR_32;
+let AdditionalPredicates = [NotInMicroMips] in {
+ def CVT_S_D32 : MMRel, ABSS_FT<"cvt.s.d", FGR32Opnd, AFGR64Opnd, II_CVT>,
+ ABSS_FM<0x20, 17>, FGR_32;
+ def CVT_D32_S : MMRel, ABSS_FT<"cvt.d.s", AFGR64Opnd, FGR32Opnd, II_CVT>,
+ ABSS_FM<0x21, 16>, FGR_32;
+}
def CVT_D32_W : MMRel, ABSS_FT<"cvt.d.w", AFGR64Opnd, FGR32Opnd, II_CVT>,
ABSS_FM<0x21, 20>, FGR_32;
-def CVT_D32_S : MMRel, ABSS_FT<"cvt.d.s", AFGR64Opnd, FGR32Opnd, II_CVT>,
- ABSS_FM<0x21, 16>, FGR_32;
let DecoderNamespace = "MipsFP64" in {
- def CVT_S_D64 : ABSS_FT<"cvt.s.d", FGR32Opnd, FGR64Opnd, II_CVT>,
- ABSS_FM<0x20, 17>, FGR_64;
- let AdditionalPredicates = [NotInMicroMips] in{
+ let AdditionalPredicates = [NotInMicroMips] in {
def CVT_S_L : ABSS_FT<"cvt.s.l", FGR32Opnd, FGR64Opnd, II_CVT>,
ABSS_FM<0x20, 21>, FGR_64;
+ def CVT_S_D64 : ABSS_FT<"cvt.s.d", FGR32Opnd, FGR64Opnd, II_CVT>,
+ ABSS_FM<0x20, 17>, FGR_64;
+ def CVT_D64_W : ABSS_FT<"cvt.d.w", FGR64Opnd, FGR32Opnd, II_CVT>,
+ ABSS_FM<0x21, 20>, FGR_64;
+ def CVT_D64_S : ABSS_FT<"cvt.d.s", FGR64Opnd, FGR32Opnd, II_CVT>,
+ ABSS_FM<0x21, 16>, FGR_64;
}
- def CVT_D64_W : ABSS_FT<"cvt.d.w", FGR64Opnd, FGR32Opnd, II_CVT>,
- ABSS_FM<0x21, 20>, FGR_64;
- def CVT_D64_S : ABSS_FT<"cvt.d.s", FGR64Opnd, FGR32Opnd, II_CVT>,
- ABSS_FM<0x21, 16>, FGR_64;
def CVT_D64_L : ABSS_FT<"cvt.d.l", FGR64Opnd, FGR64Opnd, II_CVT>,
ABSS_FM<0x21, 21>, FGR_64;
}
@@ -456,7 +460,9 @@ let AdditionalPredicates = [NotInMicroMips] in {
def FNEG_S : MMRel, ABSS_FT<"neg.s", FGR32Opnd, FGR32Opnd, II_NEG, fneg>,
ABSS_FM<0x7, 16>;
-defm FNEG : ABSS_M<"neg.d", II_NEG, fneg>, ABSS_FM<0x7, 17>;
+let AdditionalPredicates = [NotInMicroMips] in {
+ defm FNEG : ABSS_M<"neg.d", II_NEG, fneg>, ABSS_FM<0x7, 17>;
+}
let AdditionalPredicates = [NotInMicroMips] in {
def FSQRT_S : MMRel, StdMMR6Rel, ABSS_FT<"sqrt.s", FGR32Opnd, FGR32Opnd,
@@ -508,15 +514,14 @@ let AdditionalPredicates = [NotInMicroMips] in {
bitconvert>, MFC1_FM<5>, ISA_MIPS3;
def DMFC1 : MFC1_FT<"dmfc1", GPR64Opnd, FGR64Opnd, II_DMFC1,
bitconvert>, MFC1_FM<1>, ISA_MIPS3;
-}
-
-def FMOV_S : MMRel, ABSS_FT<"mov.s", FGR32Opnd, FGR32Opnd, II_MOV_S>,
- ABSS_FM<0x6, 16>;
-def FMOV_D32 : MMRel, ABSS_FT<"mov.d", AFGR64Opnd, AFGR64Opnd, II_MOV_D>,
- ABSS_FM<0x6, 17>, FGR_32;
-def FMOV_D64 : ABSS_FT<"mov.d", FGR64Opnd, FGR64Opnd, II_MOV_D>,
- ABSS_FM<0x6, 17>, FGR_64 {
- let DecoderNamespace = "MipsFP64";
+ def FMOV_S : MMRel, ABSS_FT<"mov.s", FGR32Opnd, FGR32Opnd, II_MOV_S>,
+ ABSS_FM<0x6, 16>;
+ def FMOV_D32 : MMRel, ABSS_FT<"mov.d", AFGR64Opnd, AFGR64Opnd, II_MOV_D>,
+ ABSS_FM<0x6, 17>, FGR_32;
+ def FMOV_D64 : ABSS_FT<"mov.d", FGR64Opnd, FGR64Opnd, II_MOV_D>,
+ ABSS_FM<0x6, 17>, FGR_64 {
+ let DecoderNamespace = "MipsFP64";
+ }
}
/// Floating Point Memory Instructions
@@ -586,18 +591,20 @@ let DecoderNamespace="MipsFP64" in {
}
/// Floating-point Aritmetic
-def FADD_S : MMRel, ADDS_FT<"add.s", FGR32Opnd, II_ADD_S, 1, fadd>,
- ADDS_FM<0x00, 16>;
-defm FADD : ADDS_M<"add.d", II_ADD_D, 1, fadd>, ADDS_FM<0x00, 17>;
-def FDIV_S : MMRel, ADDS_FT<"div.s", FGR32Opnd, II_DIV_S, 0, fdiv>,
- ADDS_FM<0x03, 16>;
-defm FDIV : ADDS_M<"div.d", II_DIV_D, 0, fdiv>, ADDS_FM<0x03, 17>;
-def FMUL_S : MMRel, ADDS_FT<"mul.s", FGR32Opnd, II_MUL_S, 1, fmul>,
- ADDS_FM<0x02, 16>;
-defm FMUL : ADDS_M<"mul.d", II_MUL_D, 1, fmul>, ADDS_FM<0x02, 17>;
-def FSUB_S : MMRel, ADDS_FT<"sub.s", FGR32Opnd, II_SUB_S, 0, fsub>,
- ADDS_FM<0x01, 16>;
-defm FSUB : ADDS_M<"sub.d", II_SUB_D, 0, fsub>, ADDS_FM<0x01, 17>;
+let AdditionalPredicates = [NotInMicroMips] in {
+ def FADD_S : MMRel, ADDS_FT<"add.s", FGR32Opnd, II_ADD_S, 1, fadd>,
+ ADDS_FM<0x00, 16>;
+ defm FADD : ADDS_M<"add.d", II_ADD_D, 1, fadd>, ADDS_FM<0x00, 17>;
+ def FDIV_S : MMRel, ADDS_FT<"div.s", FGR32Opnd, II_DIV_S, 0, fdiv>,
+ ADDS_FM<0x03, 16>;
+ defm FDIV : ADDS_M<"div.d", II_DIV_D, 0, fdiv>, ADDS_FM<0x03, 17>;
+ def FMUL_S : MMRel, ADDS_FT<"mul.s", FGR32Opnd, II_MUL_S, 1, fmul>,
+ ADDS_FM<0x02, 16>;
+ defm FMUL : ADDS_M<"mul.d", II_MUL_D, 1, fmul>, ADDS_FM<0x02, 17>;
+ def FSUB_S : MMRel, ADDS_FT<"sub.s", FGR32Opnd, II_SUB_S, 0, fsub>,
+ ADDS_FM<0x01, 16>;
+ defm FSUB : ADDS_M<"sub.d", II_SUB_D, 0, fsub>, ADDS_FM<0x01, 17>;
+}
def MADD_S : MMRel, MADDS_FT<"madd.s", FGR32Opnd, II_MADD_S, fadd>,
MADDS_FM<4, 0>, INSN_MIPS4_32R2_NOT_32R6_64R6, MADD4;
@@ -861,10 +868,12 @@ def : MipsPat<(f64 (sint_to_fp GPR32Opnd:$src)),
(PseudoCVT_D32_W GPR32Opnd:$src)>, FGR_32;
def : MipsPat<(MipsTruncIntFP AFGR64Opnd:$src),
(TRUNC_W_D32 AFGR64Opnd:$src)>, FGR_32;
-def : MipsPat<(f32 (fpround AFGR64Opnd:$src)),
- (CVT_S_D32 AFGR64Opnd:$src)>, FGR_32;
-def : MipsPat<(f64 (fpextend FGR32Opnd:$src)),
- (CVT_D32_S FGR32Opnd:$src)>, FGR_32;
+let AdditionalPredicates = [NotInMicroMips] in {
+ def : MipsPat<(f32 (fpround AFGR64Opnd:$src)),
+ (CVT_S_D32 AFGR64Opnd:$src)>, FGR_32;
+ def : MipsPat<(f64 (fpextend FGR32Opnd:$src)),
+ (CVT_D32_S FGR32Opnd:$src)>, FGR_32;
+}
def : MipsPat<(f64 fpimm0), (DMTC1 ZERO_64)>, FGR_64;
def : MipsPat<(f64 fpimm0neg), (FNEG_D64 (DMTC1 ZERO_64))>, FGR_64;
@@ -883,10 +892,12 @@ def : MipsPat<(MipsTruncIntFP FGR32Opnd:$src),
def : MipsPat<(MipsTruncIntFP FGR64Opnd:$src),
(TRUNC_L_D64 FGR64Opnd:$src)>, FGR_64;
-def : MipsPat<(f32 (fpround FGR64Opnd:$src)),
- (CVT_S_D64 FGR64Opnd:$src)>, FGR_64;
-def : MipsPat<(f64 (fpextend FGR32Opnd:$src)),
- (CVT_D64_S FGR32Opnd:$src)>, FGR_64;
+let AdditionalPredicates = [NotInMicroMips] in {
+ def : MipsPat<(f32 (fpround FGR64Opnd:$src)),
+ (CVT_S_D64 FGR64Opnd:$src)>, FGR_64;
+ def : MipsPat<(f64 (fpextend FGR32Opnd:$src)),
+ (CVT_D64_S FGR32Opnd:$src)>, FGR_64;
+}
// To generate NMADD and NMSUB instructions when fneg node is present
multiclass NMADD_NMSUB<Instruction Nmadd, Instruction Nmsub, RegisterOperand RC> {
diff --git a/llvm/lib/Target/Mips/MipsRegisterInfo.cpp b/llvm/lib/Target/Mips/MipsRegisterInfo.cpp
index 0e0d82270c8..1f09ff1a6df 100644
--- a/llvm/lib/Target/Mips/MipsRegisterInfo.cpp
+++ b/llvm/lib/Target/Mips/MipsRegisterInfo.cpp
@@ -74,7 +74,9 @@ MipsRegisterInfo::getRegPressureLimit(const TargetRegisterClass *RC,
case Mips::GPR64RegClassID:
case Mips::DSPRRegClassID: {
const TargetFrameLowering *TFI = MF.getSubtarget().getFrameLowering();
- return 28 - TFI->hasFP(MF);
+ bool HasFP = MF.getFrameInfo().isMaxCallFrameSizeComputed()
+ ? TFI->hasFP(MF) : true;
+ return 28 - HasFP;
}
case Mips::FGR32RegClassID:
return 32;
diff --git a/llvm/lib/Target/Mips/MipsSEInstrInfo.cpp b/llvm/lib/Target/Mips/MipsSEInstrInfo.cpp
index 59b7679971c..e9c08b9465a 100644
--- a/llvm/lib/Target/Mips/MipsSEInstrInfo.cpp
+++ b/llvm/lib/Target/Mips/MipsSEInstrInfo.cpp
@@ -379,28 +379,30 @@ bool MipsSEInstrInfo::expandPostRAPseudo(MachineInstr &MI) const {
expandCvtFPInt(MBB, MI, Mips::CVT_S_W, Mips::MTC1, false);
break;
case Mips::PseudoCVT_D32_W:
- expandCvtFPInt(MBB, MI, Mips::CVT_D32_W, Mips::MTC1, false);
+ Opc = isMicroMips ? Mips::CVT_D32_W_MM : Mips::CVT_D32_W;
+ expandCvtFPInt(MBB, MI, Opc, Mips::MTC1, false);
break;
case Mips::PseudoCVT_S_L:
expandCvtFPInt(MBB, MI, Mips::CVT_S_L, Mips::DMTC1, true);
break;
case Mips::PseudoCVT_D64_W:
- expandCvtFPInt(MBB, MI, Mips::CVT_D64_W, Mips::MTC1, true);
+ Opc = isMicroMips ? Mips::CVT_D64_W_MM : Mips::CVT_D64_W;
+ expandCvtFPInt(MBB, MI, Opc, Mips::MTC1, true);
break;
case Mips::PseudoCVT_D64_L:
expandCvtFPInt(MBB, MI, Mips::CVT_D64_L, Mips::DMTC1, true);
break;
case Mips::BuildPairF64:
- expandBuildPairF64(MBB, MI, false);
+ expandBuildPairF64(MBB, MI, isMicroMips, false);
break;
case Mips::BuildPairF64_64:
- expandBuildPairF64(MBB, MI, true);
+ expandBuildPairF64(MBB, MI, isMicroMips, true);
break;
case Mips::ExtractElementF64:
- expandExtractElementF64(MBB, MI, false);
+ expandExtractElementF64(MBB, MI, isMicroMips, false);
break;
case Mips::ExtractElementF64_64:
- expandExtractElementF64(MBB, MI, true);
+ expandExtractElementF64(MBB, MI, isMicroMips, true);
break;
case Mips::MIPSeh_return32:
case Mips::MIPSeh_return64:
@@ -651,6 +653,7 @@ void MipsSEInstrInfo::expandCvtFPInt(MachineBasicBlock &MBB,
void MipsSEInstrInfo::expandExtractElementF64(MachineBasicBlock &MBB,
MachineBasicBlock::iterator I,
+ bool isMicroMips,
bool FP64) const {
unsigned DstReg = I->getOperand(0).getReg();
unsigned SrcReg = I->getOperand(1).getReg();
@@ -682,7 +685,10 @@ void MipsSEInstrInfo::expandExtractElementF64(MachineBasicBlock &MBB,
// We therefore pretend that it reads the bottom 32-bits to
// artificially create a dependency and prevent the scheduler
// changing the behaviour of the code.
- BuildMI(MBB, I, dl, get(FP64 ? Mips::MFHC1_D64 : Mips::MFHC1_D32), DstReg)
+ BuildMI(MBB, I, dl,
+ get(isMicroMips ? (FP64 ? Mips::MFHC1_D64_MM : Mips::MFHC1_D32_MM)
+ : (FP64 ? Mips::MFHC1_D64 : Mips::MFHC1_D32)),
+ DstReg)
.addReg(SrcReg);
} else
BuildMI(MBB, I, dl, get(Mips::MFC1), DstReg).addReg(SubReg);
@@ -690,7 +696,7 @@ void MipsSEInstrInfo::expandExtractElementF64(MachineBasicBlock &MBB,
void MipsSEInstrInfo::expandBuildPairF64(MachineBasicBlock &MBB,
MachineBasicBlock::iterator I,
- bool FP64) const {
+ bool isMicroMips, bool FP64) const {
unsigned DstReg = I->getOperand(0).getReg();
unsigned LoReg = I->getOperand(1).getReg(), HiReg = I->getOperand(2).getReg();
const MCInstrDesc& Mtc1Tdd = get(Mips::MTC1);
@@ -735,7 +741,10 @@ void MipsSEInstrInfo::expandBuildPairF64(MachineBasicBlock &MBB,
// We therefore pretend that it reads the bottom 32-bits to
// artificially create a dependency and prevent the scheduler
// changing the behaviour of the code.
- BuildMI(MBB, I, dl, get(FP64 ? Mips::MTHC1_D64 : Mips::MTHC1_D32), DstReg)
+ BuildMI(MBB, I, dl,
+ get(isMicroMips ? (FP64 ? Mips::MTHC1_D64_MM : Mips::MTHC1_D32_MM)
+ : (FP64 ? Mips::MTHC1_D64 : Mips::MTHC1_D32)),
+ DstReg)
.addReg(DstReg)
.addReg(HiReg);
} else if (Subtarget.isABI_FPXX())
diff --git a/llvm/lib/Target/Mips/MipsSEInstrInfo.h b/llvm/lib/Target/Mips/MipsSEInstrInfo.h
index b356909bf1c..6ef8d3ccc4c 100644
--- a/llvm/lib/Target/Mips/MipsSEInstrInfo.h
+++ b/llvm/lib/Target/Mips/MipsSEInstrInfo.h
@@ -107,9 +107,11 @@ private:
unsigned CvtOpc, unsigned MovOpc, bool IsI64) const;
void expandExtractElementF64(MachineBasicBlock &MBB,
- MachineBasicBlock::iterator I, bool FP64) const;
+ MachineBasicBlock::iterator I, bool isMicroMips,
+ bool FP64) const;
void expandBuildPairF64(MachineBasicBlock &MBB,
- MachineBasicBlock::iterator I, bool FP64) const;
+ MachineBasicBlock::iterator I, bool isMicroMips,
+ bool FP64) const;
void expandEhReturn(MachineBasicBlock &MBB,
MachineBasicBlock::iterator I) const;
};
diff --git a/llvm/test/CodeGen/Mips/llvm-ir/arith-fp.ll b/llvm/test/CodeGen/Mips/llvm-ir/arith-fp.ll
new file mode 100644
index 00000000000..33a86bbc5de
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/llvm-ir/arith-fp.ll
@@ -0,0 +1,55 @@
+; RUN: llc -march=mips -mcpu=mips32 -asm-show-inst < %s | FileCheck %s --check-prefix=MIPS32
+; RUN: llc -march=mips -mcpu=mips32r2 -mattr=+fp64 -asm-show-inst < %s | FileCheck %s --check-prefix=MIPS32FP64
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips -asm-show-inst < %s | FileCheck %s --check-prefix=MM
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips,+fp64 -asm-show-inst < %s | FileCheck %s --check-prefix=MMFP64
+; RUN: llc -march=mips -mcpu=mips32r6 -mattr=+micromips -asm-show-inst < %s | FileCheck %s --check-prefix=MMR6
+
+define double @add_d(double %a, double %b) {
+; MIPS32: add.d {{.*}} # <MCInst #{{[0-9]+}} FADD_D32
+; MIPS32FP64: add.d {{.*}} # <MCInst #{{[0-9]+}} FADD_D64
+; MM: add.d {{.*}} # <MCInst #{{[0-9]+}} FADD_D32_MM
+; MMFP64: add.d {{.*}} # <MCInst #{{[0-9]+}} FADD_D64_MM
+; MMR6: add.d {{.*}} # <MCInst #{{[0-9]+}} FADD_D64_MM
+ %1 = fadd double %a, %b
+ ret double %1
+}
+
+define double @sub_d(double %a, double %b) {
+; MIPS32: sub.d {{.*}} # <MCInst #{{[0-9]+}} FSUB_D32
+; MIPS32FP64: sub.d {{.*}} # <MCInst #{{[0-9]+}} FSUB_D64
+; MM: sub.d {{.*}} # <MCInst #{{[0-9]+}} FSUB_D32_MM
+; MMFP64: sub.d {{.*}} # <MCInst #{{[0-9]+}} FSUB_D64_MM
+; MMR6: sub.d {{.*}} # <MCInst #{{[0-9]+}} FSUB_D64_MM
+ %1 = fsub double %a, %b
+ ret double %1
+}
+
+define double @mul_d(double %a, double %b) {
+; MIPS32: mul.d {{.*}} # <MCInst #{{[0-9]+}} FMUL_D32
+; MIPS32FP64: mul.d {{.*}} # <MCInst #{{[0-9]+}} FMUL_D64
+; MM: mul.d {{.*}} # <MCInst #{{[0-9]+}} FMUL_D32_MM
+; MMFP64: mul.d {{.*}} # <MCInst #{{[0-9]+}} FMUL_D64_MM
+; MMR6: mul.d {{.*}} # <MCInst #{{[0-9]+}} FMUL_D64_MM
+ %1 = fmul double %a, %b
+ ret double %1
+}
+
+define double @div_d(double %a, double %b) {
+; MIPS32: div.d {{.*}} # <MCInst #{{[0-9]+}} FDIV_D32
+; MIPS32FP64: div.d {{.*}} # <MCInst #{{[0-9]+}} FDIV_D64
+; MM: div.d {{.*}} # <MCInst #{{[0-9]+}} FDIV_D32_MM
+; MMFP64: div.d {{.*}} # <MCInst #{{[0-9]+}} FDIV_D64_MM
+; MMR6: div.d {{.*}} # <MCInst #{{[0-9]+}} FDIV_D64_MM
+ %1 = fdiv double %a, %b
+ ret double %1
+}
+
+define double @fneg(double %a) {
+; MIPS32: neg.d {{.*}} # <MCInst #{{[0-9]+}} FNEG_D32
+; MIPS32FP64: neg.d {{.*}} # <MCInst #{{[0-9]+}} FNEG_D64
+; MM: neg.d {{.*}} # <MCInst #{{[0-9]+}} FNEG_D32_MM
+; MMFP64: neg.d {{.*}} # <MCInst #{{[0-9]+}} FNEG_D64_MM
+; MMR6: neg.d {{.*}} # <MCInst #{{[0-9]+}} FNEG_D64_MM
+ %1 = fsub double -0.000000e+00, %a
+ ret double %1
+}
diff --git a/llvm/test/CodeGen/Mips/llvm-ir/bitcast.ll b/llvm/test/CodeGen/Mips/llvm-ir/bitcast.ll
new file mode 100644
index 00000000000..6593103de8d
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/llvm-ir/bitcast.ll
@@ -0,0 +1,30 @@
+; RUN: llc -march=mips -mcpu=mips32r2 -asm-show-inst \
+; RUN: -mno-ldc1-sdc1 < %s | FileCheck %s --check-prefix=MIPS32R2
+; RUN: llc -march=mips -mcpu=mips32r2 -mattr=+fp64 -asm-show-inst \
+; RUN: -mno-ldc1-sdc1 < %s | FileCheck %s --check-prefix=MIPS32FP64
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips -asm-show-inst \
+; RUN: -mno-ldc1-sdc1 < %s | FileCheck %s --check-prefix=MM
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips,+fp64 -asm-show-inst \
+; RUN: -mno-ldc1-sdc1 < %s | FileCheck %s --check-prefix=MMFP64
+; RUN: llc -march=mips -mcpu=mips32r6 -mattr=+micromips -asm-show-inst \
+; RUN: -mno-ldc1-sdc1 < %s | FileCheck %s --check-prefix=MMR6
+
+define double @mthc1(i64 %a) {
+; MIPS32R2: mthc1 {{.*}} # <MCInst #{{[0-9]+}} MTHC1_D32
+; MIPS32FP64: mthc1 {{.*}} # <MCInst #{{[0-9]+}} MTHC1_D64
+; MM: mthc1 {{.*}} # <MCInst #{{[0-9]+}} MTHC1_D32_MM
+; MMFP64: mthc1 {{.*}} # <MCInst #{{[0-9]+}} MTHC1_D64_MM
+; MMR6: mthc1 {{.*}} # <MCInst #{{[0-9]+}} MTHC1_D64_MM
+ %1 = bitcast i64 %a to double
+ ret double %1
+}
+
+define i64 @mfhc1(double %a) {
+; MIPS32R2: mfhc1 {{.*}} # <MCInst #{{[0-9]+}} MFHC1_D32
+; MIPS32FP64: mfhc1 {{.*}} # <MCInst #{{[0-9]+}} MFHC1_D64
+; MM: mfhc1 {{.*}} # <MCInst #{{[0-9]+}} MFHC1_D32_MM
+; MMFP64: mfhc1 {{.*}} # <MCInst #{{[0-9]+}} MFHC1_D64_MM
+; MMR6: mfhc1 {{.*}} # <MCInst #{{[0-9]+}} MFHC1_D64_MM
+ %1 = bitcast double %a to i64
+ ret i64 %1
+}
diff --git a/llvm/test/CodeGen/Mips/llvm-ir/cvt.ll b/llvm/test/CodeGen/Mips/llvm-ir/cvt.ll
new file mode 100644
index 00000000000..04368f202fa
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/llvm-ir/cvt.ll
@@ -0,0 +1,37 @@
+; RUN: llc -march=mips -mcpu=mips32 -asm-show-inst < %s | FileCheck %s --check-prefix=MIPS32
+; RUN: llc -march=mips -mcpu=mips32r2 -mattr=+fp64 -asm-show-inst < %s | FileCheck %s --check-prefix=MIPS32FP64
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips -asm-show-inst < %s | FileCheck %s --check-prefix=MM
+; RUN: llc -march=mips -mcpu=mips32r3 -mattr=+micromips,+fp64 -asm-show-inst < %s | FileCheck %s --check-prefix=MMFP64
+; RUN: llc -march=mips -mcpu=mips32r6 -mattr=+micromips -asm-show-inst < %s | FileCheck %s --check-prefix=MMR6
+
+; TODO: Test for cvt_w_d is missing, could not generate instruction
+
+define double @cvt_d_s(float %a) {
+; MIPS32: cvt.d.s {{.*}} # <MCInst #{{[0-9]+}} CVT_D32_S
+; MIPS32FP64: cvt.d.s {{.*}} # <MCInst #{{[0-9]+}} CVT_D64_S
+; MM: cvt.d.s {{.*}} # <MCInst #{{[0-9]+}} CVT_D32_S_MM
+; MMFP64: cvt.d.s {{.*}} # <MCInst #{{[0-9]+}} CVT_D64_S_MM
+; MMR6: cvt.d.s {{.*}} # <MCInst #{{[0-9]+}} CVT_D64_S_MM
+ %1 = fpext float %a to double
+ ret double %1
+}
+
+define double @cvt_d_w(i32 %a) {
+; MIPS32: cvt.d.w {{.*}} # <MCInst #{{[0-9]+}} CVT_D32_W
+; MIPS32FP64: cvt.d.w {{.*}} # <MCInst #{{[0-9]+}} CVT_D64_W
+; MM: cvt.d.w {{.*}} # <MCInst #{{[0-9]+}} CVT_D32_W_MM
+; MMFP64: cvt.d.w {{.*}} # <MCInst #{{[0-9]+}} CVT_D64_W_MM
+; MMR6: cvt.d.w {{.*}} # <MCInst #{{[0-9]+}} CVT_D64_W_MM
+ %1 = sitofp i32 %a to double
+ ret double %1
+}
+
+define float @cvt_s_d(double %a) {
+; MIPS32: cvt.s.d {{.*}} # <MCInst #{{[0-9]+}} CVT_S_D32
+; MIPS32FP64: cvt.s.d {{.*}} # <MCInst #{{[0-9]+}} CVT_S_D64
+; MM: cvt.s.d {{.*}} # <MCInst #{{[0-9]+}} CVT_S_D32_MM
+; MMFP64: cvt.s.d {{.*}} # <MCInst #{{[0-9]+}} CVT_S_D64_MM
+; MMR6: cvt.s.d {{.*}} # <MCInst #{{[0-9]+}} CVT_S_D64_MM
+ %1 = fptrunc double %a to float
+ ret float %1
+}
diff --git a/llvm/test/CodeGen/Mips/maxcallframesize.ll b/llvm/test/CodeGen/Mips/maxcallframesize.ll
new file mode 100644
index 00000000000..a980467eb29
--- /dev/null
+++ b/llvm/test/CodeGen/Mips/maxcallframesize.ll
@@ -0,0 +1,17 @@
+; RUN: llc < %s -mtriple=mips-unknown-linux -stop-before=prologepilog | FileCheck %s
+
+; Test that maxCallFrameSize is being computed early on.
+
+@glob = external global i32*
+
+declare void @bar(i32*, [20000 x i8]* byval)
+
+define void @foo([20000 x i8]* %addr) {
+ %tmp = alloca [4 x i32], align 32
+ %tmp0 = getelementptr [4 x i32], [4 x i32]* %tmp, i32 0, i32 0
+ call void @bar(i32* %tmp0, [20000 x i8]* byval %addr)
+ ret void
+}
+
+; CHECK: adjustsStack: true
+; CHECK: maxCallFrameSize: 20008
diff --git a/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-el.txt b/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-el.txt
index c9e8179f642..0d3836d0a03 100644
--- a/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-el.txt
+++ b/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-el.txt
@@ -208,3 +208,15 @@
0x0c 0x54 0x7b 0x03 # CHECK: abs.s $f0, $f12
0x0c 0x54 0x3b 0x4a # CHECK: sqrt.d $f0, $f12
0x0c 0x54 0x7b 0x23 # CHECK: abs.d $f0, $f12
+0x80 0x54 0x3b 0x38 # CHECK: mthc1 $4, $f0
+0x80 0x54 0x3b 0x30 # CHECK: mfhc1 $4, $f0
+0x82 0x54 0x30 0x01 # CHECK: add.d $f0, $f2, $f4
+0x82 0x54 0x70 0x01 # CHECK: sub.d $f0, $f2, $f4
+0x82 0x54 0xb0 0x01 # CHECK: mul.d $f0, $f2, $f4
+0x82 0x54 0xf0 0x01 # CHECK: div.d $f0, $f2, $f4
+0x02 0x54 0x7b 0x20 # CHECK: mov.d $f0, $f2
+0x02 0x54 0x7b 0x2b # CHECK: neg.d $f0, $f2
+0x02 0x54 0x3b 0x49 # CHECK: cvt.w.d $f0, $f2
+0x02 0x54 0x7b 0x13 # CHECK: cvt.d.s $f0, $f2
+0x02 0x54 0x7b 0x33 # CHECK: cvt.d.w $f0, $f2
+0x02 0x54 0x7b 0x1b # CHECK: cvt.s.d $f0, $f2
diff --git a/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64-el.txt b/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64-el.txt
index 65525acee13..babbd3e082b 100644
--- a/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64-el.txt
+++ b/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64-el.txt
@@ -5,3 +5,15 @@
0x0c 0x54 0x7b 0x03 # CHECK: abs.s $f0, $f12
0x0c 0x54 0x3b 0x4a # CHECK: sqrt.d $f0, $f12
0x0c 0x54 0x7b 0x23 # CHECK: abs.d $f0, $f12
+0x80 0x54 0x3b 0x38 # CHECK: mthc1 $4, $f0
+0x80 0x54 0x3b 0x30 # CHECK: mfhc1 $4, $f0
+0x82 0x54 0x30 0x01 # CHECK: add.d $f0, $f2, $f4
+0x82 0x54 0x70 0x01 # CHECK: sub.d $f0, $f2, $f4
+0x82 0x54 0xb0 0x01 # CHECK: mul.d $f0, $f2, $f4
+0x82 0x54 0xf0 0x01 # CHECK: div.d $f0, $f2, $f4
+0x02 0x54 0x7b 0x20 # CHECK: mov.d $f0, $f2
+0x02 0x54 0x7b 0x2b # CHECK: neg.d $f0, $f2
+0x02 0x54 0x3b 0x49 # CHECK: cvt.w.d $f0, $f2
+0x02 0x54 0x7b 0x13 # CHECK: cvt.d.s $f0, $f2
+0x02 0x54 0x7b 0x33 # CHECK: cvt.d.w $f0, $f2
+0x02 0x54 0x7b 0x1b # CHECK: cvt.s.d $f0, $f2
diff --git a/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64.txt b/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64.txt
index cd2265838c8..6a8866c1919 100644
--- a/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64.txt
+++ b/llvm/test/MC/Disassembler/Mips/micromips32r3/valid-fp64.txt
@@ -5,3 +5,15 @@
0x54 0x0c 0x03 0x7b # CHECK: abs.s $f0, $f12
0x54 0x0c 0x4a 0x3b # CHECK: sqrt.d $f0, $f12
0x54 0x0c 0x23 0x7b # CHECK: abs.d $f0, $f12
+0x54 0x80 0x38 0x3b # CHECK: mthc1 $4, $f0
+0x54 0x80 0x30 0x3b # CHECK: mfhc1 $4, $f0
+0x54 0x82 0x01 0x30 # CHECK: add.d $f0, $f2, $f4
+0x54 0x82 0x01 0x70 # CHECK: sub.d $f0, $f2, $f4
+0x54 0x82 0x01 0xb0 # CHECK: mul.d $f0, $f2, $f4
+0x54 0x82 0x01 0xf0 # CHECK: div.d $f0, $f2, $f4
+0x54 0x02 0x20 0x7b # CHECK: mov.d $f0, $f2
+0x54 0x02 0x2b 0x7b # CHECK: neg.d $f0, $f2
+0x54 0x02 0x49 0x3b # CHECK: cvt.w.d $f0, $f2
+0x54 0x02 0x13 0x7b # CHECK: cvt.d.s $f0, $f2
+0x54 0x02 0x33 0x7b # CHECK: cvt.d.w $f0, $f2
+0x54 0x02 0x1b 0x7b # CHECK: cvt.s.d $f0, $f2
diff --git a/llvm/test/MC/Disassembler/Mips/micromips32r3/valid.txt b/llvm/test/MC/Disassembler/Mips/micromips32r3/valid.txt
index 560647bf2bf..14c1625f336 100644
--- a/llvm/test/MC/Disassembler/Mips/micromips32r3/valid.txt
+++ b/llvm/test/MC/Disassembler/Mips/micromips32r3/valid.txt
@@ -212,3 +212,15 @@
0x54 0x0c 0x03 0x7b # CHECK: abs.s $f0, $f12
0x54 0x0c 0x4a 0x3b # CHECK: sqrt.d $f0, $f12
0x54 0x0c 0x23 0x7b # CHECK: abs.d $f0, $f12
+0x54 0x80 0x38 0x3b # CHECK: mthc1 $4, $f0
+0x54 0x80 0x30 0x3b # CHECK: mfhc1 $4, $f0
+0x54 0x82 0x01 0x30 # CHECK: add.d $f0, $f2, $f4
+0x54 0x82 0x01 0x70 # CHECK: sub.d $f0, $f2, $f4
+0x54 0x82 0x01 0xb0 # CHECK: mul.d $f0, $f2, $f4
+0x54 0x82 0x01 0xf0 # CHECK: div.d $f0, $f2, $f4
+0x54 0x02 0x20 0x7b # CHECK: mov.d $f0, $f2
+0x54 0x02 0x2b 0x7b # CHECK: neg.d $f0, $f2
+0x54 0x02 0x49 0x3b # CHECK: cvt.w.d $f0, $f2
+0x54 0x02 0x13 0x7b # CHECK: cvt.d.s $f0, $f2
+0x54 0x02 0x33 0x7b # CHECK: cvt.d.w $f0, $f2
+0x54 0x02 0x1b 0x7b # CHECK: cvt.s.d $f0, $f2
diff --git a/llvm/test/MC/Disassembler/Mips/mips32/valid-fp64-el.txt b/llvm/test/MC/Disassembler/Mips/mips32/valid-fp64-el.txt
index 0e46c7245aa..c1b46f02d9a 100644
--- a/llvm/test/MC/Disassembler/Mips/mips32/valid-fp64-el.txt
+++ b/llvm/test/MC/Disassembler/Mips/mips32/valid-fp64-el.txt
@@ -5,3 +5,13 @@
0x05 0x60 0x00 0x46 # CHECK: abs.s $f0, $f12
0x04 0x60 0x20 0x46 # CHECK: sqrt.d $f0, $f12
0x05 0x60 0x20 0x46 # CHECK: abs.d $f0, $f12
+0x00 0x10 0x24 0x46 # CHECK: add.d $f0, $f2, $f4
+0x01 0x10 0x24 0x46 # CHECK: sub.d $f0, $f2, $f4
+0x02 0x10 0x24 0x46 # CHECK: mul.d $f0, $f2, $f4
+0x03 0x10 0x24 0x46 # CHECK: div.d $f0, $f2, $f4
+0x06 0x10 0x20 0x46 # CHECK: mov.d $f0, $f2
+0x07 0x10 0x20 0x46 # CHECK: neg.d $f0, $f2
+0x24 0x10 0x20 0x46 # CHECK: cvt.w.d $f0, $f2
+0x21 0x10 0x00 0x46 # CHECK: cvt.d.s $f0, $f2
+0x21 0x10 0x80 0x46 # CHECK: cvt.d.w $f0, $f2
+0x20 0x10 0x20 0x46 # CHECK: cvt.s.d $f0, $f2
diff --git a/llvm/test/MC/Disassembler/Mips/mips32/valid-fp64.txt b/llvm/test/MC/Disassembler/Mips/mips32/valid-fp64.txt
index 1c72fcabb09..08e7e54c4c0 100644
--- a/llvm/test/MC/Disassembler/Mips/mips32/valid-fp64.txt
+++ b/llvm/test/MC/Disassembler/Mips/mips32/valid-fp64.txt
@@ -5,3 +5,13 @@
0x46 0x00 0x60 0x05 # CHECK: abs.s $f0, $f12
0x46 0x20 0x60 0x04 # CHECK: sqrt.d $f0, $f12
0x46 0x20 0x60 0x05 # CHECK: abs.d $f0, $f12
+0x46 0x24 0x10 0x00 # CHECK: add.d $f0, $f2, $f4
+0x46 0x24 0x10 0x01 # CHECK: sub.d $f0, $f2, $f4
+0x46 0x24 0x10 0x02 # CHECK: mul.d $f0, $f2, $f4
+0x46 0x24 0x10 0x03 # CHECK: div.d $f0, $f2, $f4
+0x46 0x20 0x10 0x06 # CHECK: mov.d $f0, $f2
+0x46 0x20 0x10 0x07 # CHECK: neg.d $f0, $f2
+0x46 0x20 0x10 0x24 # CHECK: cvt.w.d $f0, $f2
+0x46 0x00 0x10 0x21 # CHECK: cvt.d.s $f0, $f2
+0x46 0x80 0x10 0x21 # CHECK: cvt.d.w $f0, $f2
+0x46 0x20 0x10 0x20 # CHECK: cvt.s.d $f0, $f2
diff --git a/llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64-el.txt b/llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64-el.txt
index 80eaa5b11f9..d1abea5801b 100644
--- a/llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64-el.txt
+++ b/llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64-el.txt
@@ -5,3 +5,15 @@
0x05 0x60 0x00 0x46 # CHECK: abs.s $f0, $f12
0x04 0x60 0x20 0x46 # CHECK: sqrt.d $f0, $f12
0x05 0x60 0x20 0x46 # CHECK: abs.d $f0, $f12
+0x00 0x10 0x24 0x46 # CHECK: add.d $f0, $f2, $f4
+0x01 0x10 0x24 0x46 # CHECK: sub.d $f0, $f2, $f4
+0x02 0x10 0x24 0x46 # CHECK: mul.d $f0, $f2, $f4
+0x03 0x10 0x24 0x46 # CHECK: div.d $f0, $f2, $f4
+0x06 0x10 0x20 0x46 # CHECK: mov.d $f0, $f2
+0x07 0x10 0x20 0x46 # CHECK: neg.d $f0, $f2
+0x24 0x10 0x20 0x46 # CHECK: cvt.w.d $f0, $f2
+0x21 0x10 0x00 0x46 # CHECK: cvt.d.s $f0, $f2
+0x21 0x10 0x80 0x46 # CHECK: cvt.d.w $f0, $f2
+0x20 0x10 0x20 0x46 # CHECK: cvt.s.d $f0, $f2
+0x00 0x00 0xe4 0x44 # CHECK: mthc1 $4, $f0
+0x00 0x00 0x64 0x44 # CHECK: mfhc1 $4, $f0
diff --git a/llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64.txt b/llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64.txt
index 56de5c78b36..e784e526d63 100644
--- a/llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64.txt
+++ b/llvm/test/MC/Disassembler/Mips/mips32r2/valid-fp64.txt
@@ -5,3 +5,15 @@
0x46 0x00 0x60 0x05 # CHECK: abs.s $f0, $f12
0x46 0x20 0x60 0x04 # CHECK: sqrt.d $f0, $f12
0x46 0x20 0x60 0x05 # CHECK: abs.d $f0, $f12
+0x46 0x24 0x10 0x00 # CHECK: add.d $f0, $f2, $f4
+0x46 0x24 0x10 0x01 # CHECK: sub.d $f0, $f2, $f4
+0x46 0x24 0x10 0x02 # CHECK: mul.d $f0, $f2, $f4
+0x46 0x24 0x10 0x03 # CHECK: div.d $f0, $f2, $f4
+0x46 0x20 0x10 0x06 # CHECK: mov.d $f0, $f2
+0x46 0x20 0x10 0x07 # CHECK: neg.d $f0, $f2
+0x46 0x20 0x10 0x24 # CHECK: cvt.w.d $f0, $f2
+0x46 0x00 0x10 0x21 # CHECK: cvt.d.s $f0, $f2
+0x46 0x80 0x10 0x21 # CHECK: cvt.d.w $f0, $f2
+0x46 0x20 0x10 0x20 # CHECK: cvt.s.d $f0, $f2
+0x44 0xe4 0x00 0x00 # CHECK: mthc1 $4, $f0
+0x44 0x64 0x00 0x00 # CHECK: mfhc1 $4, $f0
diff --git a/llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64-el.txt b/llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64-el.txt
index 15282ab50e0..d11e39f70ea 100644
--- a/llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64-el.txt
+++ b/llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64-el.txt
@@ -5,3 +5,15 @@
0x05 0x60 0x00 0x46 # CHECK: abs.s $f0, $f12
0x04 0x60 0x20 0x46 # CHECK: sqrt.d $f0, $f12
0x05 0x60 0x20 0x46 # CHECK: abs.d $f0, $f12
+0x00 0x10 0x24 0x46 # CHECK: add.d $f0, $f2, $f4
+0x01 0x10 0x24 0x46 # CHECK: sub.d $f0, $f2, $f4
+0x02 0x10 0x24 0x46 # CHECK: mul.d $f0, $f2, $f4
+0x03 0x10 0x24 0x46 # CHECK: div.d $f0, $f2, $f4
+0x06 0x10 0x20 0x46 # CHECK: mov.d $f0, $f2
+0x07 0x10 0x20 0x46 # CHECK: neg.d $f0, $f2
+0x24 0x10 0x20 0x46 # CHECK: cvt.w.d $f0, $f2
+0x21 0x10 0x00 0x46 # CHECK: cvt.d.s $f0, $f2
+0x21 0x10 0x80 0x46 # CHECK: cvt.d.w $f0, $f2
+0x20 0x10 0x20 0x46 # CHECK: cvt.s.d $f0, $f2
+0x00 0x00 0xe4 0x44 # CHECK: mthc1 $4, $f0
+0x00 0x00 0x64 0x44 # CHECK: mfhc1 $4, $f0
diff --git a/llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64.txt b/llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64.txt
index 5b9519ec23c..28404df6acf 100644
--- a/llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64.txt
+++ b/llvm/test/MC/Disassembler/Mips/mips32r3/valid-fp64.txt
@@ -5,3 +5,15 @@
0x46 0x00 0x60 0x05 # CHECK: abs.s $f0, $f12
0x46 0x20 0x60 0x04 # CHECK: sqrt.d $f0, $f12
0x46 0x20 0x60 0x05 # CHECK: abs.d $f0, $f12
+0x46 0x24 0x10 0x00 # CHECK: add.d $f0, $f2, $f4
+0x46 0x24 0x10 0x01 # CHECK: sub.d $f0, $f2, $f4
+0x46 0x24 0x10 0x02 # CHECK: mul.d $f0, $f2, $f4
+0x46 0x24 0x10 0x03 # CHECK: div.d $f0, $f2, $f4
+0x46 0x20 0x10 0x06 # CHECK: mov.d $f0, $f2
+0x46 0x20 0x10 0x07 # CHECK: neg.d $f0, $f2
+0x46 0x20 0x10 0x24 # CHECK: cvt.w.d $f0, $f2
+0x46 0x00 0x10 0x21 # CHECK: cvt.d.s $f0, $f2
+0x46 0x80 0x10 0x21 # CHECK: cvt.d.w $f0, $f2
+0x46 0x20 0x10 0x20 # CHECK: cvt.s.d $f0, $f2
+0x44 0xe4 0x00 0x00 # CHECK: mthc1 $4, $f0
+0x44 0x64 0x00 0x00 # CHECK: mfhc1 $4, $f0
diff --git a/llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64-el.txt b/llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64-el.txt
index 478a7f2c4cc..f2e52f02caa 100644
--- a/llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64-el.txt
+++ b/llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64-el.txt
@@ -5,3 +5,15 @@
0x05 0x60 0x00 0x46 # CHECK: abs.s $f0, $f12
0x04 0x60 0x20 0x46 # CHECK: sqrt.d $f0, $f12
0x05 0x60 0x20 0x46 # CHECK: abs.d $f0, $f12
+0x00 0x10 0x24 0x46 # CHECK: add.d $f0, $f2, $f4
+0x01 0x10 0x24 0x46 # CHECK: sub.d $f0, $f2, $f4
+0x02 0x10 0x24 0x46 # CHECK: mul.d $f0, $f2, $f4
+0x03 0x10 0x24 0x46 # CHECK: div.d $f0, $f2, $f4
+0x06 0x10 0x20 0x46 # CHECK: mov.d $f0, $f2
+0x07 0x10 0x20 0x46 # CHECK: neg.d $f0, $f2
+0x24 0x10 0x20 0x46 # CHECK: cvt.w.d $f0, $f2
+0x21 0x10 0x00 0x46 # CHECK: cvt.d.s $f0, $f2
+0x21 0x10 0x80 0x46 # CHECK: cvt.d.w $f0, $f2
+0x20 0x10 0x20 0x46 # CHECK: cvt.s.d $f0, $f2
+0x00 0x00 0xe4 0x44 # CHECK: mthc1 $4, $f0
+0x00 0x00 0x64 0x44 # CHECK: mfhc1 $4, $f0
diff --git a/llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64.txt b/llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64.txt
index 239dd4be7aa..1124b4dae87 100644
--- a/llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64.txt
+++ b/llvm/test/MC/Disassembler/Mips/mips32r5/valid-fp64.txt
@@ -5,3 +5,15 @@
0x46 0x00 0x60 0x05 # CHECK: abs.s $f0, $f12
0x46 0x20 0x60 0x04 # CHECK: sqrt.d $f0, $f12
0x46 0x20 0x60 0x05 # CHECK: abs.d $f0, $f12
+0x46 0x24 0x10 0x00 # CHECK: add.d $f0, $f2, $f4
+0x46 0x24 0x10 0x01 # CHECK: sub.d $f0, $f2, $f4
+0x46 0x24 0x10 0x02 # CHECK: mul.d $f0, $f2, $f4
+0x46 0x24 0x10 0x03 # CHECK: div.d $f0, $f2, $f4
+0x46 0x20 0x10 0x06 # CHECK: mov.d $f0, $f2
+0x46 0x20 0x10 0x07 # CHECK: neg.d $f0, $f2
+0x46 0x20 0x10 0x24 # CHECK: cvt.w.d $f0, $f2
+0x46 0x00 0x10 0x21 # CHECK: cvt.d.s $f0, $f2
+0x46 0x80 0x10 0x21 # CHECK: cvt.d.w $f0, $f2
+0x46 0x20 0x10 0x20 # CHECK: cvt.s.d $f0, $f2
+0x44 0xe4 0x00 0x00 # CHECK: mthc1 $4, $f0
+0x44 0x64 0x00 0x00 # CHECK: mfhc1 $4, $f0
diff --git a/llvm/test/MC/Mips/micromips/valid-fp64.s b/llvm/test/MC/Mips/micromips/valid-fp64.s
index dbf758cfb4d..24bf1b8ca45 100644
--- a/llvm/test/MC/Mips/micromips/valid-fp64.s
+++ b/llvm/test/MC/Mips/micromips/valid-fp64.s
@@ -1,11 +1,35 @@
# RUN: llvm-mc -arch=mips -mcpu=mips32r3 -mattr=+micromips,+fp64 -show-encoding -show-inst %s \
# RUN: | FileCheck %s
-abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x54,0x0c,0x03,0x7b]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S_MM
-abs.d $f0, $f12 # CHECK: abs.d $f0, $f12 # encoding: [0x54,0x0c,0x23,0x7b]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_D64_MM
-sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x54,0x0c,0x0a,0x3b]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_S_MM
-sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x54,0x0c,0x4a,0x3b]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D64_MM
+abs.d $f0, $f12 # CHECK: abs.d $f0, $f12 # encoding: [0x54,0x0c,0x23,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_D64_MM
+abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x54,0x0c,0x03,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S_MM
+add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x54,0x82,0x01,0x30]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FADD_D64_MM
+cvt.d.s $f0, $f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x54,0x02,0x13,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_S_MM
+cvt.d.w $f0, $f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x54,0x02,0x33,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_W_MM
+cvt.s.d $f0, $f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x54,0x02,0x1b,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_S_D64_MM
+cvt.w.d $f0, $f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x54,0x02,0x49,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_W_D64_MM
+div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x54,0x82,0x01,0xf0]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FDIV_D64_MM
+mfhc1 $4, $f0 # CHECK: mfhc1 $4, $f0 # encoding: [0x54,0x80,0x30,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MFHC1_D64_MM
+mov.d $f0, $f2 # CHECK: mov.d $f0, $f2 # encoding: [0x54,0x02,0x20,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMOV_D64_MM
+mthc1 $4, $f0 # CHECK: mthc1 $4, $f0 # encoding: [0x54,0x80,0x38,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MTHC1_D64_MM
+mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x54,0x82,0x01,0xb0]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMUL_D64_MM
+neg.d $f0, $f2 # CHECK: neg.d $f0, $f2 # encoding: [0x54,0x02,0x2b,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FNEG_D64_MM
+sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x54,0x0c,0x4a,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D64_MM
+sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x54,0x0c,0x0a,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_S_MM
+sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x54,0x82,0x01,0x70]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSUB_D64_MM
diff --git a/llvm/test/MC/Mips/micromips/valid.s b/llvm/test/MC/Mips/micromips/valid.s
index b30023f1660..d3c5d595a2a 100644
--- a/llvm/test/MC/Mips/micromips/valid.s
+++ b/llvm/test/MC/Mips/micromips/valid.s
@@ -58,6 +58,8 @@ sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x54,0x0c,0
sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x54,0x0c,0x4a,0x3b]
# CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D32_MM
add $9, $6, $7 # CHECK: add $9, $6, $7 # encoding: [0x00,0xe6,0x49,0x10]
+add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x54,0x82,0x01,0x30]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FADD_D32_MM
addi $9, $6, 17767 # CHECK: addi $9, $6, 17767 # encoding: [0x11,0x26,0x45,0x67]
addiu $9, $6, -15001 # CHECK: addiu $9, $6, -15001 # encoding: [0x31,0x26,0xc5,0x67]
addi $9, $6, 17767 # CHECK: addi $9, $6, 17767 # encoding: [0x11,0x26,0x45,0x67]
@@ -66,6 +68,8 @@ addu $9, $6, $7 # CHECK: addu $9, $6, $7 # encoding: [0x00,0x
sub $9, $6, $7 # CHECK: sub $9, $6, $7 # encoding: [0x00,0xe6,0x49,0x90]
subu $4, $3, $5 # CHECK: subu $4, $3, $5 # encoding: [0x00,0xa3,0x21,0xd0]
sub $6, $zero, $7 # CHECK: neg $6, $7 # encoding: [0x00,0xe0,0x31,0x90]
+sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x54,0x82,0x01,0x70]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSUB_D32_MM
subu $6, $zero, $7 # CHECK: subu $6, $zero, $7 # encoding: [0x00,0xe0,0x31,0xd0]
addu $7, $8, $zero # CHECK: addu $7, $8, $zero # encoding: [0x00,0x08,0x39,0x50]
slt $3, $3, $5 # CHECK: slt $3, $3, $5 # encoding: [0x00,0xa3,0x1b,0x50]
@@ -84,9 +88,13 @@ nor $9, $6, $7 # CHECK: nor $9, $6, $7 # encoding: [0x00,0x
not $7, $8 # CHECK: not $7, $8 # encoding: [0x00,0x08,0x3a,0xd0]
not $7 # CHECK: not $7, $7 # encoding: [0x00,0x07,0x3a,0xd0]
mul $9, $6, $7 # CHECK: mul $9, $6, $7 # encoding: [0x00,0xe6,0x4a,0x10]
+mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x54,0x82,0x01,0xb0]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMUL_D32_MM
mult $9, $7 # CHECK: mult $9, $7 # encoding: [0x00,0xe9,0x8b,0x3c]
multu $9, $7 # CHECK: multu $9, $7 # encoding: [0x00,0xe9,0x9b,0x3c]
div $zero, $9, $7 # CHECK: div $zero, $9, $7 # encoding: [0x00,0xe9,0xab,0x3c]
+div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x54,0x82,0x01,0xf0]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FDIV_D32_MM
divu $zero, $9, $7 # CHECK: divu $zero, $9, $7 # encoding: [0x00,0xe9,0xbb,0x3c]
sll $4, $3, 7 # CHECK: sll $4, $3, 7 # encoding: [0x00,0x83,0x38,0x00]
sllv $2, $3, $5 # CHECK: sllv $2, $3, $5 # encoding: [0x00,0x65,0x10,0x10]
@@ -111,6 +119,8 @@ lwl $4, 16($5) # CHECK: lwl $4, 16($5) # encoding: [0x60,0x
lwr $4, 16($5) # CHECK: lwr $4, 16($5) # encoding: [0x60,0x85,0x10,0x10]
swl $4, 16($5) # CHECK: swl $4, 16($5) # encoding: [0x60,0x85,0x80,0x10]
swr $4, 16($5) # CHECK: swr $4, 16($5) # encoding: [0x60,0x85,0x90,0x10]
+mov.d $f0, $f2 # CHECK: mov.d $f0, $f2 # encoding: [0x54,0x02,0x20,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMOV_D32_MM
movz $9, $6, $7 # CHECK: movz $9, $6, $7 # encoding: [0x00,0xe6,0x48,0x58]
movn $9, $6, $7 # CHECK: movn $9, $6, $7 # encoding: [0x00,0xe6,0x48,0x18]
movt $9, $6, $fcc0 # CHECK: movt $9, $6, $fcc0 # encoding: [0x55,0x26,0x09,0x7b]
@@ -121,10 +131,16 @@ mfhi $6 # CHECK: mfhi $6 # encoding: [0x46,0x
# FIXME: MTLO should also have its 16 bit implementation selected in micromips
mtlo $6 # CHECK: mtlo $6 # encoding: [0x00,0x06,0x3d,0x7c]
mflo $6 # CHECK: mflo $6 # encoding: [0x46,0x46]
+mfhc1 $4, $f0 # CHECK: mfhc1 $4, $f0 # encoding: [0x54,0x80,0x30,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MFHC1_D32_MM
+mthc1 $4, $f0 # CHECK: mthc1 $4, $f0 # encoding: [0x54,0x80,0x38,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MTHC1_D32_MM
madd $4, $5 # CHECK: madd $4, $5 # encoding: [0x00,0xa4,0xcb,0x3c]
maddu $4, $5 # CHECK: maddu $4, $5 # encoding: [0x00,0xa4,0xdb,0x3c]
msub $4, $5 # CHECK: msub $4, $5 # encoding: [0x00,0xa4,0xeb,0x3c]
msubu $4, $5 # CHECK: msubu $4, $5 # encoding: [0x00,0xa4,0xfb,0x3c]
+neg.d $f0, $f2 # CHECK: neg.d $f0, $f2 # encoding: [0x54,0x02,0x2b,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FNEG_D32_MM
clz $9, $6 # CHECK: clz $9, $6 # encoding: [0x01,0x26,0x5b,0x3c]
clo $9, $6 # CHECK: clo $9, $6 # encoding: [0x01,0x26,0x4b,0x3c]
seb $9, $6 # CHECK: seb $9, $6 # encoding: [0x01,0x26,0x2b,0x3c]
@@ -250,6 +266,14 @@ c.ult.d $fcc6, $f6, $f16 # CHECK: c.ult.d $fcc6, $f6, $f16 # encoding: [0x5
c.ult.s $fcc7, $f24, $f10 # CHECK: c.ult.s $fcc7, $f24, $f10 # encoding: [0x55,0x58,0xe1,0x7c]
c.un.d $fcc6, $f22, $f24 # CHECK: c.un.d $fcc6, $f22, $f24 # encoding: [0x57,0x16,0xc4,0x7c]
c.un.s $fcc1, $f30, $f4 # CHECK: c.un.s $fcc1, $f30, $f4 # encoding: [0x54,0x9e,0x20,0x7c]
+cvt.w.d $f0, $f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x54,0x02,0x49,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_W_D32_MM
+cvt.d.s $f0, $f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x54,0x02,0x13,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D32_S_MM
+cvt.d.w $f0, $f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x54,0x02,0x33,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D32_W_MM
+cvt.s.d $f0, $f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x54,0x02,0x1b,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_S_D32_MM
bc1t 8 # CHECK: bc1t 8 # encoding: [0x43,0xa0,0x00,0x04]
# CHECK-NEXT: # <MCInst #{{[0-9]+}} BC1T_MM
bc1f 16 # CHECK: bc1f 16 # encoding: [0x43,0x80,0x00,0x08]
diff --git a/llvm/test/MC/Mips/micromips32r6/valid.s b/llvm/test/MC/Mips/micromips32r6/valid.s
index 1a402983838..e64864f1d76 100644
--- a/llvm/test/MC/Mips/micromips32r6/valid.s
+++ b/llvm/test/MC/Mips/micromips32r6/valid.s
@@ -151,20 +151,26 @@
swe $5, 8($4) # CHECK: swe $5, 8($4) # encoding: [0x60,0xa4,0xae,0x08]
add.s $f3, $f4, $f5 # CHECK: add.s $f3, $f4, $f5 # encoding: [0x54,0xa4,0x18,0x30]
add.d $f2, $f4, $f6 # CHECK: add.d $f2, $f4, $f6 # encoding: [0x54,0xc4,0x11,0x30]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FADD_D64_MM
sub.s $f3, $f4, $f5 # CHECK: sub.s $f3, $f4, $f5 # encoding: [0x54,0xa4,0x18,0x70]
sub.d $f2, $f4, $f6 # CHECK: sub.d $f2, $f4, $f6 # encoding: [0x54,0xc4,0x11,0x70]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSUB_D64_MM
mul.s $f3, $f4, $f5 # CHECK: mul.s $f3, $f4, $f5 # encoding: [0x54,0xa4,0x18,0xb0]
mul.d $f2, $f4, $f6 # CHECK: mul.d $f2, $f4, $f6 # encoding: [0x54,0xc4,0x11,0xb0]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMUL_D64_MM
div.s $f3, $f4, $f5 # CHECK: div.s $f3, $f4, $f5 # encoding: [0x54,0xa4,0x18,0xf0]
div.d $f2, $f4, $f6 # CHECK: div.d $f2, $f4, $f6 # encoding: [0x54,0xc4,0x11,0xf0]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FDIV_D64_MM
maddf.s $f3, $f4, $f5 # CHECK: maddf.s $f3, $f4, $f5 # encoding: [0x54,0xa4,0x19,0xb8]
maddf.d $f3, $f4, $f5 # CHECK: maddf.d $f3, $f4, $f5 # encoding: [0x54,0xa4,0x1b,0xb8]
msubf.s $f3, $f4, $f5 # CHECK: msubf.s $f3, $f4, $f5 # encoding: [0x54,0xa4,0x19,0xf8]
msubf.d $f3, $f4, $f5 # CHECK: msubf.d $f3, $f4, $f5 # encoding: [0x54,0xa4,0x1b,0xf8]
mov.s $f6, $f7 # CHECK: mov.s $f6, $f7 # encoding: [0x54,0xc7,0x00,0x7b]
mov.d $f4, $f6 # CHECK: mov.d $f4, $f6 # encoding: [0x54,0x86,0x20,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMOV_D64_MM
neg.s $f6, $f7 # CHECK: neg.s $f6, $f7 # encoding: [0x54,0xc7,0x0b,0x7b]
- neg.d $f4, $f6 # CHECK: neg.d $f4, $f6 # encoding: [0x54,0x86,0x2b,0x7b]
+ neg.d $f0, $f2 # CHECK: neg.d $f0, $f2 # encoding: [0x54,0x02,0x2b,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FNEG_D64_MM
max.s $f5, $f4, $f3 # CHECK: max.s $f5, $f4, $f3 # encoding: [0x54,0x64,0x28,0x0b]
max.d $f5, $f4, $f3 # CHECK: max.d $f5, $f4, $f3 # encoding: [0x54,0x64,0x2a,0x0b]
maxa.s $f5, $f4, $f3 # CHECK: maxa.s $f5, $f4, $f3 # encoding: [0x54,0x64,0x28,0x2b]
@@ -209,10 +215,14 @@
cvt.l.d $f3, $f4 # CHECK: cvt.l.d $f3, $f4 # encoding: [0x54,0x64,0x41,0x3b]
cvt.w.s $f3, $f4 # CHECK: cvt.w.s $f3, $f4 # encoding: [0x54,0x64,0x09,0x3b]
cvt.w.d $f3, $f4 # CHECK: cvt.w.d $f3, $f4 # encoding: [0x54,0x64,0x49,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_W_D64_MM
cvt.d.s $f2, $f4 # CHECK: cvt.d.s $f2, $f4 # encoding: [0x54,0x44,0x13,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_S_MM
cvt.d.w $f2, $f4 # CHECK: cvt.d.w $f2, $f4 # encoding: [0x54,0x44,0x33,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_W_MM
cvt.d.l $f2, $f4 # CHECK: cvt.d.l $f2, $f4 # encoding: [0x54,0x44,0x53,0x7b]
cvt.s.d $f2, $f4 # CHECK: cvt.s.d $f2, $f4 # encoding: [0x54,0x44,0x1b,0x7b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_S_D64_MM
cvt.s.w $f3, $f4 # CHECK: cvt.s.w $f3, $f4 # encoding: [0x54,0x64,0x3b,0x7b]
cvt.s.l $f3, $f4 # CHECK: cvt.s.l $f3, $f4 # encoding: [0x54,0x64,0x5b,0x7b]
abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x54,0x0c,0x03,0x7b]
@@ -319,6 +329,7 @@
mthc0 $7, $8 # CHECK: mthc0 $7, $8, 0 # encoding: [0x00,0xe8,0x02,0xf4]
mthc0 $9, $10, 1 # CHECK: mthc0 $9, $10, 1 # encoding: [0x01,0x2a,0x0a,0xf4]
mthc1 $11, $f12 # CHECK: mthc1 $11, $f12 # encoding: [0x55,0x6c,0x38,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MTHC1_D64_MM
mthc2 $13, $14 # CHECK: mthc2 $13, $14 # encoding: [0x01,0xae,0x9d,0x3c]
mfc0 $3, $7 # CHECK: mfc0 $3, $7, 0 # encoding: [0x00,0x67,0x00,0xfc]
mfc0 $3, $7, 3 # CHECK: mfc0 $3, $7, 3 # encoding: [0x00,0x67,0x18,0xfc]
@@ -327,6 +338,7 @@
mfhc0 $20, $21 # CHECK: mfhc0 $20, $21, 0 # encoding: [0x02,0x95,0x00,0xf4]
mfhc0 $1, $2, 1 # CHECK: mfhc0 $1, $2, 1 # encoding: [0x00,0x22,0x08,0xf4]
mfhc1 $zero, $f6 # CHECK: mfhc1 $zero, $f6 # encoding: [0x54,0x06,0x30,0x3b]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MFHC1_D64_MM
mfhc2 $23, $16 # CHECK: mfhc2 $23, $16 # encoding: [0x02,0xf0,0x8d,0x3c]
tlbp # CHECK: tlbp # encoding: [0x00,0x00,0x03,0x7c]
tlbr # CHECK: tlbr # encoding: [0x00,0x00,0x13,0x7c]
diff --git a/llvm/test/MC/Mips/mips1/valid.s b/llvm/test/MC/Mips/mips1/valid.s
index bbd42e5ff2a..0de38beeaea 100644
--- a/llvm/test/MC/Mips/mips1/valid.s
+++ b/llvm/test/MC/Mips/mips1/valid.s
@@ -8,7 +8,8 @@ a:
abs.s $f0,$f12 # CHECK: abs.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x05]
# CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S
add $s7,$s2,$a1
- add.d $f1,$f7,$f29
+ add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #1067 FADD_D32
add.s $f8,$f21,$f24
addi $13,$9,26322
addi $8,$8,~1 # CHECK: addi $8, $8, -2 # encoding: [0x21,0x08,0xff,0xfe]
@@ -32,14 +33,19 @@ a:
c.sf.s $f14,$f22
cfc1 $s1,$21
ctc1 $a2,$26
- cvt.d.s $f22,$f28
- cvt.d.w $f26,$f11
- cvt.s.d $f26,$f8
+ cvt.d.s $f0,$f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #732 CVT_D32_S
+ cvt.d.w $f0,$f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #734 CVT_D32_W
+ cvt.s.d $f0,$f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #748 CVT_S_D32
cvt.s.w $f22,$f15
- cvt.w.d $f20,$f14
+ cvt.w.d $f0,$f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #757 CVT_W_D32
cvt.w.s $f20,$f24
div $zero,$25,$11
- div.d $f29,$f20,$f27
+ div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #1105 FDIV_D32
div.s $f4,$f5,$f15
divu $zero,$25,$15
ehb # CHECK: ehb # encoding: [0x00,0x00,0x00,0xc0]
@@ -65,7 +71,8 @@ a:
mfhi $s3
mfhi $sp
mflo $s1
- mov.d $f20,$f14
+ mov.d $f0,$f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #1160 FMOV_D32
mov.s $f2,$f27
move $s8,$a0 # CHECK: move $fp, $4 # encoding: [0x00,0x80,0xf0,0x25]
move $25,$a2 # CHECK: move $25, $6 # encoding: [0x00,0xc0,0xc8,0x25]
@@ -73,7 +80,8 @@ a:
mthi $s1
mtlo $sp
mtlo $25
- mul.d $f20,$f20,$f16
+ mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #1170 FMUL_D32
mul.s $f30,$f10,$f2
mult $sp,$s4
mult $sp,$v0
@@ -83,7 +91,8 @@ a:
neg $2, $3 # CHECK: neg $2, $3 # encoding: [0x00,0x03,0x10,0x22]
negu $2 # CHECK: negu $2, $2 # encoding: [0x00,0x02,0x10,0x23]
negu $2,$3 # CHECK: negu $2, $3 # encoding: [0x00,0x03,0x10,0x23]
- neg.d $f27,$f18
+ neg.d $f0,$f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #1178 FNEG_D32
neg.s $f1,$f15
nop
nor $a3,$zero,$a3
@@ -121,7 +130,8 @@ a:
sub $s6,$s3,$12
sub $22,$17,-3126 # CHECK: addi $22, $17, 3126 # encoding: [0x22,0x36,0x0c,0x36]
sub $13,6512 # CHECK: addi $13, $13, -6512 # encoding: [0x21,0xad,0xe6,0x90]
- sub.d $f18,$f3,$f17
+ sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #1213 FSUB_D32
sub.s $f23,$f22,$f22
subu $sp,$s6,$s6
sw $ra,-10160($sp)
diff --git a/llvm/test/MC/Mips/mips2/valid.s b/llvm/test/MC/Mips/mips2/valid.s
index 97143f97396..3115375b41b 100644
--- a/llvm/test/MC/Mips/mips2/valid.s
+++ b/llvm/test/MC/Mips/mips2/valid.s
@@ -10,7 +10,8 @@ a:
add $s7,$s2,$a1
add $9,$14,15176 # CHECK: addi $9, $14, 15176 # encoding: [0x21,0xc9,0x3b,0x48]
add $24,-7193 # CHECK: addi $24, $24, -7193 # encoding: [0x23,0x18,0xe3,0xe7]
- add.d $f1,$f7,$f29
+ add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #1067 FADD_D32
add.s $f8,$f21,$f24
addi $13,$9,26322
addi $8,$8,~1 # CHECK: addi $8, $8, -2 # encoding: [0x21,0x08,0xff,0xfe]
@@ -46,14 +47,19 @@ a:
ceil.w.s $f6,$f20
cfc1 $s1,$21
ctc1 $a2,$26
- cvt.d.s $f22,$f28
- cvt.d.w $f26,$f11
- cvt.s.d $f26,$f8
+ cvt.d.s $f0,$f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #732 CVT_D32_S
+ cvt.d.w $f0,$f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #734 CVT_D32_W
+ cvt.s.d $f0,$f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #748 CVT_S_D32
cvt.s.w $f22,$f15
- cvt.w.d $f20,$f14
+ cvt.w.d $f0,$f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #757 CVT_W_D32
cvt.w.s $f20,$f24
div $zero,$25,$11
- div.d $f29,$f20,$f27
+ div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #1105 FDIV_D32
div.s $f4,$f5,$f15
divu $zero,$25,$15
ehb # CHECK: ehb # encoding: [0x00,0x00,0x00,0xc0]
@@ -87,7 +93,8 @@ a:
mfhi $s3
mfhi $sp
mflo $s1
- mov.d $f20,$f14
+ mov.d $f0,$f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #1160 FMOV_D32
mov.s $f2,$f27
move $s8,$a0 # CHECK: move $fp, $4 # encoding: [0x00,0x80,0xf0,0x25]
move $25,$a2 # CHECK: move $25, $6 # encoding: [0x00,0xc0,0xc8,0x25]
@@ -95,7 +102,8 @@ a:
mthi $s1
mtlo $sp
mtlo $25
- mul.d $f20,$f20,$f16
+ mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #1170 FMUL_D32
mul.s $f30,$f10,$f2
mult $sp,$s4
mult $sp,$v0
@@ -105,7 +113,8 @@ a:
neg $2, $3 # CHECK: neg $2, $3 # encoding: [0x00,0x03,0x10,0x22]
negu $2 # CHECK: negu $2, $2 # encoding: [0x00,0x02,0x10,0x23]
negu $2,$3 # CHECK: negu $2, $3 # encoding: [0x00,0x03,0x10,0x23]
- neg.d $f27,$f18
+ neg.d $f0,$f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #1178 FNEG_D32
neg.s $f1,$f15
nop
nor $a3,$zero,$a3
@@ -155,7 +164,8 @@ a:
sub $s6,$s3,$12
sub $22,$17,-3126 # CHECK: addi $22, $17, 3126 # encoding: [0x22,0x36,0x0c,0x36]
sub $13,6512 # CHECK: addi $13, $13, -6512 # encoding: [0x21,0xad,0xe6,0x90]
- sub.d $f18,$f3,$f17
+ sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #1213 FSUB_D32
sub.s $f23,$f22,$f22
subu $sp,$s6,$s6
sw $ra,-10160($sp)
diff --git a/llvm/test/MC/Mips/mips32/valid.s b/llvm/test/MC/Mips/mips32/valid.s
index 2582ba751ce..0bd87e83308 100644
--- a/llvm/test/MC/Mips/mips32/valid.s
+++ b/llvm/test/MC/Mips/mips32/valid.s
@@ -10,7 +10,8 @@ a:
add $s7,$s2,$a1
add $9,$14,15176 # CHECK: addi $9, $14, 15176 # encoding: [0x21,0xc9,0x3b,0x48]
add $24,-7193 # CHECK: addi $24, $24, -7193 # encoding: [0x23,0x18,0xe3,0xe7]
- add.d $f1,$f7,$f29
+ add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #1067 FADD_D32
add.s $f8,$f21,$f24
addi $13,$9,26322
addi $8,$8,~1 # CHECK: addi $8, $8, -2 # encoding: [0x21,0x08,0xff,0xfe]
@@ -81,15 +82,20 @@ a:
clo $11,$a1 # CHECK: clo $11, $5 # encoding: [0x70,0xab,0x58,0x21]
clz $sp,$gp # CHECK: clz $sp, $gp # encoding: [0x73,0x9d,0xe8,0x20]
ctc1 $a2,$26
- cvt.d.s $f22,$f28
- cvt.d.w $f26,$f11
- cvt.s.d $f26,$f8
+ cvt.d.s $f0,$f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #732 CVT_D32_S
+ cvt.d.w $f0,$f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #734 CVT_D32_W
+ cvt.s.d $f0,$f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #748 CVT_S_D32
cvt.s.w $f22,$f15
- cvt.w.d $f20,$f14
+ cvt.w.d $f0,$f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #757 CVT_W_D32
cvt.w.s $f20,$f24
deret
div $zero,$25,$11
- div.d $f29,$f20,$f27
+ div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #1105 FDIV_D32
div.s $f4,$f5,$f15
divu $zero,$25,$15
ehb # CHECK: ehb # encoding: [0x00,0x00,0x00,0xc0]
@@ -127,7 +133,8 @@ a:
mfhi $s3
mfhi $sp
mflo $s1
- mov.d $f20,$f14
+ mov.d $f0,$f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #1160 FMOV_D32
mov.s $f2,$f27
move $s8,$a0 # CHECK: move $fp, $4 # encoding: [0x00,0x80,0xf0,0x25]
move $25,$a2 # CHECK: move $25, $6 # encoding: [0x00,0xc0,0xc8,0x25]
@@ -151,7 +158,8 @@ a:
mtlo $sp
mtlo $25
mul $s0,$s4,$at
- mul.d $f20,$f20,$f16
+ mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #1170 FMUL_D32
mul.s $f30,$f10,$f2
mult $sp,$s4
mult $sp,$v0
@@ -161,7 +169,8 @@ a:
neg $2, $3 # CHECK: neg $2, $3 # encoding: [0x00,0x03,0x10,0x22]
negu $2 # CHECK: negu $2, $2 # encoding: [0x00,0x02,0x10,0x23]
negu $2,$3 # CHECK: negu $2, $3 # encoding: [0x00,0x03,0x10,0x23]
- neg.d $f27,$f18
+ neg.d $f0,$f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #1178 FNEG_D32
neg.s $f1,$f15
nop
nor $a3,$zero,$a3
@@ -213,7 +222,8 @@ a:
sub $s6,$s3,$12
sub $22,$17,-3126 # CHECK: addi $22, $17, 3126 # encoding: [0x22,0x36,0x0c,0x36]
sub $13,6512 # CHECK: addi $13, $13, -6512 # encoding: [0x21,0xad,0xe6,0x90]
- sub.d $f18,$f3,$f17
+ sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #1213 FSUB_D32
sub.s $f23,$f22,$f22
subu $sp,$s6,$s6
sw $ra,-10160($sp)
diff --git a/llvm/test/MC/Mips/mips32r2/valid-fp64.s b/llvm/test/MC/Mips/mips32r2/valid-fp64.s
index bc06e418780..56b5ab85fab 100644
--- a/llvm/test/MC/Mips/mips32r2/valid-fp64.s
+++ b/llvm/test/MC/Mips/mips32r2/valid-fp64.s
@@ -1,11 +1,35 @@
# RUN: llvm-mc -arch=mips -mcpu=mips32r2 -mattr=+fp64 -show-encoding -show-inst %s | \
# RUN: FileCheck %s
-abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x05]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S
-abs.d $f0, $f12 # CHECK: abs.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x05]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_D64
-sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x04]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_S
-sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x04]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D64
+abs.d $f0, $f12 # CHECK: abs.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x05]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_D64
+abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x05]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S
+add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FADD_D64
+cvt.d.s $f0, $f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_S
+cvt.d.w $f0, $f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_W
+cvt.s.d $f0, $f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_S_D64
+cvt.w.d $f0, $f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_W_D64
+div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FDIV_D64
+mfhc1 $4, $f0 # CHECK: mfhc1 $4, $f0 # encoding: [0x44,0x64,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MFHC1_D64
+mov.d $f0, $f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMOV_D64
+mthc1 $4, $f0 # CHECK: mthc1 $4, $f0 # encoding: [0x44,0xe4,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MTHC1_D64
+mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMUL_D64
+neg.d $f0, $f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FNEG_D64
+sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x04]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D64
+sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x04]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_S
+sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSUB_D64
diff --git a/llvm/test/MC/Mips/mips32r2/valid.s b/llvm/test/MC/Mips/mips32r2/valid.s
index 2728897107a..27a26c72c47 100644
--- a/llvm/test/MC/Mips/mips32r2/valid.s
+++ b/llvm/test/MC/Mips/mips32r2/valid.s
@@ -10,7 +10,8 @@ a:
add $s7,$s2,$a1
add $9,$14,15176 # CHECK: addi $9, $14, 15176 # encoding: [0x21,0xc9,0x3b,0x48]
add $24,-7193 # CHECK: addi $24, $24, -7193 # encoding: [0x23,0x18,0xe3,0xe7]
- add.d $f1,$f7,$f29
+ add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #1067 FADD_D32
add.s $f8,$f21,$f24
addi $13,$9,26322
addi $8,$8,~1 # CHECK: addi $8, $8, -2 # encoding: [0x21,0x08,0xff,0xfe]
@@ -81,19 +82,24 @@ a:
clo $11,$a1 # CHECK: clo $11, $5 # encoding: [0x70,0xab,0x58,0x21]
clz $sp,$gp # CHECK: clz $sp, $gp # encoding: [0x73,0x9d,0xe8,0x20]
ctc1 $a2,$26
- cvt.d.s $f22,$f28
- cvt.d.w $f26,$f11
+ cvt.d.s $f0,$f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #732 CVT_D32_S
+ cvt.d.w $f0,$f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #734 CVT_D32_W
cvt.l.d $f24,$f15
cvt.l.s $f11,$f29
- cvt.s.d $f26,$f8
+ cvt.s.d $f0,$f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #748 CVT_S_D32
cvt.s.w $f22,$f15
- cvt.w.d $f20,$f14
+ cvt.w.d $f0,$f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #757 CVT_W_D32
cvt.w.s $f20,$f24
deret
di $s8 # CHECK: di $fp # encoding: [0x41,0x7e,0x60,0x00]
di # CHECK: di # encoding: [0x41,0x60,0x60,0x00]
div $zero,$25,$11
- div.d $f29,$f20,$f27
+ div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #1105 FDIV_D32
div.s $f4,$f5,$f15
divu $zero,$25,$15
ehb # CHECK: ehb # encoding: [0x00,0x00,0x00,0xc0]
@@ -138,11 +144,13 @@ a:
maddu $24,$s2
mfc0 $8,$15,1 # CHECK: mfc0 $8, $15, 1 # encoding: [0x40,0x08,0x78,0x01]
mfc1 $a3,$f27
- mfhc1 $s8,$f24
+ mfhc1 $4,$f0 # CHECK: mfhc1 $4, $f0 # encoding: [0x44,0x64,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #1559 MFHC1_D32
mfhi $s3
mfhi $sp
mflo $s1
- mov.d $f20,$f14
+ mov.d $f0,$f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #1160 FMOV_D32
mov.s $f2,$f27
move $s8,$a0 # CHECK: move $fp, $4 # encoding: [0x00,0x80,0xf0,0x25]
move $25,$a2 # CHECK: move $25, $6 # encoding: [0x00,0xc0,0xc8,0x25]
@@ -164,12 +172,14 @@ a:
msubu $15,$a1
mtc0 $9,$15,1 # CHECK: mtc0 $9, $15, 1 # encoding: [0x40,0x89,0x78,0x01]
mtc1 $s8,$f9
- mthc1 $zero,$f16
+ mthc1 $4,$f0 # CHECK: mthc1 $4, $f0 # encoding: [0x44,0xe4,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #1712 MTHC1_D32
mthi $s1
mtlo $sp
mtlo $25
mul $s0,$s4,$at
- mul.d $f20,$f20,$f16
+ mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #1170 FMUL_D32
mul.s $f30,$f10,$f2
mult $sp,$s4
mult $sp,$v0
@@ -179,7 +189,8 @@ a:
neg $2, $3 # CHECK: neg $2, $3 # encoding: [0x00,0x03,0x10,0x22]
negu $2 # CHECK: negu $2, $2 # encoding: [0x00,0x02,0x10,0x23]
negu $2,$3 # CHECK: negu $2, $3 # encoding: [0x00,0x03,0x10,0x23]
- neg.d $f27,$f18
+ neg.d $f0,$f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #1178 FNEG_D32
neg.s $f1,$f15
nmadd.d $f18,$f9,$f14,$f19
nmadd.s $f0,$f5,$f25,$f12
@@ -254,7 +265,8 @@ a:
sub $s6,$s3,$12
sub $22,$17,-3126 # CHECK: addi $22, $17, 3126 # encoding: [0x22,0x36,0x0c,0x36]
sub $13,6512 # CHECK: addi $13, $13, -6512 # encoding: [0x21,0xad,0xe6,0x90]
- sub.d $f18,$f3,$f17
+ sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #1213 FSUB_D32
sub.s $f23,$f22,$f22
subu $sp,$s6,$s6
suxc1 $f12,$k1($13)
diff --git a/llvm/test/MC/Mips/mips32r3/valid-fp64.s b/llvm/test/MC/Mips/mips32r3/valid-fp64.s
index dc285f0ba0e..c228ff645d8 100644
--- a/llvm/test/MC/Mips/mips32r3/valid-fp64.s
+++ b/llvm/test/MC/Mips/mips32r3/valid-fp64.s
@@ -1,11 +1,35 @@
# RUN: llvm-mc -arch=mips -mcpu=mips32r3 -mattr=+fp64 -show-encoding -show-inst %s | \
# RUN: FileCheck %s
-abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x05]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S
-abs.d $f0, $f12 # CHECK: abs.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x05]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_D64
-sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x04]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_S
-sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x04]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D64
+abs.d $f0, $f12 # CHECK: abs.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x05]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_D64
+abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x05]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S
+add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FADD_D64
+cvt.d.s $f0, $f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_S
+cvt.d.w $f0, $f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_W
+cvt.s.d $f0, $f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_S_D64
+cvt.w.d $f0, $f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_W_D64
+div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FDIV_D64
+mfhc1 $4, $f0 # CHECK: mfhc1 $4, $f0 # encoding: [0x44,0x64,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MFHC1_D64
+mov.d $f0, $f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMOV_D64
+mthc1 $4, $f0 # CHECK: mthc1 $4, $f0 # encoding: [0x44,0xe4,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MTHC1_D64
+mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMUL_D64
+neg.d $f0, $f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FNEG_D64
+sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x04]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D64
+sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x04]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_S
+sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSUB_D64
diff --git a/llvm/test/MC/Mips/mips32r3/valid.s b/llvm/test/MC/Mips/mips32r3/valid.s
index ed9b3ee0527..87fc266d964 100644
--- a/llvm/test/MC/Mips/mips32r3/valid.s
+++ b/llvm/test/MC/Mips/mips32r3/valid.s
@@ -10,7 +10,8 @@ a:
add $s7,$s2,$a1
add $9,$14,15176 # CHECK: addi $9, $14, 15176 # encoding: [0x21,0xc9,0x3b,0x48]
add $24,-7193 # CHECK: addi $24, $24, -7193 # encoding: [0x23,0x18,0xe3,0xe7]
- add.d $f1,$f7,$f29
+ add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #1067 FADD_D32
add.s $f8,$f21,$f24
addi $13,$9,26322
addi $8,$8,~1 # CHECK: addi $8, $8, -2 # encoding: [0x21,0x08,0xff,0xfe]
@@ -81,19 +82,24 @@ a:
clo $11,$a1 # CHECK: clo $11, $5 # encoding: [0x70,0xab,0x58,0x21]
clz $sp,$gp # CHECK: clz $sp, $gp # encoding: [0x73,0x9d,0xe8,0x20]
ctc1 $a2,$26
- cvt.d.s $f22,$f28
- cvt.d.w $f26,$f11
+ cvt.d.s $f0,$f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #732 CVT_D32_S
+ cvt.d.w $f0,$f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #734 CVT_D32_W
cvt.l.d $f24,$f15
cvt.l.s $f11,$f29
- cvt.s.d $f26,$f8
+ cvt.s.d $f0,$f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #748 CVT_S_D32
cvt.s.w $f22,$f15
- cvt.w.d $f20,$f14
+ cvt.w.d $f0,$f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #757 CVT_W_D32
cvt.w.s $f20,$f24
deret
di $s8 # CHECK: di $fp # encoding: [0x41,0x7e,0x60,0x00]
di # CHECK: di # encoding: [0x41,0x60,0x60,0x00]
div $zero,$25,$11
- div.d $f29,$f20,$f27
+ div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #1105 FDIV_D32
div.s $f4,$f5,$f15
divu $zero,$25,$15
ehb # CHECK: ehb # encoding: [0x00,0x00,0x00,0xc0]
@@ -138,11 +144,13 @@ a:
maddu $24,$s2
mfc0 $8,$15,1 # CHECK: mfc0 $8, $15, 1 # encoding: [0x40,0x08,0x78,0x01]
mfc1 $a3,$f27
- mfhc1 $s8,$f24
+ mfhc1 $4,$f0 # CHECK: mfhc1 $4, $f0 # encoding: [0x44,0x64,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #1559 MFHC1_D32
mfhi $s3
mfhi $sp
mflo $s1
- mov.d $f20,$f14
+ mov.d $f0,$f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #1160 FMOV_D32
mov.s $f2,$f27
move $s8,$a0 # CHECK: move $fp, $4 # encoding: [0x00,0x80,0xf0,0x25]
move $25,$a2 # CHECK: move $25, $6 # encoding: [0x00,0xc0,0xc8,0x25]
@@ -164,12 +172,14 @@ a:
msubu $15,$a1
mtc0 $9,$15,1 # CHECK: mtc0 $9, $15, 1 # encoding: [0x40,0x89,0x78,0x01]
mtc1 $s8,$f9
- mthc1 $zero,$f16
+ mthc1 $4,$f0 # CHECK: mthc1 $4, $f0 # encoding: [0x44,0xe4,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #1712 MTHC1_D32
mthi $s1
mtlo $sp
mtlo $25
mul $s0,$s4,$at
- mul.d $f20,$f20,$f16
+ mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #1170 FMUL_D32
mul.s $f30,$f10,$f2
mult $sp,$s4
mult $sp,$v0
@@ -179,7 +189,8 @@ a:
neg $2, $3 # CHECK: neg $2, $3 # encoding: [0x00,0x03,0x10,0x22]
negu $2 # CHECK: negu $2, $2 # encoding: [0x00,0x02,0x10,0x23]
negu $2,$3 # CHECK: negu $2, $3 # encoding: [0x00,0x03,0x10,0x23]
- neg.d $f27,$f18
+ neg.d $f0,$f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #1178 FNEG_D32
neg.s $f1,$f15
nmadd.d $f18,$f9,$f14,$f19
nmadd.s $f0,$f5,$f25,$f12
@@ -254,7 +265,8 @@ a:
sub $s6,$s3,$12
sub $22,$17,-3126 # CHECK: addi $22, $17, 3126 # encoding: [0x22,0x36,0x0c,0x36]
sub $13,6512 # CHECK: addi $13, $13, -6512 # encoding: [0x21,0xad,0xe6,0x90]
- sub.d $f18,$f3,$f17
+ sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #1213 FSUB_D32
sub.s $f23,$f22,$f22
subu $sp,$s6,$s6
suxc1 $f12,$k1($13)
diff --git a/llvm/test/MC/Mips/mips32r5/valid-fp64.s b/llvm/test/MC/Mips/mips32r5/valid-fp64.s
index f79a619ef78..a7d4a01ec10 100644
--- a/llvm/test/MC/Mips/mips32r5/valid-fp64.s
+++ b/llvm/test/MC/Mips/mips32r5/valid-fp64.s
@@ -1,11 +1,35 @@
# RUN: llvm-mc -arch=mips -mcpu=mips32r5 -mattr=+fp64 -show-encoding -show-inst %s | \
# RUN: FileCheck %s
-abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x05]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S
-abs.d $f0, $f12 # CHECK: abs.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x05]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_D64
-sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x04]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_S
-sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x04]
- # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D64
+abs.d $f0, $f12 # CHECK: abs.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x05]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_D64
+abs.s $f0, $f12 # CHECK: abs.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x05]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FABS_S
+add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FADD_D64
+cvt.d.s $f0, $f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_S
+cvt.d.w $f0, $f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_D64_W
+cvt.s.d $f0, $f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_S_D64
+cvt.w.d $f0, $f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} CVT_W_D64
+div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FDIV_D64
+mfhc1 $4, $f0 # CHECK: mfhc1 $4, $f0 # encoding: [0x44,0x64,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MFHC1_D64
+mov.d $f0, $f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMOV_D64
+mthc1 $4, $f0 # CHECK: mthc1 $4, $f0 # encoding: [0x44,0xe4,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} MTHC1_D64
+mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FMUL_D64
+neg.d $f0, $f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FNEG_D64
+sqrt.d $f0, $f12 # CHECK: sqrt.d $f0, $f12 # encoding: [0x46,0x20,0x60,0x04]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_D64
+sqrt.s $f0, $f12 # CHECK: sqrt.s $f0, $f12 # encoding: [0x46,0x00,0x60,0x04]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSQRT_S
+sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #{{[0-9]+}} FSUB_D64
diff --git a/llvm/test/MC/Mips/mips32r5/valid.s b/llvm/test/MC/Mips/mips32r5/valid.s
index ceb8c75e64d..5df06e8a914 100644
--- a/llvm/test/MC/Mips/mips32r5/valid.s
+++ b/llvm/test/MC/Mips/mips32r5/valid.s
@@ -10,7 +10,8 @@ a:
add $s7,$s2,$a1
add $9,$14,15176 # CHECK: addi $9, $14, 15176 # encoding: [0x21,0xc9,0x3b,0x48]
add $24,-7193 # CHECK: addi $24, $24, -7193 # encoding: [0x23,0x18,0xe3,0xe7]
- add.d $f1,$f7,$f29
+ add.d $f0, $f2, $f4 # CHECK: add.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x00]
+ # CHECK-NEXT: # <MCInst #1067 FADD_D32
add.s $f8,$f21,$f24
addi $13,$9,26322
addi $8,$8,~1 # CHECK: addi $8, $8, -2 # encoding: [0x21,0x08,0xff,0xfe]
@@ -81,19 +82,24 @@ a:
clo $11,$a1 # CHECK: clo $11, $5 # encoding: [0x70,0xab,0x58,0x21]
clz $sp,$gp # CHECK: clz $sp, $gp # encoding: [0x73,0x9d,0xe8,0x20]
ctc1 $a2,$26
- cvt.d.s $f22,$f28
- cvt.d.w $f26,$f11
+ cvt.d.s $f0,$f2 # CHECK: cvt.d.s $f0, $f2 # encoding: [0x46,0x00,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #732 CVT_D32_S
+ cvt.d.w $f0,$f2 # CHECK: cvt.d.w $f0, $f2 # encoding: [0x46,0x80,0x10,0x21]
+ # CHECK-NEXT: # <MCInst #734 CVT_D32_W
cvt.l.d $f24,$f15
cvt.l.s $f11,$f29
- cvt.s.d $f26,$f8
+ cvt.s.d $f0,$f2 # CHECK: cvt.s.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x20]
+ # CHECK-NEXT: # <MCInst #748 CVT_S_D32
cvt.s.w $f22,$f15
- cvt.w.d $f20,$f14
+ cvt.w.d $f0,$f2 # CHECK: cvt.w.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x24]
+ # CHECK-NEXT: # <MCInst #757 CVT_W_D32
cvt.w.s $f20,$f24
deret
di $s8 # CHECK: di $fp # encoding: [0x41,0x7e,0x60,0x00]
di # CHECK: di # encoding: [0x41,0x60,0x60,0x00]
div $zero,$25,$11
- div.d $f29,$f20,$f27
+ div.d $f0, $f2, $f4 # CHECK: div.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x03]
+ # CHECK-NEXT: # <MCInst #1105 FDIV_D32
div.s $f4,$f5,$f15
divu $zero,$25,$15
ehb # CHECK: ehb # encoding: [0x00,0x00,0x00,0xc0]
@@ -139,11 +145,13 @@ a:
maddu $24,$s2
mfc0 $8,$15,1 # CHECK: mfc0 $8, $15, 1 # encoding: [0x40,0x08,0x78,0x01]
mfc1 $a3,$f27
- mfhc1 $s8,$f24
+ mfhc1 $4,$f0 # CHECK: mfhc1 $4, $f0 # encoding: [0x44,0x64,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #1559 MFHC1_D32
mfhi $s3
mfhi $sp
mflo $s1
- mov.d $f20,$f14
+ mov.d $f0,$f2 # CHECK: mov.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x06]
+ # CHECK-NEXT: # <MCInst #1160 FMOV_D32
mov.s $f2,$f27
move $s8,$a0 # CHECK: move $fp, $4 # encoding: [0x00,0x80,0xf0,0x25]
move $25,$a2 # CHECK: move $25, $6 # encoding: [0x00,0xc0,0xc8,0x25]
@@ -165,12 +173,14 @@ a:
msubu $15,$a1
mtc0 $9,$15,1 # CHECK: mtc0 $9, $15, 1 # encoding: [0x40,0x89,0x78,0x01]
mtc1 $s8,$f9
- mthc1 $zero,$f16
+ mthc1 $4,$f0 # CHECK: mthc1 $4, $f0 # encoding: [0x44,0xe4,0x00,0x00]
+ # CHECK-NEXT: # <MCInst #1712 MTHC1_D32
mthi $s1
mtlo $sp
mtlo $25
mul $s0,$s4,$at
- mul.d $f20,$f20,$f16
+ mul.d $f0, $f2, $f4 # CHECK: mul.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x02]
+ # CHECK-NEXT: # <MCInst #1170 FMUL_D32
mul.s $f30,$f10,$f2
mult $sp,$s4
mult $sp,$v0
@@ -180,7 +190,8 @@ a:
neg $2, $3 # CHECK: neg $2, $3 # encoding: [0x00,0x03,0x10,0x22]
negu $2 # CHECK: negu $2, $2 # encoding: [0x00,0x02,0x10,0x23]
negu $2,$3 # CHECK: negu $2, $3 # encoding: [0x00,0x03,0x10,0x23]
- neg.d $f27,$f18
+ neg.d $f0,$f2 # CHECK: neg.d $f0, $f2 # encoding: [0x46,0x20,0x10,0x07]
+ # CHECK-NEXT: # <MCInst #1178 FNEG_D32
neg.s $f1,$f15
nmadd.d $f18,$f9,$f14,$f19
nmadd.s $f0,$f5,$f25,$f12
@@ -255,7 +266,8 @@ a:
sub $s6,$s3,$12
sub $22,$17,-3126 # CHECK: addi $22, $17, 3126 # encoding: [0x22,0x36,0x0c,0x36]
sub $13,6512 # CHECK: addi $13, $13, -6512 # encoding: [0x21,0xad,0xe6,0x90]
- sub.d $f18,$f3,$f17
+ sub.d $f0, $f2, $f4 # CHECK: sub.d $f0, $f2, $f4 # encoding: [0x46,0x24,0x10,0x01]
+ # CHECK-NEXT: # <MCInst #1213 FSUB_D32
sub.s $f23,$f22,$f22
subu $sp,$s6,$s6
suxc1 $f12,$k1($13)
OpenPOWER on IntegriCloud