Index: llvm/trunk/lib/Target/Mips/MicroMipsInstrInfo.td =================================================================== --- llvm/trunk/lib/Target/Mips/MicroMipsInstrInfo.td +++ llvm/trunk/lib/Target/Mips/MicroMipsInstrInfo.td @@ -1006,20 +1006,27 @@ def CACHEE_MM : MMRel, CacheOp<"cachee", mem_mm_9, II_CACHEE>, CACHE_PREFE_FM_MM<0x18, 0x3>, ISA_MICROMIPS, ASE_EVA; } -} -let DecoderNamespace = "MicroMips", Predicates = [InMicroMips] in { - def SSNOP_MM : MMRel, Barrier<"ssnop", II_SSNOP>, BARRIER_FM_MM<0x1>; - def EHB_MM : MMRel, Barrier<"ehb", II_EHB>, BARRIER_FM_MM<0x3>; - def PAUSE_MM : MMRel, Barrier<"pause", II_PAUSE>, BARRIER_FM_MM<0x5>; - - def TLBP_MM : MMRel, TLB<"tlbp", II_TLBP>, COP0_TLB_FM_MM<0x0d>; - def TLBR_MM : MMRel, TLB<"tlbr", II_TLBR>, COP0_TLB_FM_MM<0x4d>; - def TLBWI_MM : MMRel, TLB<"tlbwi", II_TLBWI>, COP0_TLB_FM_MM<0x8d>; - def TLBWR_MM : MMRel, TLB<"tlbwr", II_TLBWR>, COP0_TLB_FM_MM<0xcd>; + def SSNOP_MM : MMRel, Barrier<"ssnop", II_SSNOP>, BARRIER_FM_MM<0x1>, + ISA_MICROMIPS; + def EHB_MM : MMRel, Barrier<"ehb", II_EHB>, BARRIER_FM_MM<0x3>, + ISA_MICROMIPS; + def PAUSE_MM : MMRel, Barrier<"pause", II_PAUSE>, BARRIER_FM_MM<0x5>, + ISA_MICROMIPS; + + def TLBP_MM : MMRel, TLB<"tlbp", II_TLBP>, COP0_TLB_FM_MM<0x0d>, + ISA_MICROMIPS; + def TLBR_MM : MMRel, TLB<"tlbr", II_TLBR>, COP0_TLB_FM_MM<0x4d>, + ISA_MICROMIPS; + def TLBWI_MM : MMRel, TLB<"tlbwi", II_TLBWI>, COP0_TLB_FM_MM<0x8d>, + ISA_MICROMIPS; + def TLBWR_MM : MMRel, TLB<"tlbwr", II_TLBWR>, COP0_TLB_FM_MM<0xcd>, + ISA_MICROMIPS; - def SDBBP_MM : MMRel, SYS_FT<"sdbbp", uimm10, II_SDBBP>, SDBBP_FM_MM; + def SDBBP_MM : MMRel, SYS_FT<"sdbbp", uimm10, II_SDBBP>, SDBBP_FM_MM, + ISA_MICROMIPS; - def PREFX_MM : PrefetchIndexed<"prefx">, POOL32F_PREFX_FM_MM<0x15, 0x1A0>; + def PREFX_MM : PrefetchIndexed<"prefx">, POOL32F_PREFX_FM_MM<0x15, 0x1A0>, + ISA_MICROMIPS32_NOT_MIPS32R6; } def TAILCALL_MM : TailCall, ISA_MIPS1_NOT_32R6_64R6; Index: llvm/trunk/lib/Target/Mips/MipsInstrInfo.td =================================================================== --- llvm/trunk/lib/Target/Mips/MipsInstrInfo.td +++ llvm/trunk/lib/Target/Mips/MipsInstrInfo.td @@ -2324,13 +2324,15 @@ class Barrier : InstSE<(outs), (ins), asmstr, [], itin, FrmOther, asmstr>; - -def SSNOP : MMRel, StdMMR6Rel, Barrier<"ssnop", II_SSNOP>, BARRIER_FM<1>; -def EHB : MMRel, Barrier<"ehb", II_EHB>, BARRIER_FM<3>; - -let isCTI = 1 in -def PAUSE : MMRel, StdMMR6Rel, Barrier<"pause", II_PAUSE>, BARRIER_FM<5>, - ISA_MIPS32R2; +let AdditionalPredicates = [NotInMicroMips] in { + def SSNOP : MMRel, StdMMR6Rel, Barrier<"ssnop", II_SSNOP>, BARRIER_FM<1>, + ISA_MIPS1; + def EHB : MMRel, Barrier<"ehb", II_EHB>, BARRIER_FM<3>, ISA_MIPS1; + + let isCTI = 1 in + def PAUSE : MMRel, StdMMR6Rel, Barrier<"pause", II_PAUSE>, BARRIER_FM<5>, + ISA_MIPS32R2; +} // JR_HB and JALR_HB are defined here using the new style naming // scheme because some of this code is shared with Mips32r6InstrInfo.td @@ -2389,10 +2391,10 @@ class TLB : InstSE<(outs), (ins), asmstr, [], itin, FrmOther, asmstr>; let AdditionalPredicates = [NotInMicroMips] in { -def TLBP : MMRel, TLB<"tlbp", II_TLBP>, COP0_TLB_FM<0x08>; -def TLBR : MMRel, TLB<"tlbr", II_TLBR>, COP0_TLB_FM<0x01>; -def TLBWI : MMRel, TLB<"tlbwi", II_TLBWI>, COP0_TLB_FM<0x02>; -def TLBWR : MMRel, TLB<"tlbwr", II_TLBWR>, COP0_TLB_FM<0x06>; + def TLBP : MMRel, TLB<"tlbp", II_TLBP>, COP0_TLB_FM<0x08>, ISA_MIPS1; + def TLBR : MMRel, TLB<"tlbr", II_TLBR>, COP0_TLB_FM<0x01>, ISA_MIPS1; + def TLBWI : MMRel, TLB<"tlbwi", II_TLBWI>, COP0_TLB_FM<0x02>, ISA_MIPS1; + def TLBWR : MMRel, TLB<"tlbwr", II_TLBWR>, COP0_TLB_FM<0x06>, ISA_MIPS1; } class CacheOp : @@ -2406,7 +2408,7 @@ INSN_MIPS3_32_NOT_32R6_64R6; def PREF : MMRel, CacheOp<"pref", mem, II_PREF>, CACHEOP_FM<0b110011>, INSN_MIPS3_32_NOT_32R6_64R6; - +// FIXME: We are missing the prefx instruction. def ROL : MipsAsmPseudoInst<(outs), (ins GPR32Opnd:$rs, GPR32Opnd:$rt, GPR32Opnd:$rd), "rol\t$rs, $rt, $rd">; Index: llvm/trunk/test/MC/Disassembler/Mips/micromips32r3/valid-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/micromips32r3/valid-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/micromips32r3/valid-el.txt @@ -138,6 +138,10 @@ 0x86 0x40 0x9a 0x02 # CHECK: blez $6, 1336 0xc9 0xb4 0x9a 0x02 # CHECK: bne $9, $6, 1336 0x06 0x40 0x9a 0x02 # CHECK: bltz $6, 1336 +0x00 0x00 0x7c 0x03 # CHECK: tlbp +0x00 0x00 0x7c 0x13 # CHECK: tlbr +0x00 0x00 0x7c 0x23 # CHECK: tlbwi +0x00 0x00 0x7c 0x33 # CHECK: tlbwr 0x28 0x01 0x3c 0x00 # CHECK: teq $8, $9 0x28 0x01 0x3c 0x02 # CHECK: tge $8, $9 0x28 0x01 0x3c 0x04 # CHECK: tgeu $8, $9 Index: llvm/trunk/test/MC/Disassembler/Mips/micromips32r3/valid.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/micromips32r3/valid.txt +++ llvm/trunk/test/MC/Disassembler/Mips/micromips32r3/valid.txt @@ -138,6 +138,10 @@ 0x40 0x86 0x02 0x9a # CHECK: blez $6, 1336 0xb4 0xc9 0x02 0x9a # CHECK: bne $9, $6, 1336 0x40 0x06 0x02 0x9a # CHECK: bltz $6, 1336 +0x00 0x00 0x03 0x7c # CHECK: tlbp +0x00 0x00 0x13 0x7c # CHECK: tlbr +0x00 0x00 0x23 0x7c # CHECK: tlbwi +0x00 0x00 0x33 0x7c # CHECK: tlbwr 0x01 0x28 0x00 0x3c # CHECK: teq $8, $9 0x01 0x28 0x02 0x3c # CHECK: tge $8, $9 0x01 0x28 0x04 0x3c # CHECK: tgeu $8, $9 Index: llvm/trunk/test/MC/Disassembler/Mips/mips32r2/valid-mips32r2-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips32r2/valid-mips32r2-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips32r2/valid-mips32r2-el.txt @@ -24,6 +24,7 @@ 0x4c 0x01 0xc0 0x1c # CHECK: bgtz $6, 1332 0x4c 0x01 0xc0 0x18 # CHECK: blez $6, 1332 0x4c 0x01 0x26 0x15 # CHECK: bne $9, $6, 1332 +0x40 0x01 0x00 0x00 # CHECK: pause 0x32 0x60 0x2e 0x46 # CHECK: c.eq.d $f12, $f14 0x32 0x30 0x07 0x46 # CHECK: c.eq.s $f6, $f7 0x30 0x60 0x2e 0x46 # CHECK: c.f.d $f12, $f14 Index: llvm/trunk/test/MC/Disassembler/Mips/mips32r2/valid-mips32r2.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips32r2/valid-mips32r2.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips32r2/valid-mips32r2.txt @@ -12,6 +12,7 @@ 0x00 0x00 0x00 0x40 # CHECK: ssnop 0x00 0x00 0x00 0x80 # CHECK: sll $zero, $zero, 2 0x00 0x00 0x00 0xc0 # CHECK: ehb +0x00 0x00 0x01 0x40 # CHECK: pause 0x00 0x00 0x01 0xcf # CHECK: sync 7 0x00 0x00 0x28 0x09 # CHECK: jalr $5, $zero 0x00 0x00 0x28 0x10 # CHECK: mfhi $5 Index: llvm/trunk/test/MC/Disassembler/Mips/mips32r3/valid-mips32r3-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips32r3/valid-mips32r3-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips32r3/valid-mips32r3-el.txt @@ -21,6 +21,7 @@ 0x4c 0x01 0xc0 0x1c # CHECK: bgtz $6, 1332 0x4c 0x01 0xc0 0x18 # CHECK: blez $6, 1332 0x4c 0x01 0x26 0x15 # CHECK: bne $9, $6, 1332 +0x40 0x01 0x00 0x00 # CHECK: pause 0x32 0x60 0x2e 0x46 # CHECK: c.eq.d $f12, $f14 0x32 0x30 0x07 0x46 # CHECK: c.eq.s $f6, $f7 0x30 0x60 0x2e 0x46 # CHECK: c.f.d $f12, $f14 Index: llvm/trunk/test/MC/Disassembler/Mips/mips32r3/valid-mips32r3.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips32r3/valid-mips32r3.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips32r3/valid-mips32r3.txt @@ -9,6 +9,7 @@ 0x00 0x00 0x00 0x40 # CHECK: ssnop 0x00 0x00 0x00 0x80 # CHECK: sll $zero, $zero, 2 0x00 0x00 0x00 0xc0 # CHECK: ehb +0x00 0x00 0x01 0x40 # CHECK: pause 0x00 0x00 0x01 0xcf # CHECK: sync 7 0x00 0x00 0x28 0x09 # CHECK: jalr $5, $zero 0x00 0x00 0x28 0x10 # CHECK: mfhi $5 Index: llvm/trunk/test/MC/Disassembler/Mips/mips32r5/valid-mips32r5-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips32r5/valid-mips32r5-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips32r5/valid-mips32r5-el.txt @@ -21,6 +21,7 @@ 0x4c 0x01 0xc0 0x1c # CHECK: bgtz $6, 1332 0x4c 0x01 0xc0 0x18 # CHECK: blez $6, 1332 0x4c 0x01 0x26 0x15 # CHECK: bne $9, $6, 1332 +0x40 0x01 0x00 0x00 # CHECK: pause 0x32 0x60 0x2e 0x46 # CHECK: c.eq.d $f12, $f14 0x32 0x30 0x07 0x46 # CHECK: c.eq.s $f6, $f7 0x30 0x60 0x2e 0x46 # CHECK: c.f.d $f12, $f14 Index: llvm/trunk/test/MC/Disassembler/Mips/mips32r5/valid-mips32r5.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips32r5/valid-mips32r5.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips32r5/valid-mips32r5.txt @@ -9,6 +9,7 @@ 0x00 0x00 0x00 0x40 # CHECK: ssnop 0x00 0x00 0x00 0x80 # CHECK: sll $zero, $zero, 2 0x00 0x00 0x00 0xc0 # CHECK: ehb +0x00 0x00 0x01 0x40 # CHECK: pause 0x00 0x00 0x01 0xcf # CHECK: sync 7 0x00 0x00 0x28 0x09 # CHECK: jalr $5, $zero 0x00 0x00 0x28 0x10 # CHECK: mfhi $5 Index: llvm/trunk/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6-el.txt @@ -17,6 +17,7 @@ 0x02 0x00 0x3f 0x49 # CHECK: bc2eqz $31, 12 0x02 0x00 0xa0 0x49 # CHECK: bc2nez $0, 12 0x02 0x00 0xbf 0x49 # CHECK: bc2nez $31, 12 +0x40 0x01 0x00 0x00 # CHECK: pause 0x40 0x00 0xa6 0x20 # CHECK: beqc $5, $6, 260 0x4d 0x01 0x02 0x20 # CHECK: beqzalc $2, 1336 0x40 0x00 0xa6 0x60 # CHECK: bnec $5, $6, 260 Index: llvm/trunk/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips32r6/valid-mips32r6.txt @@ -3,6 +3,8 @@ 0x00 0x00 0x00 0x0f # CHECK: sync 0x00 0x00 0x00 0x40 # CHECK: ssnop 0x00 0x00 0x00 0x4f # CHECK: sync 1 +0x00 0x00 0x00 0xc0 # CHECK: ehb +0x00 0x00 0x01 0x40 # CHECK: pause 0x00 0x00 0x08 0x8e # CHECK: sdbbp 34 0x00 0x03 0x00 0x34 # CHECK: teq $zero, $3 0x00 0x53 0x21 0x72 # CHECK: tlt $2, $19, 133 Index: llvm/trunk/test/MC/Disassembler/Mips/mips64r2/valid-mips64r2-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips64r2/valid-mips64r2-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips64r2/valid-mips64r2-el.txt @@ -24,6 +24,7 @@ 0x4c 0x01 0xc0 0x1c # CHECK: bgtz $6, 1332 0x4c 0x01 0xc0 0x18 # CHECK: blez $6, 1332 0x4c 0x01 0x26 0x15 # CHECK: bne $9, $6, 1332 +0x40 0x01 0x00 0x00 # CHECK: pause 0x32 0x60 0x2e 0x46 # CHECK: c.eq.d $f12, $f14 0x32 0x30 0x07 0x46 # CHECK: c.eq.s $f6, $f7 0x30 0x60 0x2e 0x46 # CHECK: c.f.d $f12, $f14 Index: llvm/trunk/test/MC/Disassembler/Mips/mips64r2/valid-mips64r2.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips64r2/valid-mips64r2.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips64r2/valid-mips64r2.txt @@ -12,6 +12,7 @@ 0x00 0x00 0x00 0x40 # CHECK: ssnop 0x00 0x00 0x00 0x80 # CHECK: sll $zero, $zero, 2 0x00 0x00 0x00 0xc0 # CHECK: ehb +0x00 0x00 0x01 0x40 # CHECK: pause 0x00 0x00 0x01 0xcf # CHECK: sync 7 0x00 0x00 0x04 0xb8 # CHECK: dsll $zero, $zero, 18 0x00 0x00 0x04 0xbc # CHECK: dsll32 $zero, $zero, 18 Index: llvm/trunk/test/MC/Disassembler/Mips/mips64r3/valid-mips64r3-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips64r3/valid-mips64r3-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips64r3/valid-mips64r3-el.txt @@ -21,6 +21,7 @@ 0x4c 0x01 0xc0 0x1c # CHECK: bgtz $6, 1332 0x4c 0x01 0xc0 0x18 # CHECK: blez $6, 1332 0x4c 0x01 0x26 0x15 # CHECK: bne $9, $6, 1332 +0x40 0x01 0x00 0x00 # CHECK: pause 0x32 0x60 0x2e 0x46 # CHECK: c.eq.d $f12, $f14 0x32 0x30 0x07 0x46 # CHECK: c.eq.s $f6, $f7 0x30 0x60 0x2e 0x46 # CHECK: c.f.d $f12, $f14 Index: llvm/trunk/test/MC/Disassembler/Mips/mips64r3/valid-mips64r3.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips64r3/valid-mips64r3.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips64r3/valid-mips64r3.txt @@ -9,6 +9,7 @@ 0x00 0x00 0x00 0x40 # CHECK: ssnop 0x00 0x00 0x00 0x80 # CHECK: sll $zero, $zero, 2 0x00 0x00 0x00 0xc0 # CHECK: ehb +0x00 0x00 0x01 0x40 # CHECK: pause 0x00 0x00 0x01 0xcf # CHECK: sync 7 0x00 0x00 0x04 0xb8 # CHECK: dsll $zero, $zero, 18 0x00 0x00 0x04 0xbc # CHECK: dsll32 $zero, $zero, 18 Index: llvm/trunk/test/MC/Disassembler/Mips/mips64r5/valid-mips64r5-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips64r5/valid-mips64r5-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips64r5/valid-mips64r5-el.txt @@ -21,6 +21,7 @@ 0x4c 0x01 0xc0 0x1c # CHECK: bgtz $6, 1332 0x4c 0x01 0xc0 0x18 # CHECK: blez $6, 1332 0x4c 0x01 0x26 0x15 # CHECK: bne $9, $6, 1332 +0x40 0x01 0x00 0x00 # CHECK: pause 0x32 0x60 0x2e 0x46 # CHECK: c.eq.d $f12, $f14 0x32 0x30 0x07 0x46 # CHECK: c.eq.s $f6, $f7 0x30 0x60 0x2e 0x46 # CHECK: c.f.d $f12, $f14 Index: llvm/trunk/test/MC/Disassembler/Mips/mips64r5/valid-mips64r5.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips64r5/valid-mips64r5.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips64r5/valid-mips64r5.txt @@ -9,6 +9,7 @@ 0x00 0x00 0x00 0x40 # CHECK: ssnop 0x00 0x00 0x00 0x80 # CHECK: sll $zero, $zero, 2 0x00 0x00 0x00 0xc0 # CHECK: ehb +0x00 0x00 0x01 0x40 # CHECK: pause 0x00 0x00 0x01 0xcf # CHECK: sync 7 0x00 0x00 0x04 0xb8 # CHECK: dsll $zero, $zero, 18 0x00 0x00 0x04 0xbc # CHECK: dsll32 $zero, $zero, 18 Index: llvm/trunk/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6-el.txt @@ -17,6 +17,7 @@ 0x02 0x00 0xa0 0x49 # CHECK: bc2nez $0, 12 0x02 0x00 0xbf 0x49 # CHECK: bc2nez $31, 12 0x40 0x00 0xa6 0x20 # CHECK: beqc $5, $6, 260 +0x40 0x01 0x00 0x00 # CHECK: pause 0x4d 0x01 0x02 0x20 # CHECK: beqzalc $2, 1336 0x90 0x46 0xa0 0xd8 # CHECK: beqzc $5, 72260 0xfa 0xff 0x5f 0xd8 # CHECK: beqzc $2, -20 Index: llvm/trunk/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt +++ llvm/trunk/test/MC/Disassembler/Mips/mips64r6/valid-mips64r6.txt @@ -3,6 +3,8 @@ 0x00 0x00 0x00 0x0f # CHECK: sync 0x00 0x00 0x00 0x40 # CHECK: ssnop 0x00 0x00 0x00 0x4f # CHECK: sync 1 +0x00 0x00 0x00 0xc0 # CHECK: ehb +0x00 0x00 0x01 0x40 # CHECK: pause 0x00 0x00 0x08 0x8e # CHECK: sdbbp 34 0x00 0x03 0x00 0x34 # CHECK: teq $zero, $3 0x00 0x03 0x10 0x2e # CHECK: dneg $2, $3 Index: llvm/trunk/test/MC/Mips/mips1/valid.s =================================================================== --- llvm/trunk/test/MC/Mips/mips1/valid.s +++ llvm/trunk/test/MC/Mips/mips1/valid.s @@ -49,6 +49,8 @@ div.s $f4,$f5,$f15 divu $zero,$25,$15 ehb # CHECK: ehb # encoding: [0x00,0x00,0x00,0xc0] + # CHECK-NEXT: # rt # appropriately for each branch instruction # -# RUN: llvm-mc %s -triple=mips-unknown-linux -show-encoding -mcpu=mips64r6 2> %t0 | FileCheck %s +# RUN: llvm-mc %s -triple=mips-unknown-linux -show-encoding -show-inst -mcpu=mips64r6 2> %t0 | FileCheck %s # RUN: FileCheck %s -check-prefix=WARNING < %t0 a: .set noat @@ -204,6 +204,9 @@ not $3, $4 # CHECK: not $3, $4 # encoding: [0x00,0x80,0x18,0x27] not $3 # CHECK: not $3, $3 # encoding: [0x00,0x60,0x18,0x27] or $2, 4 # CHECK: ori $2, $2, 4 # encoding: [0x34,0x42,0x00,0x04] + pause # CHECK: pause # encoding: [0x00,0x00,0x01,0x40] + # CHECK-NEXT: #