forked from OSchip/llvm-project
Move Thumb tail call pseudos to Thumb.td file.
Fix a FIXME. llvm-svn: 134727
This commit is contained in:
parent
71123fc422
commit
166cd88645
|
@ -1527,7 +1527,6 @@ def BXJ : ABI<0b0001, (outs), (ins GPR:$func), NoItinerary, "bxj", "\t$func",
|
|||
|
||||
// Tail calls.
|
||||
|
||||
// FIXME: The Thumb versions of these should live in ARMInstrThumb.td
|
||||
let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in {
|
||||
// Darwin versions.
|
||||
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))>,
|
||||
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),
|
||||
Size4Bytes, IIC_Br, [],
|
||||
(BX GPR:$dst)>,
|
||||
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).
|
||||
|
@ -1571,17 +1563,10 @@ let isCall = 1, isTerminator = 1, isReturn = 1, isBarrier = 1 in {
|
|||
(Bcc br_target:$dst, (ops 14, zero_reg))>,
|
||||
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),
|
||||
Size4Bytes, IIC_Br, [],
|
||||
(BX GPR:$dst)>,
|
||||
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.16 B: Encoding T1
|
||||
// If Inst{11-8} == 0b1111 then SEE SVC
|
||||
|
|
Loading…
Reference in New Issue