mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-26 05:25:47 +00:00
Move Thumb tail call pseudos to Thumb.td file.
Fix a FIXME. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134727 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1527,7 +1527,6 @@ def BXJ : ABI<0b0001, (outs), (ins GPR:$func), NoItinerary, "bxj", "\t$func",
|
|||||||
|
|
||||||
// Tail calls.
|
// Tail calls.
|
||||||
|
|
||||||
// FIXME: The Thumb versions of these should live in ARMInstrThumb.td
|
|
||||||
let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in {
|
let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in {
|
||||||
// Darwin versions.
|
// Darwin versions.
|
||||||
let Defs = [R0, R1, R2, R3, R9, R12, QQQQ0, QQQQ2, QQQQ3, PC],
|
let Defs = [R0, R1, R2, R3, R9, R12, QQQQ0, QQQQ2, QQQQ3, PC],
|
||||||
@@ -1543,18 +1542,11 @@ let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in {
|
|||||||
(Bcc br_target:$dst, (ops 14, zero_reg))>,
|
(Bcc br_target:$dst, (ops 14, zero_reg))>,
|
||||||
Requires<[IsARM, IsDarwin]>;
|
Requires<[IsARM, IsDarwin]>;
|
||||||
|
|
||||||
def tTAILJMPd: tPseudoInst<(outs), (ins brtarget:$dst, variable_ops),
|
|
||||||
Size4Bytes, IIC_Br,
|
|
||||||
[]>, Requires<[IsThumb, IsDarwin]>;
|
|
||||||
|
|
||||||
def TAILJMPr : ARMPseudoExpand<(outs), (ins tcGPR:$dst, variable_ops),
|
def TAILJMPr : ARMPseudoExpand<(outs), (ins tcGPR:$dst, variable_ops),
|
||||||
Size4Bytes, IIC_Br, [],
|
Size4Bytes, IIC_Br, [],
|
||||||
(BX GPR:$dst)>,
|
(BX GPR:$dst)>,
|
||||||
Requires<[IsARM, IsDarwin]>;
|
Requires<[IsARM, IsDarwin]>;
|
||||||
|
|
||||||
def tTAILJMPr : tPseudoInst<(outs), (ins tcGPR:$dst, variable_ops),
|
|
||||||
Size4Bytes, IIC_Br,
|
|
||||||
[]>, Requires<[IsThumb, IsDarwin]>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Non-Darwin versions (the difference is R9).
|
// Non-Darwin versions (the difference is R9).
|
||||||
@@ -1571,17 +1563,10 @@ let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in {
|
|||||||
(Bcc br_target:$dst, (ops 14, zero_reg))>,
|
(Bcc br_target:$dst, (ops 14, zero_reg))>,
|
||||||
Requires<[IsARM, IsNotDarwin]>;
|
Requires<[IsARM, IsNotDarwin]>;
|
||||||
|
|
||||||
def tTAILJMPdND : tPseudoInst<(outs), (ins brtarget:$dst, variable_ops),
|
|
||||||
Size4Bytes, IIC_Br,
|
|
||||||
[]>, Requires<[IsThumb, IsNotDarwin]>;
|
|
||||||
|
|
||||||
def TAILJMPrND : ARMPseudoExpand<(outs), (ins tcGPR:$dst, variable_ops),
|
def TAILJMPrND : ARMPseudoExpand<(outs), (ins tcGPR:$dst, variable_ops),
|
||||||
Size4Bytes, IIC_Br, [],
|
Size4Bytes, IIC_Br, [],
|
||||||
(BX GPR:$dst)>,
|
(BX GPR:$dst)>,
|
||||||
Requires<[IsARM, IsNotDarwin]>;
|
Requires<[IsARM, IsNotDarwin]>;
|
||||||
def tTAILJMPrND : tPseudoInst<(outs), (ins tcGPR:$dst, variable_ops),
|
|
||||||
Size4Bytes, IIC_Br,
|
|
||||||
[]>, Requires<[IsThumb, IsNotDarwin]>;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -571,6 +571,31 @@ let isBranch = 1, isTerminator = 1 in {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tail calls
|
||||||
|
let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in {
|
||||||
|
// Darwin versions.
|
||||||
|
let Defs = [R0, R1, R2, R3, R9, R12, QQQQ0, QQQQ2, QQQQ3, PC],
|
||||||
|
Uses = [SP] in {
|
||||||
|
def tTAILJMPd: tPseudoInst<(outs), (ins brtarget:$dst, variable_ops),
|
||||||
|
Size4Bytes, IIC_Br,
|
||||||
|
[]>, Requires<[IsThumb, IsDarwin]>;
|
||||||
|
def tTAILJMPr : tPseudoInst<(outs), (ins tcGPR:$dst, variable_ops),
|
||||||
|
Size4Bytes, IIC_Br,
|
||||||
|
[]>, Requires<[IsThumb, IsDarwin]>;
|
||||||
|
}
|
||||||
|
// Non-Darwin versions (the difference is R9).
|
||||||
|
let Defs = [R0, R1, R2, R3, R12, QQQQ0, QQQQ2, QQQQ3, PC],
|
||||||
|
Uses = [SP] in {
|
||||||
|
def tTAILJMPdND : tPseudoInst<(outs), (ins brtarget:$dst, variable_ops),
|
||||||
|
Size4Bytes, IIC_Br,
|
||||||
|
[]>, Requires<[IsThumb, IsNotDarwin]>;
|
||||||
|
def tTAILJMPrND : tPseudoInst<(outs), (ins tcGPR:$dst, variable_ops),
|
||||||
|
Size4Bytes, IIC_Br,
|
||||||
|
[]>, Requires<[IsThumb, IsNotDarwin]>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// A8.6.218 Supervisor Call (Software Interrupt) -- for disassembly only
|
// A8.6.218 Supervisor Call (Software Interrupt) -- for disassembly only
|
||||||
// A8.6.16 B: Encoding T1
|
// A8.6.16 B: Encoding T1
|
||||||
// If Inst{11-8} == 0b1111 then SEE SVC
|
// If Inst{11-8} == 0b1111 then SEE SVC
|
||||||
|
Reference in New Issue
Block a user