diff options
author | Mandeep Singh Grang <mgrang@codeaurora.org> | 2017-06-27 23:58:19 +0000 |
---|---|---|
committer | Mandeep Singh Grang <mgrang@codeaurora.org> | 2017-06-27 23:58:19 +0000 |
commit | 0c72172e320f77380ad2562d2dfe1abb14a25e1c (patch) | |
tree | 1adb6b9dd925fc3d79b027ffdc9228fc8ef27e14 /llvm/lib/Target/AArch64/AArch64MCInstLower.cpp | |
parent | 2fd6b1651df895079451f4efc253afb7a5009b30 (diff) | |
download | bcm5719-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.cpp | 14 |
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); } |