diff options
author | Roman Divacky <rdivacky@freebsd.org> | 2012-08-16 18:37:52 +0000 |
---|---|---|
committer | Roman Divacky <rdivacky@freebsd.org> | 2012-08-16 18:37:52 +0000 |
commit | e88d17de99c5f46bc8104bc777f657d0299fd0e6 (patch) | |
tree | 5d923be1ff69e1579ea352695bfb8c52de1de506 /lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp | |
parent | dd4b9f3fe9980dd0d7741c4e9ec817b330c134fe (diff) |
Define and handle additional fixup kinds. By Adhemerval Zanella.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162037 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp')
-rw-r--r-- | lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp b/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp index 48de583afd..14e09cb3b3 100644 --- a/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp +++ b/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp @@ -29,7 +29,12 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) { case FK_Data_1: case FK_Data_2: case FK_Data_4: + case FK_Data_8: + case PPC::fixup_ppc_toc: return Value; + case PPC::fixup_ppc_lo14: + case PPC::fixup_ppc_toc16_ds: + return (Value & 0xffff) >> 2; case PPC::fixup_ppc_brcond14: return Value & 0x3ffc; case PPC::fixup_ppc_br24: @@ -40,6 +45,7 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) { #endif case PPC::fixup_ppc_ha16: return ((Value >> 16) + ((Value & 0x8000) ? 1 : 0)) & 0xffff; + case PPC::fixup_ppc_toc16: case PPC::fixup_ppc_lo16: return Value & 0xffff; } @@ -72,7 +78,10 @@ public: { "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 } + { "fixup_ppc_lo14", 16, 14, 0 }, + { "fixup_ppc_toc", 0, 64, 0 }, + { "fixup_ppc_toc16", 16, 16, 0 }, + { "fixup_ppc_toc16_ds", 16, 14, 0 } }; if (Kind < FirstTargetFixupKind) |