mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-13 15:37:24 +00:00
Move X86 callee saved register lists to the X86CallConv .td file.
Add a trivial implementation of the getCallPreservedMask() hook. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148347 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ec572539dd
commit
0bd2ae92b0
lib/Target/X86
@ -404,3 +404,18 @@ def CC_X86 : CallingConv<[
|
||||
CCIfSubtarget<"is64Bit()", CCDelegateTo<CC_X86_64>>,
|
||||
CCDelegateTo<CC_X86_32>
|
||||
]>;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Callee-saved Registers.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
def CSR_Ghc : CalleeSavedRegs<(add)>;
|
||||
|
||||
def CSR_32 : CalleeSavedRegs<(add ESI, EDI, EBX, EBP)>;
|
||||
def CSR_64 : CalleeSavedRegs<(add RBX, R12, R13, R14, R15, RBP)>;
|
||||
|
||||
def CSR_32EHRet : CalleeSavedRegs<(add EAX, EDX, CSR_32)>;
|
||||
def CSR_64EHRet : CalleeSavedRegs<(add RAX, RDX, CSR_64)>;
|
||||
|
||||
def CSR_Win64 : CalleeSavedRegs<(add RBX, RBP, RDI, RSI, R12, R13, R14, R15,
|
||||
(sequence "XMM%u", 6, 15))>;
|
||||
|
@ -237,45 +237,29 @@ X86RegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {
|
||||
ghcCall = (F ? F->getCallingConv() == CallingConv::GHC : false);
|
||||
}
|
||||
|
||||
static const unsigned GhcCalleeSavedRegs[] = {
|
||||
0
|
||||
};
|
||||
|
||||
static const unsigned CalleeSavedRegs32Bit[] = {
|
||||
X86::ESI, X86::EDI, X86::EBX, X86::EBP, 0
|
||||
};
|
||||
|
||||
static const unsigned CalleeSavedRegs32EHRet[] = {
|
||||
X86::EAX, X86::EDX, X86::ESI, X86::EDI, X86::EBX, X86::EBP, 0
|
||||
};
|
||||
|
||||
static const unsigned CalleeSavedRegs64Bit[] = {
|
||||
X86::RBX, X86::R12, X86::R13, X86::R14, X86::R15, X86::RBP, 0
|
||||
};
|
||||
|
||||
static const unsigned CalleeSavedRegs64EHRet[] = {
|
||||
X86::RAX, X86::RDX, X86::RBX, X86::R12,
|
||||
X86::R13, X86::R14, X86::R15, X86::RBP, 0
|
||||
};
|
||||
|
||||
static const unsigned CalleeSavedRegsWin64[] = {
|
||||
X86::RBX, X86::RBP, X86::RDI, X86::RSI,
|
||||
X86::R12, X86::R13, X86::R14, X86::R15,
|
||||
X86::XMM6, X86::XMM7, X86::XMM8, X86::XMM9,
|
||||
X86::XMM10, X86::XMM11, X86::XMM12, X86::XMM13,
|
||||
X86::XMM14, X86::XMM15, 0
|
||||
};
|
||||
|
||||
if (ghcCall) {
|
||||
return GhcCalleeSavedRegs;
|
||||
} else if (Is64Bit) {
|
||||
if (ghcCall)
|
||||
return CSR_Ghc_SaveList;
|
||||
if (Is64Bit) {
|
||||
if (IsWin64)
|
||||
return CalleeSavedRegsWin64;
|
||||
else
|
||||
return (callsEHReturn ? CalleeSavedRegs64EHRet : CalleeSavedRegs64Bit);
|
||||
} else {
|
||||
return (callsEHReturn ? CalleeSavedRegs32EHRet : CalleeSavedRegs32Bit);
|
||||
return CSR_Win64_SaveList;
|
||||
if (callsEHReturn)
|
||||
return CSR_64EHRet_SaveList;
|
||||
return CSR_64_SaveList;
|
||||
}
|
||||
if (callsEHReturn)
|
||||
return CSR_32EHRet_SaveList;
|
||||
return CSR_32_SaveList;
|
||||
}
|
||||
|
||||
const uint32_t*
|
||||
X86RegisterInfo::getCallPreservedMask(CallingConv::ID CC) const {
|
||||
if (CC == CallingConv::GHC)
|
||||
return CSR_Ghc_RegMask;
|
||||
if (!Is64Bit)
|
||||
return CSR_32_RegMask;
|
||||
if (IsWin64)
|
||||
return CSR_Win64_RegMask;
|
||||
return CSR_64_RegMask;
|
||||
}
|
||||
|
||||
BitVector X86RegisterInfo::getReservedRegs(const MachineFunction &MF) const {
|
||||
|
@ -96,6 +96,7 @@ public:
|
||||
/// getCalleeSavedRegs - Return a null-terminated list of all of the
|
||||
/// callee-save registers on this target.
|
||||
const unsigned *getCalleeSavedRegs(const MachineFunction* MF = 0) const;
|
||||
const uint32_t *getCallPreservedMask(CallingConv::ID) const;
|
||||
|
||||
/// getReservedRegs - Returns a bitset indexed by physical register number
|
||||
/// indicating if a register is a special register that has particular uses and
|
||||
|
Loading…
x
Reference in New Issue
Block a user