mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-09 11:25:55 +00:00
[mips] Add PredicateControl to InstAlias's
Summary: No functional change Depends on D3649 Reviewers: vmedic Reviewed By: vmedic Differential Revision: http://reviews.llvm.org/D3672 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208334 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -296,5 +296,5 @@ let DecoderNamespace = "MicroMips", Predicates = [InMicroMips] in {
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
let Predicates = [InMicroMips] in {
|
let Predicates = [InMicroMips] in {
|
||||||
def : InstAlias<"wait", (WAIT_MM 0x0), 1>;
|
def : MipsInstAlias<"wait", (WAIT_MM 0x0), 1>;
|
||||||
}
|
}
|
||||||
|
@@ -418,40 +418,42 @@ def : MipsPat<(bswap GPR64:$rt), (DSHD (DSBH GPR64:$rt))>;
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Instruction aliases
|
// Instruction aliases
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
def : InstAlias<"move $dst, $src",
|
def : MipsInstAlias<"move $dst, $src",
|
||||||
(DADDu GPR64Opnd:$dst, GPR64Opnd:$src, ZERO_64), 1>,
|
(DADDu GPR64Opnd:$dst, GPR64Opnd:$src, ZERO_64), 1>,
|
||||||
Requires<[IsGP64]>;
|
Requires<[IsGP64]>;
|
||||||
def : InstAlias<"daddu $rs, $rt, $imm",
|
def : MipsInstAlias<"daddu $rs, $rt, $imm",
|
||||||
(DADDiu GPR64Opnd:$rs, GPR64Opnd:$rt, simm16_64:$imm),
|
(DADDiu GPR64Opnd:$rs, GPR64Opnd:$rt, simm16_64:$imm),
|
||||||
0>;
|
0>;
|
||||||
def : InstAlias<"dadd $rs, $rt, $imm",
|
def : MipsInstAlias<"dadd $rs, $rt, $imm",
|
||||||
(DADDi GPR64Opnd:$rs, GPR64Opnd:$rt, simm16_64:$imm),
|
(DADDi GPR64Opnd:$rs, GPR64Opnd:$rt, simm16_64:$imm),
|
||||||
0>;
|
0>;
|
||||||
def : InstAlias<"daddu $rs, $imm",
|
def : MipsInstAlias<"daddu $rs, $imm",
|
||||||
(DADDiu GPR64Opnd:$rs, GPR64Opnd:$rs, simm16_64:$imm),
|
(DADDiu GPR64Opnd:$rs, GPR64Opnd:$rs, simm16_64:$imm),
|
||||||
0>;
|
0>;
|
||||||
def : InstAlias<"dadd $rs, $imm",
|
def : MipsInstAlias<"dadd $rs, $imm",
|
||||||
(DADDi GPR64Opnd:$rs, GPR64Opnd:$rs, simm16_64:$imm),
|
(DADDi GPR64Opnd:$rs, GPR64Opnd:$rs, simm16_64:$imm),
|
||||||
0>;
|
0>;
|
||||||
def : InstAlias<"add $rs, $imm",
|
def : MipsInstAlias<"add $rs, $imm",
|
||||||
(ADDi GPR32Opnd:$rs, GPR32Opnd:$rs, simm16:$imm),
|
(ADDi GPR32Opnd:$rs, GPR32Opnd:$rs, simm16:$imm),
|
||||||
0>;
|
0>;
|
||||||
def : InstAlias<"addu $rs, $imm",
|
def : MipsInstAlias<"addu $rs, $imm",
|
||||||
(ADDiu GPR32Opnd:$rs, GPR32Opnd:$rs, simm16:$imm),
|
(ADDiu GPR32Opnd:$rs, GPR32Opnd:$rs, simm16:$imm),
|
||||||
0>;
|
0>;
|
||||||
def : InstAlias<"dsll $rd, $rt, $rs",
|
def : MipsInstAlias<"dsll $rd, $rt, $rs",
|
||||||
(DSLLV GPR64Opnd:$rd, GPR64Opnd:$rt, GPR32Opnd:$rs), 0>;
|
(DSLLV GPR64Opnd:$rd, GPR64Opnd:$rt, GPR32Opnd:$rs), 0>;
|
||||||
def : InstAlias<"dsubu $rt, $rs, $imm",
|
def : MipsInstAlias<"dsubu $rt, $rs, $imm",
|
||||||
(DADDiu GPR64Opnd:$rt, GPR64Opnd:$rs,
|
(DADDiu GPR64Opnd:$rt, GPR64Opnd:$rs,
|
||||||
InvertedImOperand64: $imm),0>;
|
InvertedImOperand64:$imm), 0>;
|
||||||
def : InstAlias<"dsub $rs, $imm",
|
def : MipsInstAlias<"dsub $rs, $imm",
|
||||||
(DADDi GPR64Opnd:$rs, GPR64Opnd:$rs, InvertedImOperand64:$imm),
|
(DADDi GPR64Opnd:$rs, GPR64Opnd:$rs,
|
||||||
0>;
|
InvertedImOperand64:$imm),
|
||||||
def : InstAlias<"dsubu $rs, $imm",
|
0>;
|
||||||
(DADDiu GPR64Opnd:$rs, GPR64Opnd:$rs, InvertedImOperand64:$imm),
|
def : MipsInstAlias<"dsubu $rs, $imm",
|
||||||
0>;
|
(DADDiu GPR64Opnd:$rs, GPR64Opnd:$rs,
|
||||||
def : InstAlias<"dsrl $rd, $rt, $rs",
|
InvertedImOperand64:$imm),
|
||||||
(DSRLV GPR64Opnd:$rd, GPR64Opnd:$rt, GPR32Opnd:$rs), 0>;
|
0>;
|
||||||
|
def : MipsInstAlias<"dsrl $rd, $rt, $rs",
|
||||||
|
(DSRLV GPR64Opnd:$rd, GPR64Opnd:$rt, GPR32Opnd:$rs), 0>;
|
||||||
|
|
||||||
/// Move between CPU and coprocessor registers
|
/// Move between CPU and coprocessor registers
|
||||||
let DecoderNamespace = "Mips64", Predicates = [HasMips64] in {
|
let DecoderNamespace = "Mips64", Predicates = [HasMips64] in {
|
||||||
@@ -462,8 +464,8 @@ def DMTC2 : MFC3OP<"dmtc2", GPR64Opnd>, MFC3OP_FM<0x12, 5>;
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Two operand (implicit 0 selector) versions:
|
// Two operand (implicit 0 selector) versions:
|
||||||
def : InstAlias<"dmfc0 $rt, $rd", (DMFC0 GPR64Opnd:$rt, GPR64Opnd:$rd, 0), 0>;
|
def : MipsInstAlias<"dmfc0 $rt, $rd", (DMFC0 GPR64Opnd:$rt, GPR64Opnd:$rd, 0), 0>;
|
||||||
def : InstAlias<"dmtc0 $rt, $rd", (DMTC0 GPR64Opnd:$rt, GPR64Opnd:$rd, 0), 0>;
|
def : MipsInstAlias<"dmtc0 $rt, $rd", (DMTC0 GPR64Opnd:$rt, GPR64Opnd:$rd, 0), 0>;
|
||||||
def : InstAlias<"dmfc2 $rt, $rd", (DMFC2 GPR64Opnd:$rt, GPR64Opnd:$rd, 0), 0>;
|
def : MipsInstAlias<"dmfc2 $rt, $rd", (DMFC2 GPR64Opnd:$rt, GPR64Opnd:$rd, 0), 0>;
|
||||||
def : InstAlias<"dmtc2 $rt, $rd", (DMTC2 GPR64Opnd:$rt, GPR64Opnd:$rd, 0), 0>;
|
def : MipsInstAlias<"dmtc2 $rt, $rd", (DMTC2 GPR64Opnd:$rt, GPR64Opnd:$rd, 0), 0>;
|
||||||
|
|
||||||
|
@@ -565,8 +565,8 @@ def ExtractElementF64_64 : ExtractElementF64Base<FGR64Opnd>,
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// InstAliases.
|
// InstAliases.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
def : InstAlias<"bc1t $offset", (BC1T FCC0, brtarget:$offset)>;
|
def : MipsInstAlias<"bc1t $offset", (BC1T FCC0, brtarget:$offset)>;
|
||||||
def : InstAlias<"bc1f $offset", (BC1F FCC0, brtarget:$offset)>;
|
def : MipsInstAlias<"bc1f $offset", (BC1F FCC0, brtarget:$offset)>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Floating Point Patterns
|
// Floating Point Patterns
|
||||||
|
@@ -221,6 +221,9 @@ class MipsPat<dag pattern, dag result> : Pat<pattern, result>, PredicateControl
|
|||||||
let EncodingPredicates = [HasStdEnc];
|
let EncodingPredicates = [HasStdEnc];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MipsInstAlias<string Asm, dag Result, bit Emit = 0b1> :
|
||||||
|
InstAlias<Asm, Result, Emit>, PredicateControl;
|
||||||
|
|
||||||
class IsCommutable {
|
class IsCommutable {
|
||||||
bit isCommutable = 1;
|
bit isCommutable = 1;
|
||||||
}
|
}
|
||||||
@@ -1220,75 +1223,78 @@ def TLBWR : TLB<"tlbwr">, COP0_TLB_FM<0x06>;
|
|||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Instruction aliases
|
// Instruction aliases
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
def : InstAlias<"move $dst, $src",
|
def : MipsInstAlias<"move $dst, $src",
|
||||||
(ADDu GPR32Opnd:$dst, GPR32Opnd:$src,ZERO), 1>,
|
(ADDu GPR32Opnd:$dst, GPR32Opnd:$src,ZERO), 1>,
|
||||||
Requires<[IsGP32, NotInMicroMips]>;
|
Requires<[IsGP32, NotInMicroMips]>;
|
||||||
def : InstAlias<"bal $offset", (BGEZAL ZERO, brtarget:$offset), 0>;
|
def : MipsInstAlias<"bal $offset", (BGEZAL ZERO, brtarget:$offset), 0>;
|
||||||
def : InstAlias<"addu $rs, $rt, $imm",
|
def : MipsInstAlias<"addu $rs, $rt, $imm",
|
||||||
(ADDiu GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm), 0>;
|
(ADDiu GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm), 0>;
|
||||||
def : InstAlias<"add $rs, $rt, $imm",
|
def : MipsInstAlias<"add $rs, $rt, $imm",
|
||||||
(ADDi GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm), 0>;
|
(ADDi GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm), 0>;
|
||||||
def : InstAlias<"and $rs, $rt, $imm",
|
def : MipsInstAlias<"and $rs, $rt, $imm",
|
||||||
(ANDi GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm), 0>;
|
(ANDi GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm), 0>;
|
||||||
def : InstAlias<"j $rs", (JR GPR32Opnd:$rs), 0>;
|
def : MipsInstAlias<"j $rs", (JR GPR32Opnd:$rs), 0>;
|
||||||
let Predicates = [NotInMicroMips] in {
|
let Predicates = [NotInMicroMips] in {
|
||||||
def : InstAlias<"jalr $rs", (JALR RA, GPR32Opnd:$rs), 0>;
|
def : MipsInstAlias<"jalr $rs", (JALR RA, GPR32Opnd:$rs), 0>;
|
||||||
}
|
}
|
||||||
def : InstAlias<"jal $rs", (JALR RA, GPR32Opnd:$rs), 0>;
|
def : MipsInstAlias<"jal $rs", (JALR RA, GPR32Opnd:$rs), 0>;
|
||||||
def : InstAlias<"jal $rd,$rs", (JALR GPR32Opnd:$rd, GPR32Opnd:$rs), 0>;
|
def : MipsInstAlias<"jal $rd,$rs", (JALR GPR32Opnd:$rd, GPR32Opnd:$rs), 0>;
|
||||||
def : InstAlias<"not $rt, $rs",
|
def : MipsInstAlias<"not $rt, $rs",
|
||||||
(NOR GPR32Opnd:$rt, GPR32Opnd:$rs, ZERO), 0>;
|
(NOR GPR32Opnd:$rt, GPR32Opnd:$rs, ZERO), 0>;
|
||||||
def : InstAlias<"neg $rt, $rs",
|
def : MipsInstAlias<"neg $rt, $rs",
|
||||||
(SUB GPR32Opnd:$rt, ZERO, GPR32Opnd:$rs), 1>;
|
(SUB GPR32Opnd:$rt, ZERO, GPR32Opnd:$rs), 1>;
|
||||||
def : InstAlias<"negu $rt",
|
def : MipsInstAlias<"negu $rt",
|
||||||
(SUBu GPR32Opnd:$rt, ZERO, GPR32Opnd:$rt), 0>;
|
(SUBu GPR32Opnd:$rt, ZERO, GPR32Opnd:$rt), 0>;
|
||||||
def : InstAlias<"negu $rt, $rs",
|
def : MipsInstAlias<"negu $rt, $rs",
|
||||||
(SUBu GPR32Opnd:$rt, ZERO, GPR32Opnd:$rs), 1>;
|
(SUBu GPR32Opnd:$rt, ZERO, GPR32Opnd:$rs), 1>;
|
||||||
def : InstAlias<"slt $rs, $rt, $imm",
|
def : MipsInstAlias<"slt $rs, $rt, $imm",
|
||||||
(SLTi GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm), 0>;
|
(SLTi GPR32Opnd:$rs, GPR32Opnd:$rt, simm16:$imm), 0>;
|
||||||
def : InstAlias<"sltu $rt, $rs, $imm",
|
def : MipsInstAlias<"sltu $rt, $rs, $imm",
|
||||||
(SLTiu GPR32Opnd:$rt, GPR32Opnd:$rs, simm16:$imm), 0>;
|
(SLTiu GPR32Opnd:$rt, GPR32Opnd:$rs, simm16:$imm), 0>;
|
||||||
def : InstAlias<"xor $rs, $rt, $imm",
|
def : MipsInstAlias<"xor $rs, $rt, $imm",
|
||||||
(XORi GPR32Opnd:$rs, GPR32Opnd:$rt, uimm16:$imm), 0>;
|
(XORi GPR32Opnd:$rs, GPR32Opnd:$rt, uimm16:$imm), 0>;
|
||||||
def : InstAlias<"or $rs, $rt, $imm",
|
def : MipsInstAlias<"or $rs, $rt, $imm",
|
||||||
(ORi GPR32Opnd:$rs, GPR32Opnd:$rt, uimm16:$imm), 0>;
|
(ORi GPR32Opnd:$rs, GPR32Opnd:$rt, uimm16:$imm), 0>;
|
||||||
def : InstAlias<"nop", (SLL ZERO, ZERO, 0), 1>;
|
def : MipsInstAlias<"nop", (SLL ZERO, ZERO, 0), 1>;
|
||||||
def : InstAlias<"mfc0 $rt, $rd", (MFC0 GPR32Opnd:$rt, GPR32Opnd:$rd, 0), 0>;
|
def : MipsInstAlias<"mfc0 $rt, $rd", (MFC0 GPR32Opnd:$rt, GPR32Opnd:$rd, 0), 0>;
|
||||||
def : InstAlias<"mtc0 $rt, $rd", (MTC0 GPR32Opnd:$rt, GPR32Opnd:$rd, 0), 0>;
|
def : MipsInstAlias<"mtc0 $rt, $rd", (MTC0 GPR32Opnd:$rt, GPR32Opnd:$rd, 0), 0>;
|
||||||
def : InstAlias<"mfc2 $rt, $rd", (MFC2 GPR32Opnd:$rt, GPR32Opnd:$rd, 0), 0>;
|
def : MipsInstAlias<"mfc2 $rt, $rd", (MFC2 GPR32Opnd:$rt, GPR32Opnd:$rd, 0), 0>;
|
||||||
def : InstAlias<"mtc2 $rt, $rd", (MTC2 GPR32Opnd:$rt, GPR32Opnd:$rd, 0), 0>;
|
def : MipsInstAlias<"mtc2 $rt, $rd", (MTC2 GPR32Opnd:$rt, GPR32Opnd:$rd, 0), 0>;
|
||||||
def : InstAlias<"b $offset", (BEQ ZERO, ZERO, brtarget:$offset), 0>;
|
def : MipsInstAlias<"b $offset", (BEQ ZERO, ZERO, brtarget:$offset), 0>;
|
||||||
def : InstAlias<"bnez $rs,$offset",
|
def : MipsInstAlias<"bnez $rs,$offset",
|
||||||
(BNE GPR32Opnd:$rs, ZERO, brtarget:$offset), 0>;
|
(BNE GPR32Opnd:$rs, ZERO, brtarget:$offset), 0>;
|
||||||
def : InstAlias<"beqz $rs,$offset",
|
def : MipsInstAlias<"beqz $rs,$offset",
|
||||||
(BEQ GPR32Opnd:$rs, ZERO, brtarget:$offset), 0>;
|
(BEQ GPR32Opnd:$rs, ZERO, brtarget:$offset), 0>;
|
||||||
def : InstAlias<"syscall", (SYSCALL 0), 1>;
|
def : MipsInstAlias<"syscall", (SYSCALL 0), 1>;
|
||||||
|
|
||||||
|
def : MipsInstAlias<"break $imm", (BREAK uimm10:$imm, 0), 1>;
|
||||||
|
def : MipsInstAlias<"break", (BREAK 0, 0), 1>;
|
||||||
|
def : MipsInstAlias<"ei", (EI ZERO), 1>;
|
||||||
|
def : MipsInstAlias<"di", (DI ZERO), 1>;
|
||||||
|
|
||||||
def : InstAlias<"break $imm", (BREAK uimm10:$imm, 0), 1>;
|
def : MipsInstAlias<"teq $rs, $rt", (TEQ GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
||||||
def : InstAlias<"break", (BREAK 0, 0), 1>;
|
def : MipsInstAlias<"tge $rs, $rt", (TGE GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
||||||
def : InstAlias<"ei", (EI ZERO), 1>;
|
def : MipsInstAlias<"tgeu $rs, $rt", (TGEU GPR32Opnd:$rs, GPR32Opnd:$rt, 0),
|
||||||
def : InstAlias<"di", (DI ZERO), 1>;
|
1>;
|
||||||
|
def : MipsInstAlias<"tlt $rs, $rt", (TLT GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
||||||
def : InstAlias<"teq $rs, $rt", (TEQ GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
def : MipsInstAlias<"tltu $rs, $rt", (TLTU GPR32Opnd:$rs, GPR32Opnd:$rt, 0),
|
||||||
def : InstAlias<"tge $rs, $rt", (TGE GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
1>;
|
||||||
def : InstAlias<"tgeu $rs, $rt", (TGEU GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
def : MipsInstAlias<"tne $rs, $rt", (TNE GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
||||||
def : InstAlias<"tlt $rs, $rt", (TLT GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
def : MipsInstAlias<"sll $rd, $rt, $rs",
|
||||||
def : InstAlias<"tltu $rs, $rt", (TLTU GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
(SLLV GPR32Opnd:$rd, GPR32Opnd:$rt, GPR32Opnd:$rs), 0>;
|
||||||
def : InstAlias<"tne $rs, $rt", (TNE GPR32Opnd:$rs, GPR32Opnd:$rt, 0), 1>;
|
def : MipsInstAlias<"sub, $rd, $rs, $imm",
|
||||||
def : InstAlias<"sll $rd, $rt, $rs",
|
(ADDi GPR32Opnd:$rd, GPR32Opnd:$rs,
|
||||||
(SLLV GPR32Opnd:$rd, GPR32Opnd:$rt, GPR32Opnd:$rs), 0>;
|
InvertedImOperand:$imm)>;
|
||||||
def : InstAlias<"sub, $rd, $rs, $imm",
|
def : MipsInstAlias<"sub $rs, $imm",
|
||||||
(ADDi GPR32Opnd:$rd, GPR32Opnd:$rs, InvertedImOperand:$imm)>;
|
(ADDi GPR32Opnd:$rs, GPR32Opnd:$rs, InvertedImOperand:$imm),
|
||||||
def : InstAlias<"sub $rs, $imm",
|
0>;
|
||||||
(ADDi GPR32Opnd:$rs, GPR32Opnd:$rs, InvertedImOperand:$imm),
|
def : MipsInstAlias<"subu, $rd, $rs, $imm",
|
||||||
0>;
|
(ADDiu GPR32Opnd:$rd, GPR32Opnd:$rs,
|
||||||
def : InstAlias<"subu, $rd, $rs, $imm",
|
InvertedImOperand:$imm)>;
|
||||||
(ADDiu GPR32Opnd:$rd, GPR32Opnd:$rs, InvertedImOperand:$imm)>;
|
def : MipsInstAlias<"subu $rs, $imm", (ADDiu GPR32Opnd:$rs, GPR32Opnd:$rs,
|
||||||
def : InstAlias<"subu $rs, $imm",
|
InvertedImOperand:$imm), 0>;
|
||||||
(ADDiu GPR32Opnd:$rs, GPR32Opnd:$rs, InvertedImOperand:$imm),
|
def : MipsInstAlias<"srl $rd, $rt, $rs",
|
||||||
0>;
|
(SRLV GPR32Opnd:$rd, GPR32Opnd:$rt, GPR32Opnd:$rs), 0>;
|
||||||
def : InstAlias<"srl $rd, $rt, $rs",
|
|
||||||
(SRLV GPR32Opnd:$rd, GPR32Opnd:$rt, GPR32Opnd:$rs), 0>;
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Assembler Pseudo Instructions
|
// Assembler Pseudo Instructions
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
Reference in New Issue
Block a user