diff options
| -rw-r--r-- | llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/Target/PowerPC/MCTargetDesc/PPCFixupKinds.h | 10 | 
2 files changed, 20 insertions, 1 deletions
| diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp index 48de583afdf..14e09cb3b3d 100644 --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp +++ b/llvm/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) diff --git a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCFixupKinds.h b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCFixupKinds.h index b3c889e3f8d..c8aa942996b 100644 --- a/llvm/lib/Target/PowerPC/MCTargetDesc/PPCFixupKinds.h +++ b/llvm/lib/Target/PowerPC/MCTargetDesc/PPCFixupKinds.h @@ -34,6 +34,16 @@ enum Fixups {    /// fixup_ppc_lo14 - A 14-bit fixup corresponding to lo16(_foo) for instrs    /// like 'std'.    fixup_ppc_lo14, + +  /// fixup_ppc_toc - Insert value of TOC base (.TOC.). +  fixup_ppc_toc, + +  /// fixup_ppc_toc16 - A 16-bit signed fixup relative to the TOC base. +  fixup_ppc_toc16, + +  /// fixup_ppc_toc16_ds - A 14-bit signed fixup relative to the TOC base with +  /// implied 2 zero bits. +  fixup_ppc_toc16_ds,    // Marker    LastTargetFixupKind, | 

