diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-12-16 03:20:06 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-12-16 03:20:06 +0000 |
commit | 0c9d9fdd81a248369c822025dea11ddd0884944c (patch) | |
tree | 0732de3a40ff43349299cb306d47e68697b4f635 /llvm/lib/Target/PowerPC/PPCAsmBackend.cpp | |
parent | e4ec90e990e0d84282c79cae6e221a36b81d7665 (diff) | |
download | bcm5719-llvm-0c9d9fdd81a248369c822025dea11ddd0884944c.tar.gz bcm5719-llvm-0c9d9fdd81a248369c822025dea11ddd0884944c.zip |
MC: Move target specific fixup info descriptors to TargetAsmBackend instead of
the MCCodeEmitter, which seems like a better organization.
- Also, cleaned up some magic constants while in the area.
llvm-svn: 121953
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCAsmBackend.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCAsmBackend.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCAsmBackend.cpp b/llvm/lib/Target/PowerPC/PPCAsmBackend.cpp index 29598adfd43..3ee8e8e7899 100644 --- a/llvm/lib/Target/PowerPC/PPCAsmBackend.cpp +++ b/llvm/lib/Target/PowerPC/PPCAsmBackend.cpp @@ -22,6 +22,26 @@ namespace { const Target &TheTarget; public: PPCAsmBackend(const Target &T) : TargetAsmBackend(), TheTarget(T) {} + + unsigned getNumFixupKinds() const { return PPC::NumTargetFixupKinds; } + + const MCFixupKindInfo &getFixupKindInfo(MCFixupKind Kind) const { + const static MCFixupKindInfo Infos[PPC::NumTargetFixupKinds] = { + // name offset bits flags + { "fixup_ppc_br24", 6, 24, MCFixupKindInfo::FKF_IsPCRel }, + { "fixup_ppc_brcond14", 16, 14, MCFixupKindInfo::FKF_IsPCRel }, + { "fixup_ppc_lo16", 16, 16, 0 }, + { "fixup_ppc_ha16", 16, 16, 0 }, + { "fixup_ppc_lo14", 16, 14, 0 } + }; + + if (Kind < FirstTargetFixupKind) + return TargetAsmBackend::getFixupKindInfo(Kind); + + assert(unsigned(Kind - FirstTargetFixupKind) < getNumFixupKinds() && + "Invalid kind!"); + return Infos[Kind - FirstTargetFixupKind]; + } bool MayNeedRelaxation(const MCInst &Inst) const { // FIXME. |