forked from OSchip/llvm-project
[mips][microMIPSr6] Implement NOR, OR, ORI, XOR and XORI instructions
Differential Revision: http://reviews.llvm.org/D8800 llvm-svn: 237697
This commit is contained in:
parent
299fed6b7d
commit
dde61c00c3
|
@ -44,11 +44,16 @@ class MUL_MMR6_ENC : ARITH_FM_MMR6<"mul", 0x18>;
|
|||
class MUH_MMR6_ENC : ARITH_FM_MMR6<"muh", 0x58>;
|
||||
class MULU_MMR6_ENC : ARITH_FM_MMR6<"mulu", 0x98>;
|
||||
class MUHU_MMR6_ENC : ARITH_FM_MMR6<"muhu", 0xd8>;
|
||||
class NOR_MMR6_ENC : ARITH_FM_MMR6<"nor", 0x2d0>;
|
||||
class OR_MMR6_ENC : ARITH_FM_MMR6<"or", 0x290>;
|
||||
class ORI_MMR6_ENC : ADDI_FM_MMR6<"ori", 0x14>;
|
||||
class PREF_MMR6_ENC : CACHE_PREF_FM_MMR6<0b011000, 0b0010>;
|
||||
class SELEQZ_MMR6_ENC : POOL32A_FM_MMR6<0b0101000000>;
|
||||
class SELNEZ_MMR6_ENC : POOL32A_FM_MMR6<0b0110000000>;
|
||||
class SUB_MMR6_ENC : ARITH_FM_MMR6<"sub", 0x190>;
|
||||
class SUBU_MMR6_ENC : ARITH_FM_MMR6<"subu", 0x1d0>;
|
||||
class XOR_MMR6_ENC : ARITH_FM_MMR6<"xor", 0x310>;
|
||||
class XORI_MMR6_ENC : ADDI_FM_MMR6<"xori", 0x1c>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
|
@ -202,6 +207,11 @@ class MOD_MMR6_DESC : ArithLogicR<"mod", GPR32Opnd>;
|
|||
class MODU_MMR6_DESC : ArithLogicR<"modu", GPR32Opnd>;
|
||||
class AND_MMR6_DESC : ArithLogicR<"and", GPR32Opnd>;
|
||||
class ANDI_MMR6_DESC : ArithLogicI<"andi", simm16, GPR32Opnd>;
|
||||
class NOR_MMR6_DESC : ArithLogicR<"nor", GPR32Opnd>;
|
||||
class OR_MMR6_DESC : ArithLogicR<"or", GPR32Opnd>;
|
||||
class ORI_MMR6_DESC : ArithLogicI<"ori", simm16, GPR32Opnd>;
|
||||
class XOR_MMR6_DESC : ArithLogicR<"xor", GPR32Opnd>;
|
||||
class XORI_MMR6_DESC : ArithLogicI<"xori", simm16, GPR32Opnd>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
|
@ -241,6 +251,9 @@ def MUL_MMR6 : R6MMR6Rel, MUL_MMR6_DESC, MUL_MMR6_ENC, ISA_MICROMIPS32R6;
|
|||
def MUH_MMR6 : R6MMR6Rel, MUH_MMR6_DESC, MUH_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def MULU_MMR6 : R6MMR6Rel, MULU_MMR6_DESC, MULU_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def MUHU_MMR6 : R6MMR6Rel, MUHU_MMR6_DESC, MUHU_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def NOR_MMR6 : StdMMR6Rel, NOR_MMR6_DESC, NOR_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def OR_MMR6 : StdMMR6Rel, OR_MMR6_DESC, OR_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def ORI_MMR6 : StdMMR6Rel, ORI_MMR6_DESC, ORI_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def PREF_MMR6 : R6MMR6Rel, PREF_MMR6_ENC, PREF_MMR6_DESC, ISA_MICROMIPS32R6;
|
||||
def SELEQZ_MMR6 : R6MMR6Rel, SELEQZ_MMR6_ENC, SELEQZ_MMR6_DESC,
|
||||
ISA_MICROMIPS32R6;
|
||||
|
@ -248,4 +261,6 @@ def SELNEZ_MMR6 : R6MMR6Rel, SELNEZ_MMR6_ENC, SELNEZ_MMR6_DESC,
|
|||
ISA_MICROMIPS32R6;
|
||||
def SUB_MMR6 : StdMMR6Rel, SUB_MMR6_DESC, SUB_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def SUBU_MMR6 : StdMMR6Rel, SUBU_MMR6_DESC, SUBU_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def XOR_MMR6 : StdMMR6Rel, XOR_MMR6_DESC, XOR_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
def XORI_MMR6 : StdMMR6Rel, XORI_MMR6_DESC, XORI_MMR6_ENC, ISA_MICROMIPS32R6;
|
||||
}
|
||||
|
|
|
@ -1138,11 +1138,11 @@ def ANDi : MMRel, StdMMR6Rel,
|
|||
ArithLogicI<"andi", uimm16, GPR32Opnd, II_ANDI, immZExt16, and>,
|
||||
ADDI_FM<0xc>;
|
||||
}
|
||||
def ORi : MMRel, ArithLogicI<"ori", uimm16, GPR32Opnd, II_ORI, immZExt16,
|
||||
or>,
|
||||
def ORi : MMRel, StdMMR6Rel,
|
||||
ArithLogicI<"ori", uimm16, GPR32Opnd, II_ORI, immZExt16, or>,
|
||||
ADDI_FM<0xd>;
|
||||
def XORi : MMRel, ArithLogicI<"xori", uimm16, GPR32Opnd, II_XORI, immZExt16,
|
||||
xor>,
|
||||
def XORi : MMRel, StdMMR6Rel,
|
||||
ArithLogicI<"xori", uimm16, GPR32Opnd, II_XORI, immZExt16, xor>,
|
||||
ADDI_FM<0xe>;
|
||||
def LUi : MMRel, LoadUpper<"lui", GPR32Opnd, uimm16>, LUI_FM;
|
||||
let AdditionalPredicates = [NotInMicroMips] in {
|
||||
|
@ -1162,12 +1162,12 @@ def SLTu : MMRel, SetCC_R<"sltu", setult, GPR32Opnd>, ADD_FM<0, 0x2b>;
|
|||
let AdditionalPredicates = [NotInMicroMips] in {
|
||||
def AND : MMRel, StdMMR6Rel, ArithLogicR<"and", GPR32Opnd, 1, II_AND, and>,
|
||||
ADD_FM<0, 0x24>;
|
||||
def OR : MMRel, ArithLogicR<"or", GPR32Opnd, 1, II_OR, or>,
|
||||
def OR : MMRel, StdMMR6Rel, ArithLogicR<"or", GPR32Opnd, 1, II_OR, or>,
|
||||
ADD_FM<0, 0x25>;
|
||||
def XOR : MMRel, ArithLogicR<"xor", GPR32Opnd, 1, II_XOR, xor>,
|
||||
def XOR : MMRel, StdMMR6Rel, ArithLogicR<"xor", GPR32Opnd, 1, II_XOR, xor>,
|
||||
ADD_FM<0, 0x26>;
|
||||
}
|
||||
def NOR : MMRel, LogicNOR<"nor", GPR32Opnd>, ADD_FM<0, 0x27>;
|
||||
def NOR : MMRel, StdMMR6Rel, LogicNOR<"nor", GPR32Opnd>, ADD_FM<0, 0x27>;
|
||||
|
||||
/// Shift Instructions
|
||||
let AdditionalPredicates = [NotInMicroMips] in {
|
||||
|
|
|
@ -60,6 +60,12 @@
|
|||
|
||||
0x00 0xa4,0x18,0xd8 # CHECK: muhu $3, $4, $5
|
||||
|
||||
0x00 0xa4 0x1a 0xd0 # CHECK: nor $3, $4, $5
|
||||
|
||||
0x00,0xa4,0x1a,0x90 # CHECK: or $3, $4, $5
|
||||
|
||||
0x50 0x64 0x04 0xd2 # CHECK: ori $3, $4, 1234
|
||||
|
||||
# CHECK: pref 1, 8($5)
|
||||
0x60 0x25 0x20 0x08
|
||||
|
||||
|
@ -71,3 +77,7 @@
|
|||
|
||||
0x00 0xa4 0x19 0xd0 # CHECK: subu $3, $4, $5
|
||||
|
||||
0x00 0xa4 0x1b 0x10 # CHECK: xor $3, $4, $5
|
||||
|
||||
0x70 0x64 0x04 0xd2 # CHECK: xori $3, $4, 1234
|
||||
|
||||
|
|
|
@ -29,9 +29,14 @@
|
|||
muh $3, $4, $5 # CHECK muh $3, $4, $5 # encoding: [0x00,0xa4,0x18,0x58]
|
||||
mulu $3, $4, $5 # CHECK mulu $3, $4, $5 # encoding: [0x00,0xa4,0x18,0x98]
|
||||
muhu $3, $4, $5 # CHECK muhu $3, $4, $5 # encoding: [0x00,0xa4,0x18,0xd8]
|
||||
nor $3, $4, $5 # CHECK: nor $3, $4, $5 # encoding: [0x00,0xa4,0x1a,0xd0]
|
||||
or $3, $4, $5 # CHECK: or $3, $4, $5 # encoding: [0x00,0xa4,0x1a,0x90]
|
||||
ori $3, $4, 1234 # CHECK: ori $3, $4, 1234 # encoding: [0x50,0x64,0x04,0xd2]
|
||||
pref 1, 8($5) # CHECK: pref 1, 8($5) # encoding: [0x60,0x25,0x20,0x08]
|
||||
seleqz $2,$3,$4 # CHECK: seleqz $2, $3, $4 # encoding: [0x00,0x83,0x11,0x40]
|
||||
selnez $2,$3,$4 # CHECK: selnez $2, $3, $4 # encoding: [0x00,0x83,0x11,0x80]
|
||||
sub $3, $4, $5 # CHECK: sub $3, $4, $5 # encoding: [0x00,0xa4,0x19,0x90]
|
||||
subu $3, $4, $5 # CHECK: subu $3, $4, $5 # encoding: [0x00,0xa4,0x19,0xd0]
|
||||
xor $3, $4, $5 # CHECK: xor $3, $4, $5 # encoding: [0x00,0xa4,0x1b,0x10]
|
||||
xori $3, $4, 1234 # CHECK: xori $3, $4, 1234 # encoding: [0x70,0x64,0x04,0xd2]
|
||||
|
||||
|
|
Loading…
Reference in New Issue