diff options
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) |