summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
diff options
context:
space:
mode:
authorMandeep Singh Grang <mgrang@codeaurora.org>2017-06-27 23:58:19 +0000
committerMandeep Singh Grang <mgrang@codeaurora.org>2017-06-27 23:58:19 +0000
commit0c72172e320f77380ad2562d2dfe1abb14a25e1c (patch)
tree1adb6b9dd925fc3d79b027ffdc9228fc8ef27e14 /llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
parent2fd6b1651df895079451f4efc253afb7a5009b30 (diff)
downloadbcm5719-llvm-0c72172e320f77380ad2562d2dfe1abb14a25e1c.tar.gz
bcm5719-llvm-0c72172e320f77380ad2562d2dfe1abb14a25e1c.zip
[COFF, ARM64] Add support for Windows ARM64 COFF format
Summary: This is the llvm part of the initial implementation to support Windows ARM64 COFF format. I will gradually add more functionality in subsequent patches. Reviewers: ruiu, rnk, t.p.northover, compnerd Reviewed By: ruiu, compnerd Subscribers: aemerson, mgorny, javed.absar, llvm-commits, kristof.beyls Differential Revision: https://reviews.llvm.org/D34705 llvm-svn: 306490
Diffstat (limited to 'llvm/lib/Target/AArch64/AArch64MCInstLower.cpp')
-rw-r--r--llvm/lib/Target/AArch64/AArch64MCInstLower.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp b/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
index 45083df7ab4..2bdc0539fb1 100644
--- a/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
+++ b/llvm/lib/Target/AArch64/AArch64MCInstLower.cpp
@@ -151,13 +151,25 @@ MCOperand AArch64MCInstLower::lowerSymbolOperandELF(const MachineOperand &MO,
return MCOperand::createExpr(Expr);
}
+MCOperand AArch64MCInstLower::lowerSymbolOperandCOFF(const MachineOperand &MO,
+ MCSymbol *Sym) const {
+ MCSymbolRefExpr::VariantKind RefKind = MCSymbolRefExpr::VK_None;
+ const MCExpr *Expr = MCSymbolRefExpr::create(Sym, RefKind, Ctx);
+ if (!MO.isJTI() && MO.getOffset())
+ Expr = MCBinaryExpr::createAdd(
+ Expr, MCConstantExpr::create(MO.getOffset(), Ctx), Ctx);
+ return MCOperand::createExpr(Expr);
+}
+
MCOperand AArch64MCInstLower::LowerSymbolOperand(const MachineOperand &MO,
MCSymbol *Sym) const {
if (Printer.TM.getTargetTriple().isOSDarwin())
return lowerSymbolOperandDarwin(MO, Sym);
+ if (Printer.TM.getTargetTriple().isOSBinFormatCOFF())
+ return lowerSymbolOperandCOFF(MO, Sym);
assert(Printer.TM.getTargetTriple().isOSBinFormatELF() &&
- "Expect Darwin or ELF target");
+ "Expect Darwin, ELF or COFF target");
return lowerSymbolOperandELF(MO, Sym);
}
OpenPOWER on IntegriCloud