1515#include " llvm/MC/MCContext.h"
1616#include " llvm/MC/MCExpr.h"
1717#include " llvm/MC/MCStreamer.h"
18- #include " llvm/MC/MCValue.h"
1918#include " llvm/Support/CommandLine.h"
2019#include " llvm/TargetParser/Triple.h"
2120using namespace llvm ;
@@ -54,80 +53,6 @@ const MCAsmInfo::AtSpecifier MachOAtSpecifiers[] = {
5453 {AArch64MCExpr::M_TLVPPAGEOFF, " TLVPPAGEOFF" },
5554};
5655
57- StringRef AArch64::getSpecifierName (const MCSpecifierExpr &Expr) {
58- // clang-format off
59- switch (static_cast <uint32_t >(Expr.getSpecifier ())) {
60- case AArch64MCExpr::VK_CALL: return " " ;
61- case AArch64MCExpr::VK_LO12: return " :lo12:" ;
62- case AArch64MCExpr::VK_ABS_G3: return " :abs_g3:" ;
63- case AArch64MCExpr::VK_ABS_G2: return " :abs_g2:" ;
64- case AArch64MCExpr::VK_ABS_G2_S: return " :abs_g2_s:" ;
65- case AArch64MCExpr::VK_ABS_G2_NC: return " :abs_g2_nc:" ;
66- case AArch64MCExpr::VK_ABS_G1: return " :abs_g1:" ;
67- case AArch64MCExpr::VK_ABS_G1_S: return " :abs_g1_s:" ;
68- case AArch64MCExpr::VK_ABS_G1_NC: return " :abs_g1_nc:" ;
69- case AArch64MCExpr::VK_ABS_G0: return " :abs_g0:" ;
70- case AArch64MCExpr::VK_ABS_G0_S: return " :abs_g0_s:" ;
71- case AArch64MCExpr::VK_ABS_G0_NC: return " :abs_g0_nc:" ;
72- case AArch64MCExpr::VK_PREL_G3: return " :prel_g3:" ;
73- case AArch64MCExpr::VK_PREL_G2: return " :prel_g2:" ;
74- case AArch64MCExpr::VK_PREL_G2_NC: return " :prel_g2_nc:" ;
75- case AArch64MCExpr::VK_PREL_G1: return " :prel_g1:" ;
76- case AArch64MCExpr::VK_PREL_G1_NC: return " :prel_g1_nc:" ;
77- case AArch64MCExpr::VK_PREL_G0: return " :prel_g0:" ;
78- case AArch64MCExpr::VK_PREL_G0_NC: return " :prel_g0_nc:" ;
79- case AArch64MCExpr::VK_DTPREL_G2: return " :dtprel_g2:" ;
80- case AArch64MCExpr::VK_DTPREL_G1: return " :dtprel_g1:" ;
81- case AArch64MCExpr::VK_DTPREL_G1_NC: return " :dtprel_g1_nc:" ;
82- case AArch64MCExpr::VK_DTPREL_G0: return " :dtprel_g0:" ;
83- case AArch64MCExpr::VK_DTPREL_G0_NC: return " :dtprel_g0_nc:" ;
84- case AArch64MCExpr::VK_DTPREL_HI12: return " :dtprel_hi12:" ;
85- case AArch64MCExpr::VK_DTPREL_LO12: return " :dtprel_lo12:" ;
86- case AArch64MCExpr::VK_DTPREL_LO12_NC: return " :dtprel_lo12_nc:" ;
87- case AArch64MCExpr::VK_TPREL_G2: return " :tprel_g2:" ;
88- case AArch64MCExpr::VK_TPREL_G1: return " :tprel_g1:" ;
89- case AArch64MCExpr::VK_TPREL_G1_NC: return " :tprel_g1_nc:" ;
90- case AArch64MCExpr::VK_TPREL_G0: return " :tprel_g0:" ;
91- case AArch64MCExpr::VK_TPREL_G0_NC: return " :tprel_g0_nc:" ;
92- case AArch64MCExpr::VK_TPREL_HI12: return " :tprel_hi12:" ;
93- case AArch64MCExpr::VK_TPREL_LO12: return " :tprel_lo12:" ;
94- case AArch64MCExpr::VK_TPREL_LO12_NC: return " :tprel_lo12_nc:" ;
95- case AArch64MCExpr::VK_TLSDESC_LO12: return " :tlsdesc_lo12:" ;
96- case AArch64MCExpr::VK_TLSDESC_AUTH_LO12: return " :tlsdesc_auth_lo12:" ;
97- case AArch64MCExpr::VK_ABS_PAGE: return " " ;
98- case AArch64MCExpr::VK_ABS_PAGE_NC: return " :pg_hi21_nc:" ;
99- case AArch64MCExpr::VK_GOT: return " :got:" ;
100- case AArch64MCExpr::VK_GOT_PAGE: return " :got:" ;
101- case AArch64MCExpr::VK_GOT_PAGE_LO15: return " :gotpage_lo15:" ;
102- case AArch64MCExpr::VK_GOT_LO12: return " :got_lo12:" ;
103- case AArch64MCExpr::VK_GOTTPREL: return " :gottprel:" ;
104- case AArch64MCExpr::VK_GOTTPREL_PAGE: return " :gottprel:" ;
105- case AArch64MCExpr::VK_GOTTPREL_LO12_NC: return " :gottprel_lo12:" ;
106- case AArch64MCExpr::VK_GOTTPREL_G1: return " :gottprel_g1:" ;
107- case AArch64MCExpr::VK_GOTTPREL_G0_NC: return " :gottprel_g0_nc:" ;
108- case AArch64MCExpr::VK_TLSDESC: return " " ;
109- case AArch64MCExpr::VK_TLSDESC_PAGE: return " :tlsdesc:" ;
110- case AArch64MCExpr::VK_TLSDESC_AUTH: return " " ;
111- case AArch64MCExpr::VK_TLSDESC_AUTH_PAGE: return " :tlsdesc_auth:" ;
112- case AArch64MCExpr::VK_SECREL_LO12: return " :secrel_lo12:" ;
113- case AArch64MCExpr::VK_SECREL_HI12: return " :secrel_hi12:" ;
114- case AArch64MCExpr::VK_GOT_AUTH: return " :got_auth:" ;
115- case AArch64MCExpr::VK_GOT_AUTH_PAGE: return " :got_auth:" ;
116- case AArch64MCExpr::VK_GOT_AUTH_LO12: return " :got_auth_lo12:" ;
117- default :
118- llvm_unreachable (" Invalid relocation specifier" );
119- }
120- // clang-format on
121- }
122-
123- static bool evaluate (const MCSpecifierExpr &Expr, MCValue &Res,
124- const MCAssembler *Asm) {
125- if (!Expr.getSubExpr ()->evaluateAsRelocatable (Res, Asm))
126- return false ;
127- Res.setSpecifier (Expr.getSpecifier ());
128- return true ;
129- }
130-
13156AArch64MCAsmInfoDarwin::AArch64MCAsmInfoDarwin (bool IsILP32) {
13257 // We prefer NEON instructions to be printed in the short, Apple-specific
13358 // form when targeting Darwin.
@@ -166,34 +91,6 @@ const MCExpr *AArch64MCAsmInfoDarwin::getExprForPersonalitySymbol(
16691 return MCBinaryExpr::createSub (Res, PC, Context);
16792}
16893
169- void AArch64AuthMCExpr::print (raw_ostream &OS, const MCAsmInfo *MAI) const {
170- bool WrapSubExprInParens = !isa<MCSymbolRefExpr>(getSubExpr ());
171- if (WrapSubExprInParens)
172- OS << ' (' ;
173- getSubExpr ()->print (OS, MAI);
174- if (WrapSubExprInParens)
175- OS << ' )' ;
176-
177- OS << " @AUTH(" << AArch64PACKeyIDToString (Key) << ' ,' << Discriminator;
178- if (hasAddressDiversity ())
179- OS << " ,addr" ;
180- OS << ' )' ;
181- }
182-
183- void AArch64MCAsmInfoDarwin::printSpecifierExpr (
184- raw_ostream &OS, const MCSpecifierExpr &Expr) const {
185- if (auto *AE = dyn_cast<AArch64AuthMCExpr>(&Expr))
186- return AE->print (OS, this );
187- // FIXME: tryParseAdrLabel should not use VK_ABS for Mach-O
188- assert (Expr.getSpecifier () == AArch64MCExpr::VK_ABS);
189- printExpr (OS, *Expr.getSubExpr ());
190- }
191-
192- bool AArch64MCAsmInfoDarwin::evaluateAsRelocatableImpl (
193- const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
194- return evaluate (Expr, Res, Asm);
195- }
196-
19794AArch64MCAsmInfoELF::AArch64MCAsmInfoELF (const Triple &T) {
19895 if (T.getArch () == Triple::aarch64_be)
19996 IsLittleEndian = false ;
@@ -230,19 +127,6 @@ AArch64MCAsmInfoELF::AArch64MCAsmInfoELF(const Triple &T) {
230127 initializeVariantKinds (ELFAtSpecifiers);
231128}
232129
233- void AArch64MCAsmInfoELF::printSpecifierExpr (
234- raw_ostream &OS, const MCSpecifierExpr &Expr) const {
235- if (auto *AE = dyn_cast<AArch64AuthMCExpr>(&Expr))
236- return AE->print (OS, this );
237- OS << AArch64::getSpecifierName (Expr);
238- printExpr (OS, *Expr.getSubExpr ());
239- }
240-
241- bool AArch64MCAsmInfoELF::evaluateAsRelocatableImpl (
242- const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
243- return evaluate (Expr, Res, Asm);
244- }
245-
246130AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF () {
247131 PrivateGlobalPrefix = " .L" ;
248132 PrivateLabelPrefix = " .L" ;
@@ -262,17 +146,6 @@ AArch64MCAsmInfoMicrosoftCOFF::AArch64MCAsmInfoMicrosoftCOFF() {
262146 initializeVariantKinds (COFFAtSpecifiers);
263147}
264148
265- void AArch64MCAsmInfoMicrosoftCOFF::printSpecifierExpr (
266- raw_ostream &OS, const MCSpecifierExpr &Expr) const {
267- OS << AArch64::getSpecifierName (Expr);
268- printExpr (OS, *Expr.getSubExpr ());
269- }
270-
271- bool AArch64MCAsmInfoMicrosoftCOFF::evaluateAsRelocatableImpl (
272- const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
273- return evaluate (Expr, Res, Asm);
274- }
275-
276149AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF () {
277150 PrivateGlobalPrefix = " .L" ;
278151 PrivateLabelPrefix = " .L" ;
@@ -291,14 +164,3 @@ AArch64MCAsmInfoGNUCOFF::AArch64MCAsmInfoGNUCOFF() {
291164
292165 initializeVariantKinds (COFFAtSpecifiers);
293166}
294-
295- void AArch64MCAsmInfoGNUCOFF::printSpecifierExpr (
296- raw_ostream &OS, const MCSpecifierExpr &Expr) const {
297- OS << AArch64::getSpecifierName (Expr);
298- printExpr (OS, *Expr.getSubExpr ());
299- }
300-
301- bool AArch64MCAsmInfoGNUCOFF::evaluateAsRelocatableImpl (
302- const MCSpecifierExpr &Expr, MCValue &Res, const MCAssembler *Asm) const {
303- return evaluate (Expr, Res, Asm);
304- }
0 commit comments