Index: llvm/lib/Target/Mips/MipsInstrFPU.td =================================================================== --- llvm/lib/Target/Mips/MipsInstrFPU.td +++ llvm/lib/Target/Mips/MipsInstrFPU.td @@ -456,6 +456,12 @@ def PLU_PS64 : ADDS_FT<"plu.ps", FGR64Opnd, II_CVT, 0>, ADDS_FM<0x2D, 22>, ISA_MIPS32R2_NOT_32R6_64R6, FGR_64; + def PUL_PS64 : ADDS_FT<"pul.ps", FGR64Opnd, II_CVT, 0>, + ADDS_FM<0x2E, 22>, + ISA_MIPS32R2_NOT_32R6_64R6, FGR_64; + def PUU_PS64 : ADDS_FT<"puu.ps", FGR64Opnd, II_CVT, 0>, + ADDS_FM<0x2F, 22>, + ISA_MIPS32R2_NOT_32R6_64R6, FGR_64; def CVT_S_PU64 : ABSS_FT<"cvt.s.pu", FGR32Opnd, FGR64Opnd, II_CVT>, ABSS_FM<0x20, 22>, Index: llvm/lib/Target/Mips/MipsScheduleGeneric.td =================================================================== --- llvm/lib/Target/Mips/MipsScheduleGeneric.td +++ llvm/lib/Target/Mips/MipsScheduleGeneric.td @@ -832,7 +832,7 @@ FLOOR_W_D64, FLOOR_W_S, FMUL_D32, FMUL_D64, MADD_D32, MADD_D64, MSUB_D32, MSUB_D64, NMADD_D32, NMADD_D64, NMSUB_D32, NMSUB_D64, - PLL_PS64, PLU_PS64, + PLL_PS64, PLU_PS64, PUL_PS64, PUU_PS64, ROUND_L_D64, ROUND_L_S, ROUND_W_D32, ROUND_W_D64, ROUND_W_S, TRUNC_L_D64, TRUNC_L_S, TRUNC_W_D32, TRUNC_W_D64, Index: llvm/lib/Target/Mips/MipsScheduleP5600.td =================================================================== --- llvm/lib/Target/Mips/MipsScheduleP5600.td +++ llvm/lib/Target/Mips/MipsScheduleP5600.td @@ -457,7 +457,7 @@ def : InstRW<[P5600WriteFPUL], (instregex "^C_[A-Z]+_(S|D32|D64)$")>; def : InstRW<[P5600WriteFPUL], (instregex "^FCMP_(S32|D32|D64)$")>; def : InstRW<[P5600WriteFPUL], (instregex "^PseudoCVT_(S|D32|D64)_(L|W)$")>; -def : InstRW<[P5600WriteFPUL], (instrs PLL_PS64, PLU_PS64)>; +def : InstRW<[P5600WriteFPUL], (instrs PLL_PS64, PLU_PS64, PUL_PS64, PUU_PS64)>; // div.[ds], div.ps def : InstRW<[P5600WriteFPUDivS], (instrs FDIV_S)>; Index: llvm/test/MC/Mips/mips64r2/valid-xfail.s =================================================================== --- llvm/test/MC/Mips/mips64r2/valid-xfail.s +++ llvm/test/MC/Mips/mips64r2/valid-xfail.s @@ -65,8 +65,6 @@ nmsub.ps $f6,$f12,$f14,$f17 preceq.w.phl $s8,$gp preceq.w.phr $s5,$15 - pul.ps $f9,$f30,$f26 - puu.ps $f24,$f9,$f2 rdpgpr $s3,$9 rorv $13,$a3,$s5 sbe $s7,33($s1) Index: llvm/test/MC/Mips/mips64r2/valid.s =================================================================== --- llvm/test/MC/Mips/mips64r2/valid.s +++ llvm/test/MC/Mips/mips64r2/valid.s @@ -294,6 +294,12 @@ plu.ps $f2,$f26,$f30 # CHECK: plu.ps $f2, $f26, $f30 # encoding: [0x46,0xde,0xd0,0xad] # CHECK: #