@@ -338,7 +338,7 @@ class AArch64AsmParser : public MCTargetAsmParser {
338338 bool parsePrimaryExpr (const MCExpr *&Res, SMLoc &EndLoc) override ;
339339
340340 static bool classifySymbolRef (const MCExpr *Expr,
341- AArch64MCExpr::VariantKind &ELFRefKind ,
341+ AArch64MCExpr::Specifier &ELFSpec ,
342342 MCSymbolRefExpr::VariantKind &DarwinRefKind,
343343 int64_t &Addend);
344344};
@@ -888,30 +888,26 @@ class AArch64Operand : public MCParsedAsmOperand {
888888 }
889889
890890 bool isSymbolicUImm12Offset (const MCExpr *Expr) const {
891- AArch64MCExpr::VariantKind ELFRefKind ;
891+ AArch64MCExpr::Specifier ELFSpec ;
892892 MCSymbolRefExpr::VariantKind DarwinRefKind;
893893 int64_t Addend;
894- if (!AArch64AsmParser::classifySymbolRef (Expr, ELFRefKind , DarwinRefKind,
895- Addend)) {
894+ if (!AArch64AsmParser::classifySymbolRef (Expr, ELFSpec , DarwinRefKind,
895+ Addend)) {
896896 // If we don't understand the expression, assume the best and
897897 // let the fixup and relocation code deal with it.
898898 return true ;
899899 }
900900
901901 if (DarwinRefKind == MCSymbolRefExpr::VK_PAGEOFF ||
902- ELFRefKind == AArch64MCExpr::VK_LO12 ||
903- ELFRefKind == AArch64MCExpr::VK_GOT_LO12 ||
904- ELFRefKind == AArch64MCExpr::VK_GOT_AUTH_LO12 ||
905- ELFRefKind == AArch64MCExpr::VK_DTPREL_LO12 ||
906- ELFRefKind == AArch64MCExpr::VK_DTPREL_LO12_NC ||
907- ELFRefKind == AArch64MCExpr::VK_TPREL_LO12 ||
908- ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
909- ELFRefKind == AArch64MCExpr::VK_GOTTPREL_LO12_NC ||
910- ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
911- ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
912- ELFRefKind == AArch64MCExpr::VK_SECREL_LO12 ||
913- ELFRefKind == AArch64MCExpr::VK_SECREL_HI12 ||
914- ELFRefKind == AArch64MCExpr::VK_GOT_PAGE_LO15) {
902+ llvm::is_contained (
903+ {AArch64MCExpr::VK_LO12, AArch64MCExpr::VK_GOT_LO12,
904+ AArch64MCExpr::VK_GOT_AUTH_LO12, AArch64MCExpr::VK_DTPREL_LO12,
905+ AArch64MCExpr::VK_DTPREL_LO12_NC, AArch64MCExpr::VK_TPREL_LO12,
906+ AArch64MCExpr::VK_TPREL_LO12_NC,
907+ AArch64MCExpr::VK_GOTTPREL_LO12_NC, AArch64MCExpr::VK_TLSDESC_LO12,
908+ AArch64MCExpr::VK_TLSDESC_AUTH_LO12, AArch64MCExpr::VK_SECREL_LO12,
909+ AArch64MCExpr::VK_SECREL_HI12, AArch64MCExpr::VK_GOT_PAGE_LO15},
910+ ELFSpec)) {
915911 // Note that we don't range-check the addend. It's adjusted modulo page
916912 // size when converted, so there is no "out of range" condition when using
917913 // @pageoff.
@@ -1009,26 +1005,24 @@ class AArch64Operand : public MCParsedAsmOperand {
10091005 Expr = getImm ();
10101006 }
10111007
1012- AArch64MCExpr::VariantKind ELFRefKind ;
1008+ AArch64MCExpr::Specifier ELFSpec ;
10131009 MCSymbolRefExpr::VariantKind DarwinRefKind;
10141010 int64_t Addend;
1015- if (AArch64AsmParser::classifySymbolRef (Expr, ELFRefKind ,
1016- DarwinRefKind, Addend)) {
1011+ if (AArch64AsmParser::classifySymbolRef (Expr, ELFSpec, DarwinRefKind ,
1012+ Addend)) {
10171013 return DarwinRefKind == MCSymbolRefExpr::VK_PAGEOFF ||
10181014 DarwinRefKind == MCSymbolRefExpr::VK_TLVPPAGEOFF ||
10191015 (DarwinRefKind == MCSymbolRefExpr::VK_GOTPAGEOFF && Addend == 0 ) ||
1020- ELFRefKind == AArch64MCExpr::VK_LO12 ||
1021- ELFRefKind == AArch64MCExpr::VK_GOT_AUTH_LO12 ||
1022- ELFRefKind == AArch64MCExpr::VK_DTPREL_HI12 ||
1023- ELFRefKind == AArch64MCExpr::VK_DTPREL_LO12 ||
1024- ELFRefKind == AArch64MCExpr::VK_DTPREL_LO12_NC ||
1025- ELFRefKind == AArch64MCExpr::VK_TPREL_HI12 ||
1026- ELFRefKind == AArch64MCExpr::VK_TPREL_LO12 ||
1027- ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
1028- ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
1029- ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
1030- ELFRefKind == AArch64MCExpr::VK_SECREL_HI12 ||
1031- ELFRefKind == AArch64MCExpr::VK_SECREL_LO12;
1016+ llvm::is_contained (
1017+ {AArch64MCExpr::VK_LO12, AArch64MCExpr::VK_GOT_AUTH_LO12,
1018+ AArch64MCExpr::VK_DTPREL_HI12, AArch64MCExpr::VK_DTPREL_LO12,
1019+ AArch64MCExpr::VK_DTPREL_LO12_NC,
1020+ AArch64MCExpr::VK_TPREL_HI12, AArch64MCExpr::VK_TPREL_LO12,
1021+ AArch64MCExpr::VK_TPREL_LO12_NC,
1022+ AArch64MCExpr::VK_TLSDESC_LO12,
1023+ AArch64MCExpr::VK_TLSDESC_AUTH_LO12,
1024+ AArch64MCExpr::VK_SECREL_HI12, AArch64MCExpr::VK_SECREL_LO12},
1025+ ELFSpec);
10321026 }
10331027
10341028 // If it's a constant, it should be a real immediate in range.
@@ -1121,22 +1115,21 @@ class AArch64Operand : public MCParsedAsmOperand {
11211115 return (Val >= -((1 <<(N-1 )) << 2 ) && Val <= (((1 <<(N-1 ))-1 ) << 2 ));
11221116 }
11231117
1124- bool
1125- isMovWSymbol (ArrayRef<AArch64MCExpr::VariantKind> AllowedModifiers) const {
1118+ bool isMovWSymbol (ArrayRef<AArch64MCExpr::Specifier> AllowedModifiers) const {
11261119 if (!isImm ())
11271120 return false ;
11281121
1129- AArch64MCExpr::VariantKind ELFRefKind ;
1122+ AArch64MCExpr::Specifier ELFSpec ;
11301123 MCSymbolRefExpr::VariantKind DarwinRefKind;
11311124 int64_t Addend;
1132- if (!AArch64AsmParser::classifySymbolRef (getImm (), ELFRefKind ,
1133- DarwinRefKind, Addend)) {
1125+ if (!AArch64AsmParser::classifySymbolRef (getImm (), ELFSpec, DarwinRefKind ,
1126+ Addend)) {
11341127 return false ;
11351128 }
11361129 if (DarwinRefKind != MCSymbolRefExpr::VK_None)
11371130 return false ;
11381131
1139- return llvm::is_contained (AllowedModifiers, ELFRefKind );
1132+ return llvm::is_contained (AllowedModifiers, ELFSpec );
11401133 }
11411134
11421135 bool isMovWSymbolG3 () const {
@@ -3303,12 +3296,12 @@ ParseStatus AArch64AsmParser::tryParseAdrpLabel(OperandVector &Operands) {
33033296 if (parseSymbolicImmVal (Expr))
33043297 return ParseStatus::Failure;
33053298
3306- AArch64MCExpr::VariantKind ELFRefKind ;
3299+ AArch64MCExpr::Specifier ELFSpec ;
33073300 MCSymbolRefExpr::VariantKind DarwinRefKind;
33083301 int64_t Addend;
3309- if (classifySymbolRef (Expr, ELFRefKind , DarwinRefKind, Addend)) {
3302+ if (classifySymbolRef (Expr, ELFSpec , DarwinRefKind, Addend)) {
33103303 if (DarwinRefKind == MCSymbolRefExpr::VK_None &&
3311- ELFRefKind == AArch64MCExpr::VK_INVALID) {
3304+ ELFSpec == AArch64MCExpr::VK_INVALID) {
33123305 // No modifier was specified at all; this is the syntax for an ELF basic
33133306 // ADRP relocation (unfortunately).
33143307 Expr =
@@ -3320,13 +3313,13 @@ ParseStatus AArch64AsmParser::tryParseAdrpLabel(OperandVector &Operands) {
33203313 } else if (DarwinRefKind != MCSymbolRefExpr::VK_PAGE &&
33213314 DarwinRefKind != MCSymbolRefExpr::VK_GOTPAGE &&
33223315 DarwinRefKind != MCSymbolRefExpr::VK_TLVPPAGE &&
3323- ELFRefKind != AArch64MCExpr::VK_ABS_PAGE_NC &&
3324- ELFRefKind != AArch64MCExpr::VK_GOT_PAGE &&
3325- ELFRefKind != AArch64MCExpr::VK_GOT_AUTH_PAGE &&
3326- ELFRefKind != AArch64MCExpr::VK_GOT_PAGE_LO15 &&
3327- ELFRefKind != AArch64MCExpr::VK_GOTTPREL_PAGE &&
3328- ELFRefKind != AArch64MCExpr::VK_TLSDESC_PAGE &&
3329- ELFRefKind != AArch64MCExpr::VK_TLSDESC_AUTH_PAGE) {
3316+ ELFSpec != AArch64MCExpr::VK_ABS_PAGE_NC &&
3317+ ELFSpec != AArch64MCExpr::VK_GOT_PAGE &&
3318+ ELFSpec != AArch64MCExpr::VK_GOT_AUTH_PAGE &&
3319+ ELFSpec != AArch64MCExpr::VK_GOT_PAGE_LO15 &&
3320+ ELFSpec != AArch64MCExpr::VK_GOTTPREL_PAGE &&
3321+ ELFSpec != AArch64MCExpr::VK_TLSDESC_PAGE &&
3322+ ELFSpec != AArch64MCExpr::VK_TLSDESC_AUTH_PAGE) {
33303323 // The operand must be an @page or @gotpage qualified symbolref.
33313324 return Error (S, " page or gotpage label reference expected" );
33323325 }
@@ -3357,16 +3350,16 @@ ParseStatus AArch64AsmParser::tryParseAdrLabel(OperandVector &Operands) {
33573350 if (parseSymbolicImmVal (Expr))
33583351 return ParseStatus::Failure;
33593352
3360- AArch64MCExpr::VariantKind ELFRefKind ;
3353+ AArch64MCExpr::Specifier ELFSpec ;
33613354 MCSymbolRefExpr::VariantKind DarwinRefKind;
33623355 int64_t Addend;
3363- if (classifySymbolRef (Expr, ELFRefKind , DarwinRefKind, Addend)) {
3356+ if (classifySymbolRef (Expr, ELFSpec , DarwinRefKind, Addend)) {
33643357 if (DarwinRefKind == MCSymbolRefExpr::VK_None &&
3365- ELFRefKind == AArch64MCExpr::VK_INVALID) {
3358+ ELFSpec == AArch64MCExpr::VK_INVALID) {
33663359 // No modifier was specified at all; this is the syntax for an ELF basic
33673360 // ADR relocation (unfortunately).
33683361 Expr = AArch64MCExpr::create (Expr, AArch64MCExpr::VK_ABS, getContext ());
3369- } else if (ELFRefKind != AArch64MCExpr::VK_GOT_AUTH_PAGE) {
3362+ } else if (ELFSpec != AArch64MCExpr::VK_GOT_AUTH_PAGE) {
33703363 // For tiny code model, we use :got_auth: operator to fill 21-bit imm of
33713364 // adr. It's not actually GOT entry page address but the GOT address
33723365 // itself - we just share the same variant kind with :got_auth: operator
@@ -4407,7 +4400,7 @@ bool AArch64AsmParser::parseRegister(OperandVector &Operands) {
44074400
44084401bool AArch64AsmParser::parseSymbolicImmVal (const MCExpr *&ImmVal) {
44094402 bool HasELFModifier = false ;
4410- AArch64MCExpr::VariantKind RefKind;
4403+ AArch64MCExpr::Specifier RefKind;
44114404
44124405 if (parseOptionalToken (AsmToken::Colon)) {
44134406 HasELFModifier = true ;
@@ -4417,7 +4410,7 @@ bool AArch64AsmParser::parseSymbolicImmVal(const MCExpr *&ImmVal) {
44174410
44184411 std::string LowerCase = getTok ().getIdentifier ().lower ();
44194412 RefKind =
4420- StringSwitch<AArch64MCExpr::VariantKind >(LowerCase)
4413+ StringSwitch<AArch64MCExpr::Specifier >(LowerCase)
44214414 .Case (" lo12" , AArch64MCExpr::VK_LO12)
44224415 .Case (" abs_g3" , AArch64MCExpr::VK_ABS_G3)
44234416 .Case (" abs_g2" , AArch64MCExpr::VK_ABS_G2)
@@ -5823,10 +5816,10 @@ bool AArch64AsmParser::validateInstruction(MCInst &Inst, SMLoc &IDLoc,
58235816 // some slight duplication here.
58245817 if (Inst.getOperand (2 ).isExpr ()) {
58255818 const MCExpr *Expr = Inst.getOperand (2 ).getExpr ();
5826- AArch64MCExpr::VariantKind ELFRefKind ;
5819+ AArch64MCExpr::Specifier ELFSpec ;
58275820 MCSymbolRefExpr::VariantKind DarwinRefKind;
58285821 int64_t Addend;
5829- if (classifySymbolRef (Expr, ELFRefKind , DarwinRefKind, Addend)) {
5822+ if (classifySymbolRef (Expr, ELFSpec , DarwinRefKind, Addend)) {
58305823
58315824 // Only allow these with ADDXri.
58325825 if ((DarwinRefKind == MCSymbolRefExpr::VK_PAGEOFF ||
@@ -5835,18 +5828,15 @@ bool AArch64AsmParser::validateInstruction(MCInst &Inst, SMLoc &IDLoc,
58355828 return false ;
58365829
58375830 // Only allow these with ADDXri/ADDWri
5838- if ((ELFRefKind == AArch64MCExpr::VK_LO12 ||
5839- ELFRefKind == AArch64MCExpr::VK_GOT_AUTH_LO12 ||
5840- ELFRefKind == AArch64MCExpr::VK_DTPREL_HI12 ||
5841- ELFRefKind == AArch64MCExpr::VK_DTPREL_LO12 ||
5842- ELFRefKind == AArch64MCExpr::VK_DTPREL_LO12_NC ||
5843- ELFRefKind == AArch64MCExpr::VK_TPREL_HI12 ||
5844- ELFRefKind == AArch64MCExpr::VK_TPREL_LO12 ||
5845- ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
5846- ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
5847- ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
5848- ELFRefKind == AArch64MCExpr::VK_SECREL_LO12 ||
5849- ELFRefKind == AArch64MCExpr::VK_SECREL_HI12) &&
5831+ if (llvm::is_contained (
5832+ {AArch64MCExpr::VK_LO12, AArch64MCExpr::VK_GOT_AUTH_LO12,
5833+ AArch64MCExpr::VK_DTPREL_HI12, AArch64MCExpr::VK_DTPREL_LO12,
5834+ AArch64MCExpr::VK_DTPREL_LO12_NC, AArch64MCExpr::VK_TPREL_HI12,
5835+ AArch64MCExpr::VK_TPREL_LO12, AArch64MCExpr::VK_TPREL_LO12_NC,
5836+ AArch64MCExpr::VK_TLSDESC_LO12,
5837+ AArch64MCExpr::VK_TLSDESC_AUTH_LO12,
5838+ AArch64MCExpr::VK_SECREL_LO12, AArch64MCExpr::VK_SECREL_HI12},
5839+ ELFSpec) &&
58505840 (Inst.getOpcode () == AArch64::ADDXri ||
58515841 Inst.getOpcode () == AArch64::ADDWri))
58525842 return false ;
@@ -8202,17 +8192,15 @@ bool AArch64AsmParser::parseAuthExpr(const MCExpr *&Res, SMLoc &EndLoc) {
82028192 return false ;
82038193}
82048194
8205- bool
8206- AArch64AsmParser::classifySymbolRef (const MCExpr *Expr,
8207- AArch64MCExpr::VariantKind &ELFRefKind,
8208- MCSymbolRefExpr::VariantKind &DarwinRefKind,
8209- int64_t &Addend) {
8210- ELFRefKind = AArch64MCExpr::VK_INVALID;
8195+ bool AArch64AsmParser::classifySymbolRef (
8196+ const MCExpr *Expr, AArch64MCExpr::Specifier &ELFSpec,
8197+ MCSymbolRefExpr::VariantKind &DarwinRefKind, int64_t &Addend) {
8198+ ELFSpec = AArch64MCExpr::VK_INVALID;
82118199 DarwinRefKind = MCSymbolRefExpr::VK_None;
82128200 Addend = 0 ;
82138201
82148202 if (const AArch64MCExpr *AE = dyn_cast<AArch64MCExpr>(Expr)) {
8215- ELFRefKind = AE->getKind ();
8203+ ELFSpec = AE->getSpecifier ();
82168204 Expr = AE->getSubExpr ();
82178205 }
82188206
@@ -8229,9 +8217,9 @@ AArch64AsmParser::classifySymbolRef(const MCExpr *Expr,
82298217 if (!Relocatable || Res.getSymB ())
82308218 return false ;
82318219
8232- // Treat expressions with an ELFRefKind (like ":abs_g1:3", or
8220+ // Treat expressions with an ELFSpec (like ":abs_g1:3", or
82338221 // ":abs_g1:x" where x is constant) as symbolic even if there is no symbol.
8234- if (!Res.getSymA () && ELFRefKind == AArch64MCExpr::VK_INVALID)
8222+ if (!Res.getSymA () && ELFSpec == AArch64MCExpr::VK_INVALID)
82358223 return false ;
82368224
82378225 if (Res.getSymA ())
@@ -8240,7 +8228,7 @@ AArch64AsmParser::classifySymbolRef(const MCExpr *Expr,
82408228
82418229 // It's some symbol reference + a constant addend, but really
82428230 // shouldn't use both Darwin and ELF syntax.
8243- return ELFRefKind == AArch64MCExpr::VK_INVALID ||
8231+ return ELFSpec == AArch64MCExpr::VK_INVALID ||
82448232 DarwinRefKind == MCSymbolRefExpr::VK_None;
82458233}
82468234
0 commit comments