[mips] Add disassembly support for comparison instructions

llvm-svn: 332340
This commit is contained in:
Simon Dardis 2018-05-15 11:18:24 +00:00
parent b79ecec20d
commit aa6bdba0ca
3 changed files with 198 additions and 4 deletions

View File

@ -363,11 +363,13 @@ multiclass C_COND_MM<string TypeStr, RegisterOperand RC, bits<2> fmt,
let BaseOpcode = "c.ngt."#NAME;
}
}
defm S : C_COND_MM<"s", FGR32Opnd, 0b00, II_C_CC_S>,
let DecoderNamespace = "MicroMips" in {
defm S : C_COND_MM<"s", FGR32Opnd, 0b00, II_C_CC_S>,
ISA_MICROMIPS32_NOT_MIPS32R6;
defm D32 : C_COND_MM<"d", AFGR64Opnd, 0b01, II_C_CC_D>,
defm D32 : C_COND_MM<"d", AFGR64Opnd, 0b01, II_C_CC_D>,
ISA_MICROMIPS32_NOT_MIPS32R6, FGR_32;
}
let DecoderNamespace = "Mips64" in
defm D64 : C_COND_MM<"d", FGR64Opnd, 0b01, II_C_CC_D>,
ISA_MICROMIPS32_NOT_MIPS32R6, FGR_64;

View File

@ -258,3 +258,35 @@
0x54 0x86 0x20 0x3b # CHECK: mfc1 $4, $f6
0x54 0x86 0x38 0x3b # CHECK: mthc1 $4, $f6
0x54 0x86 0x30 0x3b # CHECK: mfhc1 $4, $f6
0x54 0xe6 0x00 0x3c # CHECK: c.f.s $f6, $f7
0x54 0xe6 0x00 0x7c # CHECK: c.un.s $f6, $f7
0x54 0xe6 0x00 0xbc # CHECK: c.eq.s $f6, $f7
0x54 0xe6 0x01 0x3c # CHECK: c.olt.s $f6, $f7
0x54 0xe6 0x01 0x7c # CHECK: c.ult.s $f6, $f7
0x54 0xe6 0x01 0xbc # CHECK: c.ole.s $f6, $f7
0x54 0xe6 0x01 0xfc # CHECK: c.ule.s $f6, $f7
0x54 0xe6 0x02 0x3c # CHECK: c.sf.s $f6, $f7
0x54 0xe6 0x02 0x7c # CHECK: c.ngle.s $f6, $f7
0x54 0xe6 0x02 0xbc # CHECK: c.seq.s $f6, $f7
0x54 0xe6 0x02 0xfc # CHECK: c.ngl.s $f6, $f7
0x54 0xe6 0x03 0x3c # CHECK: c.lt.s $f6, $f7
0x54 0xe6 0x03 0x7c # CHECK: c.nge.s $f6, $f7
0x54 0xe6 0x03 0xbc # CHECK: c.le.s $f6, $f7
0x54 0xe6 0x03 0xfc # CHECK: c.ngt.s $f6, $f7
0x54 0x1e 0x06 0x3c # CHECK: c.sf.d $f30, $f0
0x55 0xcc 0x04 0x3c # CHECK: c.f.d $f12, $f14
0x55 0xcc 0x04 0x7c # CHECK: c.un.d $f12, $f14
0x55 0xcc 0x04 0xbc # CHECK: c.eq.d $f12, $f14
0x55 0xcc 0x04 0xfc # CHECK: c.ueq.d $f12, $f14
0x55 0xcc 0x05 0x3c # CHECK: c.olt.d $f12, $f14
0x55 0xcc 0x05 0x7c # CHECK: c.ult.d $f12, $f14
0x55 0xcc 0x05 0xbc # CHECK: c.ole.d $f12, $f14
0x55 0xcc 0x05 0xfc # CHECK: c.ule.d $f12, $f14
0x55 0xcc 0x06 0x3c # CHECK: c.sf.d $f12, $f14
0x55 0xcc 0x06 0x7c # CHECK: c.ngle.d $f12, $f14
0x55 0xcc 0x06 0xbc # CHECK: c.seq.d $f12, $f14
0x55 0xcc 0x06 0xfc # CHECK: c.ngl.d $f12, $f14
0x55 0xcc 0x07 0x3c # CHECK: c.lt.d $f12, $f14
0x55 0xcc 0x07 0x7c # CHECK: c.nge.d $f12, $f14
0x55 0xcc 0x07 0xbc # CHECK: c.le.d $f12, $f14
0x55 0xcc 0x07 0xfc # CHECK: c.ngt.d $f12, $f14

View File

@ -93,6 +93,70 @@
# CHECK-EL: nmadd.d $f2, $f4, $f6, $f8 # encoding: [0x06,0x55,0x0a,0x11]
# CHECK-EL: nmsub.s $f2, $f4, $f6, $f8 # encoding: [0x06,0x55,0x22,0x11]
# CHECK-EL: nmsub.d $f2, $f4, $f6, $f8 # encoding: [0x06,0x55,0x2a,0x11]
# CHECK-EL: c.f.s $f6, $f7 # encoding: [0xe6,0x54,0x3c,0x00]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_F_S_MM
# CHECK-EL: c.un.s $f6, $f7 # encoding: [0xe6,0x54,0x7c,0x00]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_UN_S_MM
# CHECK-EL: c.eq.s $f6, $f7 # encoding: [0xe6,0x54,0xbc,0x00]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_EQ_S_MM
# CHECK-EL: c.olt.s $f6, $f7 # encoding: [0xe6,0x54,0x3c,0x01]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_OLT_S_MM
# CHECK-EL: c.ult.s $f6, $f7 # encoding: [0xe6,0x54,0x7c,0x01]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_ULT_S_MM
# CHECK-EL: c.ole.s $f6, $f7 # encoding: [0xe6,0x54,0xbc,0x01]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_OLE_S_MM
# CHECK-EL: c.ule.s $f6, $f7 # encoding: [0xe6,0x54,0xfc,0x01]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_ULE_S_MM
# CHECK-EL: c.sf.s $f6, $f7 # encoding: [0xe6,0x54,0x3c,0x02]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_SF_S_MM
# CHECK-EL: c.ngle.s $f6, $f7 # encoding: [0xe6,0x54,0x7c,0x02]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_NGLE_S_MM
# CHECK-EL: c.seq.s $f6, $f7 # encoding: [0xe6,0x54,0xbc,0x02]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_SEQ_S_MM
# CHECK-EL: c.ngl.s $f6, $f7 # encoding: [0xe6,0x54,0xfc,0x02]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_NGL_S_MM
# CHECK-EL: c.lt.s $f6, $f7 # encoding: [0xe6,0x54,0x3c,0x03]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_LT_S_MM
# CHECK-EL: c.nge.s $f6, $f7 # encoding: [0xe6,0x54,0x7c,0x03]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_NGE_S_MM
# CHECK-EL: c.le.s $f6, $f7 # encoding: [0xe6,0x54,0xbc,0x03]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_LE_S_MM
# CHECK-EL: c.ngt.s $f6, $f7 # encoding: [0xe6,0x54,0xfc,0x03]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_NGT_S_MM
# CHECK-EL: c.sf.d $f30, $f0 # encoding: [0x1e,0x54,0x3c,0x06]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_SF_D32_MM
# CHECK-EL: c.f.d $f12, $f14 # encoding: [0xcc,0x55,0x3c,0x04]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_F_D32_MM
# CHECK-EL: c.un.d $f12, $f14 # encoding: [0xcc,0x55,0x7c,0x04]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_UN_D32_MM
# CHECK-EL: c.eq.d $f12, $f14 # encoding: [0xcc,0x55,0xbc,0x04]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_EQ_D32_MM
# CHECK-EL: c.ueq.d $f12, $f14 # encoding: [0xcc,0x55,0xfc,0x04]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_UEQ_D32_MM
# CHECK-EL: c.olt.d $f12, $f14 # encoding: [0xcc,0x55,0x3c,0x05]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_OLT_D32_MM
# CHECK-EL: c.ult.d $f12, $f14 # encoding: [0xcc,0x55,0x7c,0x05]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_ULT_D32_MM
# CHECK-EL: c.ole.d $f12, $f14 # encoding: [0xcc,0x55,0xbc,0x05]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_OLE_D32_MM
# CHECK-EL: c.ule.d $f12, $f14 # encoding: [0xcc,0x55,0xfc,0x05]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_ULE_D32_MM
# CHECK-EL: c.sf.d $f12, $f14 # encoding: [0xcc,0x55,0x3c,0x06]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_SF_D32_MM
# CHECK-EL: c.ngle.d $f12, $f14 # encoding: [0xcc,0x55,0x7c,0x06]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_NGLE_D32_MM
# CHECK-EL: c.seq.d $f12, $f14 # encoding: [0xcc,0x55,0xbc,0x06]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_SEQ_D32_MM
# CHECK-EL: c.ngl.d $f12, $f14 # encoding: [0xcc,0x55,0xfc,0x06]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_NGL_D32_MM
# CHECK-EL: c.lt.d $f12, $f14 # encoding: [0xcc,0x55,0x3c,0x07]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_LT_D32_MM
# CHECK-EL: c.nge.d $f12, $f14 # encoding: [0xcc,0x55,0x7c,0x07]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_NGE_D32_MM
# CHECK-EL: c.le.d $f12, $f14 # encoding: [0xcc,0x55,0xbc,0x07]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_LE_D32_MM
# CHECK-EL: c.ngt.d $f12, $f14 # encoding: [0xcc,0x55,0xfc,0x07]
# CHECK-EL-NEXT: # <MCInst #{{[0-9]+}} C_NGT_D32_MM
#------------------------------------------------------------------------------
# Big endian
#------------------------------------------------------------------------------
@ -187,6 +251,70 @@
# CHECK-EB: nmsub.s $f2, $f4, $f6, $f8 # encoding: [0x55,0x06,0x11,0x22]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} NMSUB_S_MM
# CHECK-EB: nmsub.d $f2, $f4, $f6, $f8 # encoding: [0x55,0x06,0x11,0x2a]
# CHECK-EB: c.f.s $f6, $f7 # encoding: [0x54,0xe6,0x00,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_F_S_MM
# CHECK-EB: c.un.s $f6, $f7 # encoding: [0x54,0xe6,0x00,0x7c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_UN_S_MM
# CHECK-EB: c.eq.s $f6, $f7 # encoding: [0x54,0xe6,0x00,0xbc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_EQ_S_MM
# CHECK-EB: c.olt.s $f6, $f7 # encoding: [0x54,0xe6,0x01,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_OLT_S_MM
# CHECK-EB: c.ult.s $f6, $f7 # encoding: [0x54,0xe6,0x01,0x7c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_ULT_S_MM
# CHECK-EB: c.ole.s $f6, $f7 # encoding: [0x54,0xe6,0x01,0xbc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_OLE_S_MM
# CHECK-EB: c.ule.s $f6, $f7 # encoding: [0x54,0xe6,0x01,0xfc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_ULE_S_MM
# CHECK-EB: c.sf.s $f6, $f7 # encoding: [0x54,0xe6,0x02,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_SF_S_MM
# CHECK-EB: c.ngle.s $f6, $f7 # encoding: [0x54,0xe6,0x02,0x7c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_NGLE_S_MM
# CHECK-EB: c.seq.s $f6, $f7 # encoding: [0x54,0xe6,0x02,0xbc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_SEQ_S_MM
# CHECK-EB: c.ngl.s $f6, $f7 # encoding: [0x54,0xe6,0x02,0xfc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_NGL_S_MM
# CHECK-EB: c.lt.s $f6, $f7 # encoding: [0x54,0xe6,0x03,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_LT_S_MM
# CHECK-EB: c.nge.s $f6, $f7 # encoding: [0x54,0xe6,0x03,0x7c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_NGE_S_MM
# CHECK-EB: c.le.s $f6, $f7 # encoding: [0x54,0xe6,0x03,0xbc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_LE_S_MM
# CHECK-EB: c.ngt.s $f6, $f7 # encoding: [0x54,0xe6,0x03,0xfc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_NGT_S_MM
# CHECK-EB: c.sf.d $f30, $f0 # encoding: [0x54,0x1e,0x06,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_SF_D32_MM
# CHECK-EB: c.f.d $f12, $f14 # encoding: [0x55,0xcc,0x04,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_F_D32_MM
# CHECK-EB: c.un.d $f12, $f14 # encoding: [0x55,0xcc,0x04,0x7c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_UN_D32_MM
# CHECK-EB: c.eq.d $f12, $f14 # encoding: [0x55,0xcc,0x04,0xbc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_EQ_D32_MM
# CHECK-EB: c.ueq.d $f12, $f14 # encoding: [0x55,0xcc,0x04,0xfc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_UEQ_D32_MM
# CHECK-EB: c.olt.d $f12, $f14 # encoding: [0x55,0xcc,0x05,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_OLT_D32_MM
# CHECK-EB: c.ult.d $f12, $f14 # encoding: [0x55,0xcc,0x05,0x7c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_ULT_D32_MM
# CHECK-EB: c.ole.d $f12, $f14 # encoding: [0x55,0xcc,0x05,0xbc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_OLE_D32_MM
# CHECK-EB: c.ule.d $f12, $f14 # encoding: [0x55,0xcc,0x05,0xfc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_ULE_D32_MM
# CHECK-EB: c.sf.d $f12, $f14 # encoding: [0x55,0xcc,0x06,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_SF_D32_MM
# CHECK-EB: c.ngle.d $f12, $f14 # encoding: [0x55,0xcc,0x06,0x7c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_NGLE_D32_MM
# CHECK-EB: c.seq.d $f12, $f14 # encoding: [0x55,0xcc,0x06,0xbc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_SEQ_D32_MM
# CHECK-EB: c.ngl.d $f12, $f14 # encoding: [0x55,0xcc,0x06,0xfc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_NGL_D32_MM
# CHECK-EB: c.lt.d $f12, $f14 # encoding: [0x55,0xcc,0x07,0x3c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_LT_D32_MM
# CHECK-EB: c.nge.d $f12, $f14 # encoding: [0x55,0xcc,0x07,0x7c]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_NGE_D32_MM
# CHECK-EB: c.le.d $f12, $f14 # encoding: [0x55,0xcc,0x07,0xbc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_LE_D32_MM
# CHECK-EB: c.ngt.d $f12, $f14 # encoding: [0x55,0xcc,0x07,0xfc]
# CHECK-EB-NEXT: # <MCInst #{{[0-9]+}} C_NGT_D32_MM
add.s $f4, $f6, $f8
add.d $f4, $f6, $f8
@ -246,3 +374,35 @@
nmadd.d $f2, $f4, $f6, $f8
nmsub.s $f2, $f4, $f6, $f8
nmsub.d $f2, $f4, $f6, $f8
c.f.s $f6, $f7
c.un.s $f6, $f7
c.eq.s $f6, $f7
c.olt.s $f6, $f7
c.ult.s $f6, $f7
c.ole.s $f6, $f7
c.ule.s $f6, $f7
c.sf.s $f6, $f7
c.ngle.s $f6, $f7
c.seq.s $f6, $f7
c.ngl.s $f6, $f7
c.lt.s $f6, $f7
c.nge.s $f6, $f7
c.le.s $f6, $f7
c.ngt.s $f6, $f7
c.sf.d $f30, $f0
c.f.d $f12, $f14
c.un.d $f12, $f14
c.eq.d $f12, $f14
c.ueq.d $f12, $f14
c.olt.d $f12, $f14
c.ult.d $f12, $f14
c.ole.d $f12, $f14
c.ule.d $f12, $f14
c.sf.d $f12, $f14
c.ngle.d $f12, $f14
c.seq.d $f12, $f14
c.ngl.d $f12, $f14
c.lt.d $f12, $f14
c.nge.d $f12, $f14
c.le.d $f12, $f14
c.ngt.d $f12, $f14