mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-06 20:32:19 +00:00
[mips] Refactor conditional branch instructions with one register operand.
Separate encoding information from the rest. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170659 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
488fdce982
commit
5c54025645
@ -168,10 +168,10 @@ def SCD_P8 : SCBase<0x3c, "scd", CPU64Regs, mem64>,
|
||||
def JR64 : IndirectBranch<CPU64Regs>;
|
||||
def BEQ64 : CBranch<"beq", seteq, CPU64Regs>, BEQ_FM<4>;
|
||||
def BNE64 : CBranch<"bne", setne, CPU64Regs>, BEQ_FM<5>;
|
||||
def BGEZ64 : CBranchZero<0x01, 1, "bgez", setge, CPU64Regs>;
|
||||
def BGTZ64 : CBranchZero<0x07, 0, "bgtz", setgt, CPU64Regs>;
|
||||
def BLEZ64 : CBranchZero<0x06, 0, "blez", setle, CPU64Regs>;
|
||||
def BLTZ64 : CBranchZero<0x01, 0, "bltz", setlt, CPU64Regs>;
|
||||
def BGEZ64 : CBranchZero<"bgez", setge, CPU64Regs>, BGEZ_FM<1, 1>;
|
||||
def BGTZ64 : CBranchZero<"bgtz", setgt, CPU64Regs>, BGEZ_FM<7, 0>;
|
||||
def BLEZ64 : CBranchZero<"blez", setle, CPU64Regs>, BGEZ_FM<6, 0>;
|
||||
def BLTZ64 : CBranchZero<"bltz", setlt, CPU64Regs>, BGEZ_FM<1, 0>;
|
||||
}
|
||||
let DecoderNamespace = "Mips64" in
|
||||
def JALR64 : JumpLinkReg<0x00, 0x09, "jalr", CPU64Regs>;
|
||||
|
@ -265,6 +265,18 @@ class BEQ_FM<bits<6> op> {
|
||||
let Inst{15-0} = offset;
|
||||
}
|
||||
|
||||
class BGEZ_FM<bits<6> op, bits<5> funct> {
|
||||
bits<5> rs;
|
||||
bits<16> offset;
|
||||
|
||||
bits<32> Inst;
|
||||
|
||||
let Inst{31-26} = op;
|
||||
let Inst{25-21} = rs;
|
||||
let Inst{20-16} = funct;
|
||||
let Inst{15-0} = offset;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// FLOATING POINT INSTRUCTION FORMATS
|
||||
|
@ -556,12 +556,10 @@ class CBranch<string opstr, PatFrag cond_op, RegisterClass RC> :
|
||||
let Defs = [AT];
|
||||
}
|
||||
|
||||
class CBranchZero<bits<6> op, bits<5> _rt, string instr_asm, PatFrag cond_op,
|
||||
RegisterClass RC>:
|
||||
BranchBase<op, (outs), (ins RC:$rs, brtarget:$imm16),
|
||||
!strconcat(instr_asm, "\t$rs, $imm16"),
|
||||
[(brcond (i32 (cond_op RC:$rs, 0)), bb:$imm16)], IIBranch> {
|
||||
let rt = _rt;
|
||||
class CBranchZero<string opstr, PatFrag cond_op, RegisterClass RC> :
|
||||
InstSE<(outs), (ins RC:$rs, brtarget:$offset),
|
||||
!strconcat(opstr, "\t$rs, $offset"),
|
||||
[(brcond (i32 (cond_op RC:$rs, 0)), bb:$offset)], IIBranch, FrmI> {
|
||||
let isBranch = 1;
|
||||
let isTerminator = 1;
|
||||
let hasDelaySlot = 1;
|
||||
@ -999,10 +997,10 @@ def JR : IndirectBranch<CPURegs>;
|
||||
def B : UncondBranch<0x04, "b">;
|
||||
def BEQ : CBranch<"beq", seteq, CPURegs>, BEQ_FM<4>;
|
||||
def BNE : CBranch<"bne", setne, CPURegs>, BEQ_FM<5>;
|
||||
def BGEZ : CBranchZero<0x01, 1, "bgez", setge, CPURegs>;
|
||||
def BGTZ : CBranchZero<0x07, 0, "bgtz", setgt, CPURegs>;
|
||||
def BLEZ : CBranchZero<0x06, 0, "blez", setle, CPURegs>;
|
||||
def BLTZ : CBranchZero<0x01, 0, "bltz", setlt, CPURegs>;
|
||||
def BGEZ : CBranchZero<"bgez", setge, CPURegs>, BGEZ_FM<1, 1>;
|
||||
def BGTZ : CBranchZero<"bgtz", setgt, CPURegs>, BGEZ_FM<7, 0>;
|
||||
def BLEZ : CBranchZero<"blez", setle, CPURegs>, BGEZ_FM<6, 0>;
|
||||
def BLTZ : CBranchZero<"bltz", setlt, CPURegs>, BGEZ_FM<1, 0>;
|
||||
|
||||
let rt = 0, rs = 0, isBranch = 1, isTerminator = 1, isBarrier = 1,
|
||||
hasDelaySlot = 1, Defs = [RA] in
|
||||
|
Loading…
Reference in New Issue
Block a user