@@ -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 {
@@ -3304,12 +3297,12 @@ ParseStatus AArch64AsmParser::tryParseAdrpLabel(OperandVector &Operands) {
33043297 if (parseSymbolicImmVal (Expr))
33053298 return ParseStatus::Failure;
33063299
3307- AArch64MCExpr::VariantKind ELFRefKind ;
3300+ AArch64MCExpr::Specifier ELFSpec ;
33083301 MCSymbolRefExpr::VariantKind DarwinRefKind;
33093302 int64_t Addend;
3310- if (classifySymbolRef (Expr, ELFRefKind , DarwinRefKind, Addend)) {
3303+ if (classifySymbolRef (Expr, ELFSpec , DarwinRefKind, Addend)) {
33113304 if (DarwinRefKind == MCSymbolRefExpr::VK_None &&
3312- ELFRefKind == AArch64MCExpr::VK_INVALID) {
3305+ ELFSpec == AArch64MCExpr::VK_INVALID) {
33133306 // No modifier was specified at all; this is the syntax for an ELF basic
33143307 // ADRP relocation (unfortunately).
33153308 Expr =
@@ -3321,13 +3314,13 @@ ParseStatus AArch64AsmParser::tryParseAdrpLabel(OperandVector &Operands) {
33213314 } else if (DarwinRefKind != MCSymbolRefExpr::VK_PAGE &&
33223315 DarwinRefKind != MCSymbolRefExpr::VK_GOTPAGE &&
33233316 DarwinRefKind != MCSymbolRefExpr::VK_TLVPPAGE &&
3324- ELFRefKind != AArch64MCExpr::VK_ABS_PAGE_NC &&
3325- ELFRefKind != AArch64MCExpr::VK_GOT_PAGE &&
3326- ELFRefKind != AArch64MCExpr::VK_GOT_AUTH_PAGE &&
3327- ELFRefKind != AArch64MCExpr::VK_GOT_PAGE_LO15 &&
3328- ELFRefKind != AArch64MCExpr::VK_GOTTPREL_PAGE &&
3329- ELFRefKind != AArch64MCExpr::VK_TLSDESC_PAGE &&
3330- ELFRefKind != AArch64MCExpr::VK_TLSDESC_AUTH_PAGE) {
3317+ ELFSpec != AArch64MCExpr::VK_ABS_PAGE_NC &&
3318+ ELFSpec != AArch64MCExpr::VK_GOT_PAGE &&
3319+ ELFSpec != AArch64MCExpr::VK_GOT_AUTH_PAGE &&
3320+ ELFSpec != AArch64MCExpr::VK_GOT_PAGE_LO15 &&
3321+ ELFSpec != AArch64MCExpr::VK_GOTTPREL_PAGE &&
3322+ ELFSpec != AArch64MCExpr::VK_TLSDESC_PAGE &&
3323+ ELFSpec != AArch64MCExpr::VK_TLSDESC_AUTH_PAGE) {
33313324 // The operand must be an @page or @gotpage qualified symbolref.
33323325 return Error (S, " page or gotpage label reference expected" );
33333326 }
@@ -3358,16 +3351,16 @@ ParseStatus AArch64AsmParser::tryParseAdrLabel(OperandVector &Operands) {
33583351 if (parseSymbolicImmVal (Expr))
33593352 return ParseStatus::Failure;
33603353
3361- AArch64MCExpr::VariantKind ELFRefKind ;
3354+ AArch64MCExpr::Specifier ELFSpec ;
33623355 MCSymbolRefExpr::VariantKind DarwinRefKind;
33633356 int64_t Addend;
3364- if (classifySymbolRef (Expr, ELFRefKind , DarwinRefKind, Addend)) {
3357+ if (classifySymbolRef (Expr, ELFSpec , DarwinRefKind, Addend)) {
33653358 if (DarwinRefKind == MCSymbolRefExpr::VK_None &&
3366- ELFRefKind == AArch64MCExpr::VK_INVALID) {
3359+ ELFSpec == AArch64MCExpr::VK_INVALID) {
33673360 // No modifier was specified at all; this is the syntax for an ELF basic
33683361 // ADR relocation (unfortunately).
33693362 Expr = AArch64MCExpr::create (Expr, AArch64MCExpr::VK_ABS, getContext ());
3370- } else if (ELFRefKind != AArch64MCExpr::VK_GOT_AUTH_PAGE) {
3363+ } else if (ELFSpec != AArch64MCExpr::VK_GOT_AUTH_PAGE) {
33713364 // For tiny code model, we use :got_auth: operator to fill 21-bit imm of
33723365 // adr. It's not actually GOT entry page address but the GOT address
33733366 // itself - we just share the same variant kind with :got_auth: operator
@@ -4408,7 +4401,7 @@ bool AArch64AsmParser::parseRegister(OperandVector &Operands) {
44084401
44094402bool AArch64AsmParser::parseSymbolicImmVal (const MCExpr *&ImmVal) {
44104403 bool HasELFModifier = false ;
4411- AArch64MCExpr::VariantKind RefKind;
4404+ AArch64MCExpr::Specifier RefKind;
44124405
44134406 if (parseOptionalToken (AsmToken::Colon)) {
44144407 HasELFModifier = true ;
@@ -4418,7 +4411,7 @@ bool AArch64AsmParser::parseSymbolicImmVal(const MCExpr *&ImmVal) {
44184411
44194412 std::string LowerCase = getTok ().getIdentifier ().lower ();
44204413 RefKind =
4421- StringSwitch<AArch64MCExpr::VariantKind >(LowerCase)
4414+ StringSwitch<AArch64MCExpr::Specifier >(LowerCase)
44224415 .Case (" lo12" , AArch64MCExpr::VK_LO12)
44234416 .Case (" abs_g3" , AArch64MCExpr::VK_ABS_G3)
44244417 .Case (" abs_g2" , AArch64MCExpr::VK_ABS_G2)
@@ -5824,10 +5817,10 @@ bool AArch64AsmParser::validateInstruction(MCInst &Inst, SMLoc &IDLoc,
58245817 // some slight duplication here.
58255818 if (Inst.getOperand (2 ).isExpr ()) {
58265819 const MCExpr *Expr = Inst.getOperand (2 ).getExpr ();
5827- AArch64MCExpr::VariantKind ELFRefKind ;
5820+ AArch64MCExpr::Specifier ELFSpec ;
58285821 MCSymbolRefExpr::VariantKind DarwinRefKind;
58295822 int64_t Addend;
5830- if (classifySymbolRef (Expr, ELFRefKind , DarwinRefKind, Addend)) {
5823+ if (classifySymbolRef (Expr, ELFSpec , DarwinRefKind, Addend)) {
58315824
58325825 // Only allow these with ADDXri.
58335826 if ((DarwinRefKind == MCSymbolRefExpr::VK_PAGEOFF ||
@@ -5836,18 +5829,15 @@ bool AArch64AsmParser::validateInstruction(MCInst &Inst, SMLoc &IDLoc,
58365829 return false ;
58375830
58385831 // Only allow these with ADDXri/ADDWri
5839- if ((ELFRefKind == AArch64MCExpr::VK_LO12 ||
5840- ELFRefKind == AArch64MCExpr::VK_GOT_AUTH_LO12 ||
5841- ELFRefKind == AArch64MCExpr::VK_DTPREL_HI12 ||
5842- ELFRefKind == AArch64MCExpr::VK_DTPREL_LO12 ||
5843- ELFRefKind == AArch64MCExpr::VK_DTPREL_LO12_NC ||
5844- ELFRefKind == AArch64MCExpr::VK_TPREL_HI12 ||
5845- ELFRefKind == AArch64MCExpr::VK_TPREL_LO12 ||
5846- ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
5847- ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
5848- ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
5849- ELFRefKind == AArch64MCExpr::VK_SECREL_LO12 ||
5850- ELFRefKind == AArch64MCExpr::VK_SECREL_HI12) &&
5832+ if (llvm::is_contained (
5833+ {AArch64MCExpr::VK_LO12, AArch64MCExpr::VK_GOT_AUTH_LO12,
5834+ AArch64MCExpr::VK_DTPREL_HI12, AArch64MCExpr::VK_DTPREL_LO12,
5835+ AArch64MCExpr::VK_DTPREL_LO12_NC, AArch64MCExpr::VK_TPREL_HI12,
5836+ AArch64MCExpr::VK_TPREL_LO12, AArch64MCExpr::VK_TPREL_LO12_NC,
5837+ AArch64MCExpr::VK_TLSDESC_LO12,
5838+ AArch64MCExpr::VK_TLSDESC_AUTH_LO12,
5839+ AArch64MCExpr::VK_SECREL_LO12, AArch64MCExpr::VK_SECREL_HI12},
5840+ ELFSpec) &&
58515841 (Inst.getOpcode () == AArch64::ADDXri ||
58525842 Inst.getOpcode () == AArch64::ADDWri))
58535843 return false ;
@@ -8203,17 +8193,15 @@ bool AArch64AsmParser::parseAuthExpr(const MCExpr *&Res, SMLoc &EndLoc) {
82038193 return false ;
82048194}
82058195
8206- bool
8207- AArch64AsmParser::classifySymbolRef (const MCExpr *Expr,
8208- AArch64MCExpr::VariantKind &ELFRefKind,
8209- MCSymbolRefExpr::VariantKind &DarwinRefKind,
8210- int64_t &Addend) {
8211- ELFRefKind = AArch64MCExpr::VK_INVALID;
8196+ bool AArch64AsmParser::classifySymbolRef (
8197+ const MCExpr *Expr, AArch64MCExpr::Specifier &ELFSpec,
8198+ MCSymbolRefExpr::VariantKind &DarwinRefKind, int64_t &Addend) {
8199+ ELFSpec = AArch64MCExpr::VK_INVALID;
82128200 DarwinRefKind = MCSymbolRefExpr::VK_None;
82138201 Addend = 0 ;
82148202
82158203 if (const AArch64MCExpr *AE = dyn_cast<AArch64MCExpr>(Expr)) {
8216- ELFRefKind = AE->getKind ();
8204+ ELFSpec = AE->getSpecifier ();
82178205 Expr = AE->getSubExpr ();
82188206 }
82198207
@@ -8230,9 +8218,9 @@ AArch64AsmParser::classifySymbolRef(const MCExpr *Expr,
82308218 if (!Relocatable || Res.getSymB ())
82318219 return false ;
82328220
8233- // Treat expressions with an ELFRefKind (like ":abs_g1:3", or
8221+ // Treat expressions with an ELFSpec (like ":abs_g1:3", or
82348222 // ":abs_g1:x" where x is constant) as symbolic even if there is no symbol.
8235- if (!Res.getSymA () && ELFRefKind == AArch64MCExpr::VK_INVALID)
8223+ if (!Res.getSymA () && ELFSpec == AArch64MCExpr::VK_INVALID)
82368224 return false ;
82378225
82388226 if (Res.getSymA ())
@@ -8241,7 +8229,7 @@ AArch64AsmParser::classifySymbolRef(const MCExpr *Expr,
82418229
82428230 // It's some symbol reference + a constant addend, but really
82438231 // shouldn't use both Darwin and ELF syntax.
8244- return ELFRefKind == AArch64MCExpr::VK_INVALID ||
8232+ return ELFSpec == AArch64MCExpr::VK_INVALID ||
82458233 DarwinRefKind == MCSymbolRefExpr::VK_None;
82468234}
82478235
0 commit comments