diff options
author | Roman Divacky <rdivacky@freebsd.org> | 2012-06-04 17:36:38 +0000 |
---|---|---|
committer | Roman Divacky <rdivacky@freebsd.org> | 2012-06-04 17:36:38 +0000 |
commit | e3f15c98d1c7de344268ca43e3fb3e54bec686a8 (patch) | |
tree | 166023173d5e476ffc52d02dd79670593c3d9930 /llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | |
parent | 4214f605f731e109b9dec3fcd889ee7eb31a9d53 (diff) | |
download | llvm-e3f15c98d1c7de344268ca43e3fb3e54bec686a8.zip llvm-e3f15c98d1c7de344268ca43e3fb3e54bec686a8.tar.gz llvm-e3f15c98d1c7de344268ca43e3fb3e54bec686a8.tar.bz2 |
Implement local-exec TLS on PowerPC.
llvm-svn: 157935
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCMCInstLower.cpp')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPCMCInstLower.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp index 276edcb..19ec993b 100644 --- a/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp +++ b/llvm/lib/Target/PowerPC/PPCMCInstLower.cpp @@ -99,10 +99,22 @@ static MCOperand GetSymbolRef(const MachineOperand &MO, const MCSymbol *Symbol, MCContext &Ctx = Printer.OutContext; MCSymbolRefExpr::VariantKind RefKind = MCSymbolRefExpr::VK_None; - if (MO.getTargetFlags() & PPCII::MO_LO16) - RefKind = isDarwin ? MCSymbolRefExpr::VK_PPC_DARWIN_LO16 : MCSymbolRefExpr::VK_PPC_GAS_LO16; - else if (MO.getTargetFlags() & PPCII::MO_HA16) - RefKind = isDarwin ? MCSymbolRefExpr::VK_PPC_DARWIN_HA16 : MCSymbolRefExpr::VK_PPC_GAS_HA16; + unsigned access = MO.getTargetFlags() & PPCII::MO_ACCESS_MASK; + + switch (access) { + case PPCII::MO_HA16: RefKind = isDarwin ? + MCSymbolRefExpr::VK_PPC_DARWIN_HA16 : + MCSymbolRefExpr::VK_PPC_GAS_HA16; + break; + case PPCII::MO_LO16: RefKind = isDarwin ? + MCSymbolRefExpr::VK_PPC_DARWIN_LO16 : + MCSymbolRefExpr::VK_PPC_GAS_LO16; + break; + case PPCII::MO_TPREL16_HA: RefKind = MCSymbolRefExpr::VK_PPC_TPREL16_HA; + break; + case PPCII::MO_TPREL16_LO: RefKind = MCSymbolRefExpr::VK_PPC_TPREL16_LO; + break; + } // FIXME: This isn't right, but we don't have a good way to express this in // the MC Level, see below. |