summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2018-03-10 19:05:21 +0000
committerMartin Storsjo <martin@martin.st>2018-03-10 19:05:21 +0000
commitcc24096d4df72caab78514e10b3f4fa4d75cf16a (patch)
tree37a5d34e6f8ea8497ee86180a0a0162b2a6eb528 /llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
parent5a3d47fabcb66535e48ce50b6f9b12f88bd1b28d (diff)
downloadbcm5719-llvm-cc24096d4df72caab78514e10b3f4fa4d75cf16a.tar.gz
bcm5719-llvm-cc24096d4df72caab78514e10b3f4fa4d75cf16a.zip
[AArch64] Implement native TLS for Windows
Differential Revision: https://reviews.llvm.org/D43971 llvm-svn: 327220
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64MCInstLower.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64MCInstLower.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp b/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
index 65dae03a24d..25bcaea9433 100644
--- a/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
+++ b/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
@@ -173,11 +173,20 @@ MCOperand AArch64MCInstLower::lowerSymbolOperandELF(const MachineOperand &MO,
MCOperand AArch64MCInstLower::lowerSymbolOperandCOFF(const MachineOperand &MO,
MCSymbol *Sym) const {
- MCSymbolRefExpr::VariantKind RefKind = MCSymbolRefExpr::VK_None;
- const MCExpr *Expr = MCSymbolRefExpr::create(Sym, RefKind, Ctx);
+ AArch64MCExpr::VariantKind RefKind = AArch64MCExpr::VK_NONE;
+ if (MO.getTargetFlags() & AArch64II::MO_TLS) {
+ if ((MO.getTargetFlags() & AArch64II::MO_FRAGMENT) == AArch64II::MO_PAGEOFF)
+ RefKind = AArch64MCExpr::VK_SECREL_LO12;
+ else if ((MO.getTargetFlags() & AArch64II::MO_FRAGMENT) ==
+ AArch64II::MO_HI12)
+ RefKind = AArch64MCExpr::VK_SECREL_HI12;
+ }
+ const MCExpr *Expr =
+ MCSymbolRefExpr::create(Sym, MCSymbolRefExpr::VK_None, Ctx);
if (!MO.isJTI() && MO.getOffset())
Expr = MCBinaryExpr::createAdd(
Expr, MCConstantExpr::create(MO.getOffset(), Ctx), Ctx);
+ Expr = AArch64MCExpr::create(Expr, RefKind, Ctx);
return MCOperand::createExpr(Expr);
}
OpenPOWER on IntegriCloud