1414#include " AArch64MCSymbolizer.h"
1515#include " MCTargetDesc/AArch64AddressingModes.h"
1616#include " MCTargetDesc/AArch64FixupKinds.h"
17- #include " MCTargetDesc/AArch64MCExpr .h"
17+ #include " MCTargetDesc/AArch64MCAsmInfo .h"
1818#include " MCTargetDesc/AArch64MCTargetDesc.h"
1919#include " Utils/AArch64BaseInfo.h"
2020#include " bolt/Core/BinaryBasicBlock.h"
@@ -179,13 +179,10 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
179179
180180 bool equals (const MCSpecifierExpr &A, const MCSpecifierExpr &B,
181181 CompFuncTy Comp) const override {
182- const auto &AArch64ExprA = cast<AArch64MCExpr>(A);
183- const auto &AArch64ExprB = cast<AArch64MCExpr>(B);
184- if (AArch64ExprA.getKind () != AArch64ExprB.getKind ())
182+ if (A.getSpecifier () != B.getSpecifier ())
185183 return false ;
186184
187- return MCPlusBuilder::equals (*AArch64ExprA.getSubExpr (),
188- *AArch64ExprB.getSubExpr (), Comp);
185+ return MCPlusBuilder::equals (*A.getSubExpr (), *B.getSubExpr (), Comp);
189186 }
190187
191188 bool shortenInstruction (MCInst &, const MCSubtargetInfo &) const override {
@@ -1084,15 +1081,15 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
10841081
10851082 if (isADR (Inst) || RelType == ELF::R_AARCH64_ADR_PREL_LO21 ||
10861083 RelType == ELF::R_AARCH64_TLSDESC_ADR_PREL21) {
1087- return AArch64MCExpr ::create (Expr, AArch64MCExpr::VK_ABS, Ctx);
1084+ return MCSpecifierExpr ::create (Expr, AArch64MCExpr::VK_ABS, Ctx);
10881085 } else if (isADRP (Inst) || RelType == ELF::R_AARCH64_ADR_PREL_PG_HI21 ||
10891086 RelType == ELF::R_AARCH64_ADR_PREL_PG_HI21_NC ||
10901087 RelType == ELF::R_AARCH64_TLSDESC_ADR_PAGE21 ||
10911088 RelType == ELF::R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 ||
10921089 RelType == ELF::R_AARCH64_ADR_GOT_PAGE) {
10931090 // Never emit a GOT reloc, we handled this in
10941091 // RewriteInstance::readRelocations().
1095- return AArch64MCExpr ::create (Expr, AArch64MCExpr::VK_ABS_PAGE, Ctx);
1092+ return MCSpecifierExpr ::create (Expr, AArch64MCExpr::VK_ABS_PAGE, Ctx);
10961093 } else {
10971094 switch (RelType) {
10981095 case ELF::R_AARCH64_ADD_ABS_LO12_NC:
@@ -1106,18 +1103,18 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
11061103 case ELF::R_AARCH64_TLSDESC_LD64_LO12:
11071104 case ELF::R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC:
11081105 case ELF::R_AARCH64_TLSLE_ADD_TPREL_LO12_NC:
1109- return AArch64MCExpr ::create (Expr, AArch64MCExpr::VK_LO12, Ctx);
1106+ return MCSpecifierExpr ::create (Expr, AArch64MCExpr::VK_LO12, Ctx);
11101107 case ELF::R_AARCH64_MOVW_UABS_G3:
1111- return AArch64MCExpr ::create (Expr, AArch64MCExpr::VK_ABS_G3, Ctx);
1108+ return MCSpecifierExpr ::create (Expr, AArch64MCExpr::VK_ABS_G3, Ctx);
11121109 case ELF::R_AARCH64_MOVW_UABS_G2:
11131110 case ELF::R_AARCH64_MOVW_UABS_G2_NC:
1114- return AArch64MCExpr ::create (Expr, AArch64MCExpr::VK_ABS_G2_NC, Ctx);
1111+ return MCSpecifierExpr ::create (Expr, AArch64MCExpr::VK_ABS_G2_NC, Ctx);
11151112 case ELF::R_AARCH64_MOVW_UABS_G1:
11161113 case ELF::R_AARCH64_MOVW_UABS_G1_NC:
1117- return AArch64MCExpr ::create (Expr, AArch64MCExpr::VK_ABS_G1_NC, Ctx);
1114+ return MCSpecifierExpr ::create (Expr, AArch64MCExpr::VK_ABS_G1_NC, Ctx);
11181115 case ELF::R_AARCH64_MOVW_UABS_G0:
11191116 case ELF::R_AARCH64_MOVW_UABS_G0_NC:
1120- return AArch64MCExpr ::create (Expr, AArch64MCExpr::VK_ABS_G0_NC, Ctx);
1117+ return MCSpecifierExpr ::create (Expr, AArch64MCExpr::VK_ABS_G0_NC, Ctx);
11211118 default :
11221119 break ;
11231120 }
@@ -1142,7 +1139,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
11421139 }
11431140
11441141 const MCSymbol *getTargetSymbol (const MCExpr *Expr) const override {
1145- auto *AArchExpr = dyn_cast<AArch64MCExpr >(Expr);
1142+ auto *AArchExpr = dyn_cast<MCSpecifierExpr >(Expr);
11461143 if (AArchExpr && AArchExpr->getSubExpr ())
11471144 return getTargetSymbol (AArchExpr->getSubExpr ());
11481145
@@ -1162,7 +1159,7 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
11621159 }
11631160
11641161 int64_t getTargetAddend (const MCExpr *Expr) const override {
1165- auto *AArchExpr = dyn_cast<AArch64MCExpr >(Expr);
1162+ auto *AArchExpr = dyn_cast<MCSpecifierExpr >(Expr);
11661163 if (AArchExpr && AArchExpr->getSubExpr ())
11671164 return getTargetAddend (AArchExpr->getSubExpr ());
11681165
@@ -2030,39 +2027,35 @@ class AArch64MCPlusBuilder : public MCPlusBuilder {
20302027 MCInst Inst;
20312028 Inst.setOpcode (AArch64::MOVZXi);
20322029 Inst.addOperand (MCOperand::createReg (AArch64::X16));
2033- Inst.addOperand (MCOperand::createExpr (AArch64MCExpr::create (
2034- MCSymbolRefExpr::create (Target, MCSymbolRefExpr::VK_None, *Ctx),
2035- AArch64MCExpr::VK_ABS_G3, *Ctx)));
2030+ Inst.addOperand (MCOperand::createExpr (
2031+ MCSpecifierExpr::create (Target, AArch64MCExpr::VK_ABS_G3, *Ctx)));
20362032 Inst.addOperand (MCOperand::createImm (0x30 ));
20372033 Seq.emplace_back (Inst);
20382034
20392035 Inst.clear ();
20402036 Inst.setOpcode (AArch64::MOVKXi);
20412037 Inst.addOperand (MCOperand::createReg (AArch64::X16));
20422038 Inst.addOperand (MCOperand::createReg (AArch64::X16));
2043- Inst.addOperand (MCOperand::createExpr (AArch64MCExpr::create (
2044- MCSymbolRefExpr::create (Target, MCSymbolRefExpr::VK_None, *Ctx),
2045- AArch64MCExpr::VK_ABS_G2_NC, *Ctx)));
2039+ Inst.addOperand (MCOperand::createExpr (
2040+ MCSpecifierExpr::create (Target, AArch64MCExpr::VK_ABS_G2_NC, *Ctx)));
20462041 Inst.addOperand (MCOperand::createImm (0x20 ));
20472042 Seq.emplace_back (Inst);
20482043
20492044 Inst.clear ();
20502045 Inst.setOpcode (AArch64::MOVKXi);
20512046 Inst.addOperand (MCOperand::createReg (AArch64::X16));
20522047 Inst.addOperand (MCOperand::createReg (AArch64::X16));
2053- Inst.addOperand (MCOperand::createExpr (AArch64MCExpr::create (
2054- MCSymbolRefExpr::create (Target, MCSymbolRefExpr::VK_None, *Ctx),
2055- AArch64MCExpr::VK_ABS_G1_NC, *Ctx)));
2048+ Inst.addOperand (MCOperand::createExpr (
2049+ MCSpecifierExpr::create (Target, AArch64MCExpr::VK_ABS_G1_NC, *Ctx)));
20562050 Inst.addOperand (MCOperand::createImm (0x10 ));
20572051 Seq.emplace_back (Inst);
20582052
20592053 Inst.clear ();
20602054 Inst.setOpcode (AArch64::MOVKXi);
20612055 Inst.addOperand (MCOperand::createReg (AArch64::X16));
20622056 Inst.addOperand (MCOperand::createReg (AArch64::X16));
2063- Inst.addOperand (MCOperand::createExpr (AArch64MCExpr::create (
2064- MCSymbolRefExpr::create (Target, MCSymbolRefExpr::VK_None, *Ctx),
2065- AArch64MCExpr::VK_ABS_G0_NC, *Ctx)));
2057+ Inst.addOperand (MCOperand::createExpr (
2058+ MCSpecifierExpr::create (Target, AArch64MCExpr::VK_ABS_G0_NC, *Ctx)));
20662059 Inst.addOperand (MCOperand::createImm (0 ));
20672060 Seq.emplace_back (Inst);
20682061
0 commit comments