diff --git a/lib/Target/Mips/MipsMSAInstrFormats.td b/lib/Target/Mips/MipsMSAInstrFormats.td index 8fe4dbca569..6e5a5eaf313 100644 --- a/lib/Target/Mips/MipsMSAInstrFormats.td +++ b/lib/Target/Mips/MipsMSAInstrFormats.td @@ -146,7 +146,12 @@ class MSA_3R_INDEX_FMT major, bits<2> df, bits<6> minor>: MSAInst { } class MSA_ELM_FMT major, bits<6> minor>: MSAInst { + bits<5> ws; + bits<5> wd; + let Inst{25-16} = major; + let Inst{15-11} = ws; + let Inst{10-6} = wd; let Inst{5-0} = minor; } diff --git a/lib/Target/Mips/MipsMSAInstrInfo.td b/lib/Target/Mips/MipsMSAInstrInfo.td index 09c06bcd8ab..b4d05f7438e 100644 --- a/lib/Target/Mips/MipsMSAInstrInfo.td +++ b/lib/Target/Mips/MipsMSAInstrInfo.td @@ -2158,8 +2158,8 @@ class MOD_U_W_DESC : MSA_3R_DESC_BASE<"mod_u.w", urem, MSA128WOpnd>; class MOD_U_D_DESC : MSA_3R_DESC_BASE<"mod_u.d", urem, MSA128DOpnd>; class MOVE_V_DESC { - dag OutOperandList = (outs MSA128B:$wd); - dag InOperandList = (ins MSA128B:$ws); + dag OutOperandList = (outs MSA128BOpnd:$wd); + dag InOperandList = (ins MSA128BOpnd:$ws); string AsmString = "move.v\t$wd, $ws"; list Pattern = []; InstrItinClass Itinerary = NoItinerary; diff --git a/test/MC/Mips/msa/test_elm.s b/test/MC/Mips/msa/test_elm.s index 6b467077305..1d0483826a9 100644 --- a/test/MC/Mips/msa/test_elm.s +++ b/test/MC/Mips/msa/test_elm.s @@ -16,6 +16,7 @@ # CHECK: splati.h $w24, $w28[1] # encoding: [0x78,0x61,0xe6,0x19] # CHECK: splati.w $w13, $w18[0] # encoding: [0x78,0x70,0x93,0x59] # CHECK: splati.d $w28, $w1[0] # encoding: [0x78,0x78,0x0f,0x19] +# CHECK: move.v $w23, $w24 # encoding: [0x78,0xbe,0xc5,0xd9] # CHECKOBJDUMP: copy_s.b $13, $w8[2] # CHECKOBJDUMP: copy_s.h $1, $w25[0] @@ -31,6 +32,7 @@ # CHECKOBJDUMP: splati.h $w24, $w28[1] # CHECKOBJDUMP: splati.w $w13, $w18[0] # CHECKOBJDUMP: splati.d $w28, $w1[0] +# CHECKOBJDUMP: move.v $w23, $w24 copy_s.b $13, $w8[2] copy_s.h $1, $w25[0] @@ -46,3 +48,4 @@ splati.h $w24, $w28[1] splati.w $w13, $w18[0] splati.d $w28, $w1[0] + move.v $w23, $w24