Index: lib/Target/Mips/MipsInstrFPU.td =================================================================== --- lib/Target/Mips/MipsInstrFPU.td +++ lib/Target/Mips/MipsInstrFPU.td @@ -130,6 +130,15 @@ HARDFLOAT, NeverHasSideEffects; +class CVT_PS_S_FT : + InstSE<(outs DstRC:$fd), (ins SrcRC:$fs, SrcRC:$ft), + !strconcat(opstr, "\t$fd, $fs, $ft"), + [(set DstRC:$fd, (OpNode SrcRC:$fs, SrcRC:$ft))], Itin, FrmFR, opstr>, + HARDFLOAT { + let isCommutable = IsComm; +} + multiclass ABSS_M { def _D32 : MMRel, ABSS_FT, @@ -431,10 +440,57 @@ ABSS_FM<0x21, 16>, ISA_MIPS1, FGR_32; def CVT_D32_W : MMRel, ABSS_FT<"cvt.d.w", AFGR64Opnd, FGR32Opnd, II_CVT>, ABSS_FM<0x21, 20>, ISA_MIPS1, FGR_32; + def CVT_D32_L : ABSS_FT<"cvt.d.l", AFGR64Opnd, AFGR64Opnd, II_CVT>, + ABSS_FM<0x21, 21>, INSN_MIPS3_32R2, FGR_32; + def CVT_S_L32 : ABSS_FT<"cvt.s.l", FGR32Opnd, AFGR64Opnd, II_CVT>, + ABSS_FM<0x20, 21>, INSN_MIPS3_32R2, FGR_32; } + +let AdditionalPredicates = [NotInMicroMips] in { + def PLL_PS32 : ADDS_FT<"pll.ps", AFGR64Opnd, II_CVT, 0>, + ADDS_FM<0x2C, 22>, + INSN_MIPS3_32R2_NOT_64R6, FGR_32; + def PLU_PS32 : ADDS_FT<"plu.ps", AFGR64Opnd, II_CVT, 0>, + ADDS_FM<0x2D, 22>, + INSN_MIPS3_32R2_NOT_64R6, FGR_32; + + def CVT_S_PU32 : ABSS_FT<"cvt.s.pu", FGR32Opnd, AFGR64Opnd, II_CVT>, + ABSS_FM<0x20, 22>, + INSN_MIPS3_32R2_NOT_64R6, FGR_32; + def CVT_S_PL32 : ABSS_FT<"cvt.s.pl", FGR32Opnd, AFGR64Opnd, II_CVT>, + ABSS_FM<0x28, 22>, + INSN_MIPS3_32R2_NOT_64R6, FGR_32; + + def CVT_PS_S32 : CVT_PS_S_FT<"cvt.ps.s", AFGR64Opnd, FGR32Opnd, II_CVT, 0>, + ADDS_FM<0x26, 16>, + INSN_MIPS3_32R2_NOT_64R6, FGR_32; +} + +let DecoderNamespace = "MipsFP64" in { + let AdditionalPredicates = [NotInMicroMips] in { + def PLL_PS64 : ADDS_FT<"pll.ps", FGR64Opnd, II_CVT, 0>, + ADDS_FM<0x2C, 22>, + INSN_MIPS3_32R2_NOT_64R6, FGR_64; + def PLU_PS64 : ADDS_FT<"plu.ps", FGR64Opnd, II_CVT, 0>, + ADDS_FM<0x2D, 22>, + INSN_MIPS3_32R2_NOT_64R6, FGR_64; + + def CVT_S_PU64 : ABSS_FT<"cvt.s.pu", FGR32Opnd, FGR64Opnd, II_CVT>, + ABSS_FM<0x20, 22>, + INSN_MIPS3_32R2_NOT_64R6, FGR_64; + def CVT_S_PL64 : ABSS_FT<"cvt.s.pl", FGR32Opnd, FGR64Opnd, II_CVT>, + ABSS_FM<0x28, 22>, + INSN_MIPS3_32R2_NOT_64R6, FGR_64; + + def CVT_PS_S64 : CVT_PS_S_FT<"cvt.ps.s", FGR64Opnd, FGR32Opnd, II_CVT, 0>, + ADDS_FM<0x26, 16>, + INSN_MIPS3_32R2_NOT_64R6, FGR_64; + } +} + let DecoderNamespace = "MipsFP64" in { let AdditionalPredicates = [NotInMicroMips] in { - def CVT_S_L : ABSS_FT<"cvt.s.l", FGR32Opnd, FGR64Opnd, II_CVT>, + def CVT_S_L64 : ABSS_FT<"cvt.s.l", FGR32Opnd, FGR64Opnd, II_CVT>, ABSS_FM<0x20, 21>, INSN_MIPS3_32R2, FGR_64; def CVT_S_D64 : ABSS_FT<"cvt.s.d", FGR32Opnd, FGR64Opnd, II_CVT>, ABSS_FM<0x20, 17>, ISA_MIPS1, FGR_64; Index: lib/Target/Mips/MipsInstrInfo.td =================================================================== --- lib/Target/Mips/MipsInstrInfo.td +++ lib/Target/Mips/MipsInstrInfo.td @@ -397,6 +397,13 @@ list EncodingPredicates = [HasStdEnc]; } +// The portions of MIPS-III that were also added to MIPS32 but were removed in +// MIPS64r6. +class INSN_MIPS3_32R2_NOT_64R6 { + list InsnPredicates = [HasMips3_32r2, NotMips64r6]; + list EncodingPredicates = [HasStdEnc]; +} + // The portions of MIPS-IV that were also added to MIPS32. class INSN_MIPS4_32 { list InsnPredicates = [HasMips4_32]; Index: lib/Target/Mips/MipsSEInstrInfo.cpp =================================================================== --- lib/Target/Mips/MipsSEInstrInfo.cpp +++ lib/Target/Mips/MipsSEInstrInfo.cpp @@ -446,14 +446,20 @@ expandCvtFPInt(MBB, MI, Opc, Mips::MTC1, false); break; case Mips::PseudoCVT_S_L: - expandCvtFPInt(MBB, MI, Mips::CVT_S_L, Mips::DMTC1, true); + // if (64) + expandCvtFPInt(MBB, MI, Mips::CVT_S_L64, Mips::DMTC1, true); + // else + // expandCvtFPInt(MBB, MI, Mips::CVT_S_L32, Mips::DMTC1, true); break; case Mips::PseudoCVT_D64_W: Opc = isMicroMips ? Mips::CVT_D64_W_MM : Mips::CVT_D64_W; expandCvtFPInt(MBB, MI, Opc, Mips::MTC1, true); break; case Mips::PseudoCVT_D64_L: + // if (64) expandCvtFPInt(MBB, MI, Mips::CVT_D64_L, Mips::DMTC1, true); + // else + // expandCvtFPInt(MBB, MI, Mips::CVT_D32_L, Mips::DMTC1, true); break; case Mips::BuildPairF64: expandBuildPairF64(MBB, MI, isMicroMips, false); Index: lib/Target/Mips/MipsSchedule.td =================================================================== --- lib/Target/Mips/MipsSchedule.td +++ lib/Target/Mips/MipsSchedule.td @@ -292,6 +292,7 @@ def II_OR : InstrItinClass; def II_ORI : InstrItinClass; def II_POP : InstrItinClass; +def II_PL : InstrItinClass; def II_RDHWR : InstrItinClass; def II_RESTORE : InstrItinClass; def II_RECIP_S : InstrItinClass; @@ -606,6 +607,7 @@ InstrItinData]>, InstrItinData]>, InstrItinData]>, + InstrItinData]>, InstrItinData]>, InstrItinData]>, InstrItinData]>, Index: test/MC/Disassembler/Mips/mips3/valid-mips3-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips3/valid-mips3-el.txt +++ test/MC/Disassembler/Mips/mips3/valid-mips3-el.txt @@ -50,6 +50,11 @@ 0xa0 0x7d 0x80 0x46 # CHECK: cvt.s.w $f22, $f15 0x24 0x75 0x20 0x46 # CHECK: cvt.w.d $f20, $f14 0x24 0xc5 0x00 0x46 # CHECK: cvt.w.s $f20, $f24 +0xa0 0xd3 0xc0 0x46 # CHECK: cvt.s.pu $f14, $f26 +0xa6 0x90 0x14 0x46 # CHECK: cvt.ps.s $f2, $f18, $f20 +0xa8 0x17 0xc0 0x46 # CHECK: cvt.s.pl $f30, $f2 +0x2c 0x46 0xde 0x46 # CHECK: pll.ps $f24, $f8, $f30 +0x2d 0xd0 0xdc 0x46 # CHECK: plu.ps $f0, $f26, $f28 0x2c 0x98 0x3f 0x00 # CHECK: dadd $19, $1, $ra 0xc7 0x93 0x9d 0x62 # CHECK: daddi $sp, $20, -27705 0xc7 0x93 0xbd 0x63 # CHECK: daddi $sp, $sp, -27705 Index: test/MC/Disassembler/Mips/mips3/valid-mips3.txt =================================================================== --- test/MC/Disassembler/Mips/mips3/valid-mips3.txt +++ test/MC/Disassembler/Mips/mips3/valid-mips3.txt @@ -177,6 +177,11 @@ 0x46 0x20 0x75 0x24 # CHECK: cvt.w.d $f20, $f14 0x46 0x20 0x75 0x8d # CHECK: trunc.w.d $f22, $f14 0x46 0x20 0x7e 0x25 # CHECK: cvt.l.d $f24, $f15 +0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 +0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 +0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 +0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 +0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x46 0x20 0x96 0x87 # CHECK: neg.d $f26, $f18 0x46 0x20 0xb4 0x04 # CHECK: sqrt.d $f16, $f22 0x46 0x20 0xbd 0xc9 # CHECK: trunc.l.d $f23, $f23 Index: test/MC/Disassembler/Mips/mips32r2/valid-fp64-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r2/valid-fp64-el.txt +++ test/MC/Disassembler/Mips/mips32r2/valid-fp64-el.txt @@ -15,5 +15,12 @@ 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 +0x21 0x81 0xa0 0x46 # CHECK: cvt.d.l $f4, $f16 +0xe0 0xf3 0xa0 0x46 # CHECK: cvt.s.l $f15, $f30 +0xa0 0xd3 0xc0 0x46 # CHECK: cvt.s.pu $f14, $f26 +0xa6 0x90 0x14 0x46 # CHECK: cvt.ps.s $f2, $f18, $f20 +0xa8 0x17 0xc0 0x46 # CHECK: cvt.s.pl $f30, $f2 +0x2c 0x46 0xde 0x46 # CHECK: pll.ps $f24, $f8, $f30 +0x2d 0xd0 0xdc 0x46 # CHECK: plu.ps $f0, $f26, $f28 0x00 0x00 0xe4 0x44 # CHECK: mthc1 $4, $f0 0x00 0x00 0x64 0x44 # CHECK: mfhc1 $4, $f0 Index: test/MC/Disassembler/Mips/mips32r2/valid-fp64.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r2/valid-fp64.txt +++ test/MC/Disassembler/Mips/mips32r2/valid-fp64.txt @@ -15,5 +15,12 @@ 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 +0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 +0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 +0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 +0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 +0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 +0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 +0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x44 0xe4 0x00 0x00 # CHECK: mthc1 $4, $f0 0x44 0x64 0x00 0x00 # CHECK: mfhc1 $4, $f0 Index: test/MC/Disassembler/Mips/mips32r2/valid-mips32r2-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r2/valid-mips32r2-el.txt +++ test/MC/Disassembler/Mips/mips32r2/valid-mips32r2-el.txt @@ -71,6 +71,13 @@ 0xa0 0x39 0x80 0x46 # CHECK: cvt.s.w $f6, $f7 0x24 0x73 0x20 0x46 # CHECK: cvt.w.d $f12, $f14 0xa4 0x39 0x00 0x46 # CHECK: cvt.w.s $f6, $f7 +0x21 0x81 0xa0 0x46 # CHECK: cvt.d.l $f4, $f16 +0xe0 0xf3 0xa0 0x46 # CHECK: cvt.s.l $f15, $f30 +0xa0 0xd3 0xc0 0x46 # CHECK: cvt.s.pu $f14, $f26 +0xa6 0x90 0x14 0x46 # CHECK: cvt.ps.s $f2, $f18, $f20 +0xa8 0x17 0xc0 0x46 # CHECK: cvt.s.pl $f30, $f2 +0x2c 0x46 0xde 0x46 # CHECK: pll.ps $f24, $f8, $f30 +0x2d 0xd0 0xdc 0x46 # CHECK: plu.ps $f0, $f26, $f28 0x00 0x60 0x7e 0x41 # CHECK: di $fp 0x00 0x60 0x60 0x41 # CHECK: di 0x20 0x60 0x6e 0x41 # CHECK: ei $14 Index: test/MC/Disassembler/Mips/mips32r2/valid-mips32r2.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r2/valid-mips32r2.txt +++ test/MC/Disassembler/Mips/mips32r2/valid-mips32r2.txt @@ -198,6 +198,13 @@ 0x46 0x00 0x39 0xa1 # CHECK: cvt.d.s $f6, $f7 0x46 0x00 0x39 0xa4 # CHECK: cvt.w.s $f6, $f7 0x46 0x00 0x39 0xa5 # CHECK: cvt.l.s $f6, $f7 +0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 +0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 +0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 +0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 +0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 +0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 +0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x46 0x00 0x4a 0x0f # CHECK: floor.w.s $f8, $f9 0x46 0x00 0x78 0x47 # CHECK: neg.s $f1, $f15 0x46 0x00 0x82 0x45 # CHECK: abs.s $f9, $f16 Index: test/MC/Disassembler/Mips/mips32r2/valid-xfail-mips32r2.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r2/valid-xfail-mips32r2.txt +++ test/MC/Disassembler/Mips/mips32r2/valid-xfail-mips32r2.txt @@ -48,11 +48,6 @@ 0x46 0xda 0x14 0x31 # CHECK: c.un.ps $fcc4, $f2, $f26 0x46 0x20 0x20 0x8a # CHECK: ceil.l.d $f2, $f4 0x46 0x00 0x6c 0x8a # CHECK: ceil.l.s $f18, $f13 -0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 -0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 -0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 -0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 -0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 0x46 0x20 0x36 0x8b # CHECK: floor.l.d $f26, $f6 0x46 0x00 0x23 0x0b # CHECK: floor.l.s $f12, $f4 0x4c 0x42 0x75 0xa6 # CHECK: madd.ps $f22, $f2, $f14, $f2 @@ -65,8 +60,6 @@ 0x46 0xc0 0x64 0x87 # CHECK: neg.ps $f18, $f12 0x4c 0x98 0x46 0xb6 # CHECK: nmadd.ps $f26, $f4, $f8, $f24 0x4d 0x90 0x71 0xbe # CHECK: nmsub.ps $f6, $f12, $f14, $f16 -0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 -0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x46 0xda 0xf2 0x2e # CHECK: pul.ps $f8, $f30, $f26 0x46 0xc2 0x46 0x2f # CHECK: puu.ps $f24, $f8, $f2 0x41 0x49 0x98 0x00 # CHECK: rdpgpr s3, t1 Index: test/MC/Disassembler/Mips/mips32r3/valid-fp64-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r3/valid-fp64-el.txt +++ test/MC/Disassembler/Mips/mips32r3/valid-fp64-el.txt @@ -15,5 +15,12 @@ 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 +0x21 0x81 0xa0 0x46 # CHECK: cvt.d.l $f4, $f16 +0xe0 0xf3 0xa0 0x46 # CHECK: cvt.s.l $f15, $f30 +0xa0 0xd3 0xc0 0x46 # CHECK: cvt.s.pu $f14, $f26 +0xa6 0x90 0x14 0x46 # CHECK: cvt.ps.s $f2, $f18, $f20 +0xa8 0x17 0xc0 0x46 # CHECK: cvt.s.pl $f30, $f2 +0x2c 0x46 0xde 0x46 # CHECK: pll.ps $f24, $f8, $f30 +0x2d 0xd0 0xdc 0x46 # CHECK: plu.ps $f0, $f26, $f28 0x00 0x00 0xe4 0x44 # CHECK: mthc1 $4, $f0 0x00 0x00 0x64 0x44 # CHECK: mfhc1 $4, $f0 Index: test/MC/Disassembler/Mips/mips32r3/valid-fp64.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r3/valid-fp64.txt +++ test/MC/Disassembler/Mips/mips32r3/valid-fp64.txt @@ -15,5 +15,12 @@ 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 +0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 +0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 +0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 +0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 +0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 +0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 +0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x44 0xe4 0x00 0x00 # CHECK: mthc1 $4, $f0 0x44 0x64 0x00 0x00 # CHECK: mfhc1 $4, $f0 Index: test/MC/Disassembler/Mips/mips32r3/valid-mips32r3-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r3/valid-mips32r3-el.txt +++ test/MC/Disassembler/Mips/mips32r3/valid-mips32r3-el.txt @@ -68,6 +68,13 @@ 0xa0 0x39 0x80 0x46 # CHECK: cvt.s.w $f6, $f7 0x24 0x73 0x20 0x46 # CHECK: cvt.w.d $f12, $f14 0xa4 0x39 0x00 0x46 # CHECK: cvt.w.s $f6, $f7 +0x21 0x81 0xa0 0x46 # CHECK: cvt.d.l $f4, $f16 +0xe0 0xf3 0xa0 0x46 # CHECK: cvt.s.l $f15, $f30 +0xa0 0xd3 0xc0 0x46 # CHECK: cvt.s.pu $f14, $f26 +0xa6 0x90 0x14 0x46 # CHECK: cvt.ps.s $f2, $f18, $f20 +0xa8 0x17 0xc0 0x46 # CHECK: cvt.s.pl $f30, $f2 +0x2c 0x46 0xde 0x46 # CHECK: pll.ps $f24, $f8, $f30 +0x2d 0xd0 0xdc 0x46 # CHECK: plu.ps $f0, $f26, $f28 0x00 0x60 0x7e 0x41 # CHECK: di $fp 0x00 0x60 0x60 0x41 # CHECK: di 0x20 0x60 0x6e 0x41 # CHECK: ei $14 Index: test/MC/Disassembler/Mips/mips32r3/valid-mips32r3.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r3/valid-mips32r3.txt +++ test/MC/Disassembler/Mips/mips32r3/valid-mips32r3.txt @@ -195,6 +195,13 @@ 0x46 0x00 0x39 0xa1 # CHECK: cvt.d.s $f6, $f7 0x46 0x00 0x39 0xa4 # CHECK: cvt.w.s $f6, $f7 0x46 0x00 0x39 0xa5 # CHECK: cvt.l.s $f6, $f7 +0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 +0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 +0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 +0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 +0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 +0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 +0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x46 0x00 0x4a 0x0f # CHECK: floor.w.s $f8, $f9 0x46 0x00 0x78 0x47 # CHECK: neg.s $f1, $f15 0x46 0x00 0x82 0x45 # CHECK: abs.s $f9, $f16 Index: test/MC/Disassembler/Mips/mips32r3/valid-xfail-mips32r3.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r3/valid-xfail-mips32r3.txt +++ test/MC/Disassembler/Mips/mips32r3/valid-xfail-mips32r3.txt @@ -48,11 +48,6 @@ 0x46 0xda 0x14 0x31 # CHECK: c.un.ps $fcc4, $f2, $f26 0x46 0x20 0x20 0x8a # CHECK: ceil.l.d $f2, $f4 0x46 0x00 0x6c 0x8a # CHECK: ceil.l.s $f18, $f13 -0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 -0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 -0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 -0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 -0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 0x46 0x20 0x36 0x8b # CHECK: floor.l.d $f26, $f6 0x46 0x00 0x23 0x0b # CHECK: floor.l.s $f12, $f4 0x4c 0x42 0x75 0xa6 # CHECK: madd.ps $f22, $f2, $f14, $f2 @@ -65,8 +60,6 @@ 0x46 0xc0 0x64 0x87 # CHECK: neg.ps $f18, $f12 0x4c 0x98 0x46 0xb6 # CHECK: nmadd.ps $f26, $f4, $f8, $f24 0x4d 0x90 0x71 0xbe # CHECK: nmsub.ps $f6, $f12, $f14, $f16 -0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 -0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x46 0xda 0xf2 0x2e # CHECK: pul.ps $f8, $f30, $f26 0x46 0xc2 0x46 0x2f # CHECK: puu.ps $f24, $f8, $f2 0x41 0x49 0x98 0x00 # CHECK: rdpgpr s3, t1 Index: test/MC/Disassembler/Mips/mips32r5/valid-fp64-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r5/valid-fp64-el.txt +++ test/MC/Disassembler/Mips/mips32r5/valid-fp64-el.txt @@ -15,5 +15,12 @@ 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 +0x21 0x81 0xa0 0x46 # CHECK: cvt.d.l $f4, $f16 +0xe0 0xf3 0xa0 0x46 # CHECK: cvt.s.l $f15, $f30 +0xa0 0xd3 0xc0 0x46 # CHECK: cvt.s.pu $f14, $f26 +0xa6 0x90 0x14 0x46 # CHECK: cvt.ps.s $f2, $f18, $f20 +0xa8 0x17 0xc0 0x46 # CHECK: cvt.s.pl $f30, $f2 +0x2c 0x46 0xde 0x46 # CHECK: pll.ps $f24, $f8, $f30 +0x2d 0xd0 0xdc 0x46 # CHECK: plu.ps $f0, $f26, $f28 0x00 0x00 0xe4 0x44 # CHECK: mthc1 $4, $f0 0x00 0x00 0x64 0x44 # CHECK: mfhc1 $4, $f0 Index: test/MC/Disassembler/Mips/mips32r5/valid-fp64.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r5/valid-fp64.txt +++ test/MC/Disassembler/Mips/mips32r5/valid-fp64.txt @@ -15,5 +15,12 @@ 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 +0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 +0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 +0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 +0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 +0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 +0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 +0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x44 0xe4 0x00 0x00 # CHECK: mthc1 $4, $f0 0x44 0x64 0x00 0x00 # CHECK: mfhc1 $4, $f0 Index: test/MC/Disassembler/Mips/mips32r5/valid-mips32r5-el.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r5/valid-mips32r5-el.txt +++ test/MC/Disassembler/Mips/mips32r5/valid-mips32r5-el.txt @@ -68,6 +68,13 @@ 0xa0 0x39 0x80 0x46 # CHECK: cvt.s.w $f6, $f7 0x24 0x73 0x20 0x46 # CHECK: cvt.w.d $f12, $f14 0xa4 0x39 0x00 0x46 # CHECK: cvt.w.s $f6, $f7 +0x21 0x81 0xa0 0x46 # CHECK: cvt.d.l $f4, $f16 +0xe0 0xf3 0xa0 0x46 # CHECK: cvt.s.l $f15, $f30 +0xa0 0xd3 0xc0 0x46 # CHECK: cvt.s.pu $f14, $f26 +0xa6 0x90 0x14 0x46 # CHECK: cvt.ps.s $f2, $f18, $f20 +0xa8 0x17 0xc0 0x46 # CHECK: cvt.s.pl $f30, $f2 +0x2c 0x46 0xde 0x46 # CHECK: pll.ps $f24, $f8, $f30 +0x2d 0xd0 0xdc 0x46 # CHECK: plu.ps $f0, $f26, $f28 0x00 0x60 0x7e 0x41 # CHECK: di $fp 0x00 0x60 0x60 0x41 # CHECK: di 0x20 0x60 0x6e 0x41 # CHECK: ei $14 Index: test/MC/Disassembler/Mips/mips32r5/valid-mips32r5.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r5/valid-mips32r5.txt +++ test/MC/Disassembler/Mips/mips32r5/valid-mips32r5.txt @@ -195,6 +195,13 @@ 0x46 0x00 0x39 0xa1 # CHECK: cvt.d.s $f6, $f7 0x46 0x00 0x39 0xa4 # CHECK: cvt.w.s $f6, $f7 0x46 0x00 0x39 0xa5 # CHECK: cvt.l.s $f6, $f7 +0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 +0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 +0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 +0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 +0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 +0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 +0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x46 0x00 0x4a 0x0f # CHECK: floor.w.s $f8, $f9 0x46 0x00 0x78 0x47 # CHECK: neg.s $f1, $f15 0x46 0x00 0x82 0x45 # CHECK: abs.s $f9, $f16 Index: test/MC/Disassembler/Mips/mips32r5/valid-xfail-mips32r5.txt =================================================================== --- test/MC/Disassembler/Mips/mips32r5/valid-xfail-mips32r5.txt +++ test/MC/Disassembler/Mips/mips32r5/valid-xfail-mips32r5.txt @@ -50,9 +50,6 @@ 0x46 0x00 0x6c 0x8a # CHECK: ceil.l.s $f18, $f13 0x46 0xa0 0x81 0x21 # CHECK: cvt.d.l $f4, $f16 0x46 0x14 0x90 0xa6 # CHECK: cvt.ps.s $f2, $f18, $f20 -0x46 0xa0 0xf3 0xe0 # CHECK: cvt.s.l $f15, $f30 -0x46 0xc0 0x17 0xa8 # CHECK: cvt.s.pl $f30, $f2 -0x46 0xc0 0xd3 0xa0 # CHECK: cvt.s.pu $f14, $f26 0x46 0x20 0x36 0x8b # CHECK: floor.l.d $f26, $f6 0x46 0x00 0x23 0x0b # CHECK: floor.l.s $f12, $f4 0x4c 0x42 0x75 0xa6 # CHECK: madd.ps $f22, $f2, $f14, $f2 @@ -65,8 +62,6 @@ 0x46 0xc0 0x64 0x87 # CHECK: neg.ps $f18, $f12 0x4c 0x98 0x46 0xb6 # CHECK: nmadd.ps $f26, $f4, $f8, $f24 0x4d 0x90 0x71 0xbe # CHECK: nmsub.ps $f6, $f12, $f14, $f16 -0x46 0xde 0x46 0x2c # CHECK: pll.ps $f24, $f8, $f30 -0x46 0xdc 0xd0 0x2d # CHECK: plu.ps $f0, $f26, $f28 0x46 0xda 0xf2 0x2e # CHECK: pul.ps $f8, $f30, $f26 0x46 0xc2 0x46 0x2f # CHECK: puu.ps $f24, $f8, $f2 0x41 0x49 0x98 0x00 # CHECK: rdpgpr s3, t1 Index: test/MC/Mips/mips1/invalid-mips5-wrong-error.s =================================================================== --- test/MC/Mips/mips1/invalid-mips5-wrong-error.s +++ test/MC/Mips/mips1/invalid-mips5-wrong-error.s @@ -25,9 +25,6 @@ c.ule.ps $fcc6,$f17,$f3 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction c.ult.ps $fcc7,$f14,$f0 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction c.un.ps $fcc4,$f2,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.ps.s $f3,$f18,$f19 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.s.pl $f30,$f1 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.s.pu $f14,$f25 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction madd.ps $f22,$f3,$f14,$f3 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction mov.ps $f22,$f17 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction movf.ps $f10,$f28,$fcc6 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction @@ -39,8 +36,6 @@ neg.ps $f19,$f13 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction nmadd.ps $f27,$f4,$f9,$f25 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction nmsub.ps $f6,$f12,$f14,$f17 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - pll.ps $f25,$f9,$f30 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - plu.ps $f1,$f26,$f29 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction pul.ps $f9,$f30,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction puu.ps $f24,$f9,$f2 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction sub.ps $f5,$f14,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction Index: test/MC/Mips/mips2/invalid-mips5-wrong-error.s =================================================================== --- test/MC/Mips/mips2/invalid-mips5-wrong-error.s +++ test/MC/Mips/mips2/invalid-mips5-wrong-error.s @@ -25,9 +25,6 @@ c.ule.ps $fcc6,$f17,$f3 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction c.ult.ps $fcc7,$f14,$f0 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction c.un.ps $fcc4,$f2,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.ps.s $f3,$f18,$f19 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.s.pl $f30,$f1 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.s.pu $f14,$f25 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction madd.ps $f22,$f3,$f14,$f3 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction mov.ps $f22,$f17 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction movf.ps $f10,$f28,$fcc6 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction @@ -39,8 +36,6 @@ neg.ps $f19,$f13 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction nmadd.ps $f27,$f4,$f9,$f25 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction nmsub.ps $f6,$f12,$f14,$f17 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - pll.ps $f25,$f9,$f30 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - plu.ps $f1,$f26,$f29 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction pul.ps $f9,$f30,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction puu.ps $f24,$f9,$f2 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction sub.ps $f5,$f14,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction Index: test/MC/Mips/mips3/invalid-mips5-wrong-error.s =================================================================== --- test/MC/Mips/mips3/invalid-mips5-wrong-error.s +++ test/MC/Mips/mips3/invalid-mips5-wrong-error.s @@ -25,9 +25,6 @@ c.ule.ps $fcc6,$f17,$f3 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction c.ult.ps $fcc7,$f14,$f0 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction c.un.ps $fcc4,$f2,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.ps.s $f3,$f18,$f19 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.s.pl $f30,$f1 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - cvt.s.pu $f14,$f25 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction madd.ps $f22,$f3,$f14,$f3 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction mov.ps $f22,$f17 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction movf.ps $f10,$f28,$fcc6 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction @@ -39,8 +36,6 @@ neg.ps $f19,$f13 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction nmadd.ps $f27,$f4,$f9,$f25 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction nmsub.ps $f6,$f12,$f14,$f17 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - pll.ps $f25,$f9,$f30 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction - plu.ps $f1,$f26,$f29 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction pul.ps $f9,$f30,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction puu.ps $f24,$f9,$f2 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction sub.ps $f5,$f14,$f26 # CHECK: :[[@LINE]]:{{[0-9]+}}: error: unknown instruction Index: test/MC/Mips/mips3/valid.s =================================================================== --- test/MC/Mips/mips3/valid.s +++ test/MC/Mips/mips3/valid.s @@ -62,7 +62,7 @@ cvt.s.d $f26,$f8 # CHECK: cvt.s.d $f26, $f8 # encoding: [0x46,0x20,0x46,0xa0] # CHECK: #