LLVM 17.0.0git
|
#include "Target/AArch64/MCTargetDesc/AArch64MCExpr.h"
Public Types | |
enum | VariantKind { VK_ABS = 0x001 , VK_SABS = 0x002 , VK_PREL = 0x003 , VK_GOT = 0x004 , VK_DTPREL = 0x005 , VK_GOTTPREL = 0x006 , VK_TPREL = 0x007 , VK_TLSDESC = 0x008 , VK_SECREL = 0x009 , VK_SymLocBits = 0x00f , VK_PAGE = 0x010 , VK_PAGEOFF = 0x020 , VK_HI12 = 0x030 , VK_G0 = 0x040 , VK_G1 = 0x050 , VK_G2 = 0x060 , VK_G3 = 0x070 , VK_LO15 = 0x080 , VK_AddressFragBits = 0x0f0 , VK_NC = 0x100 , VK_CALL = VK_ABS , VK_ABS_PAGE = VK_ABS | VK_PAGE , VK_ABS_PAGE_NC = VK_ABS | VK_PAGE | VK_NC , VK_ABS_G3 = VK_ABS | VK_G3 , VK_ABS_G2 = VK_ABS | VK_G2 , VK_ABS_G2_S = VK_SABS | VK_G2 , VK_ABS_G2_NC = VK_ABS | VK_G2 | VK_NC , VK_ABS_G1 = VK_ABS | VK_G1 , VK_ABS_G1_S = VK_SABS | VK_G1 , VK_ABS_G1_NC = VK_ABS | VK_G1 | VK_NC , VK_ABS_G0 = VK_ABS | VK_G0 , VK_ABS_G0_S = VK_SABS | VK_G0 , VK_ABS_G0_NC = VK_ABS | VK_G0 | VK_NC , VK_LO12 = VK_ABS | VK_PAGEOFF | VK_NC , VK_PREL_G3 = VK_PREL | VK_G3 , VK_PREL_G2 = VK_PREL | VK_G2 , VK_PREL_G2_NC = VK_PREL | VK_G2 | VK_NC , VK_PREL_G1 = VK_PREL | VK_G1 , VK_PREL_G1_NC = VK_PREL | VK_G1 | VK_NC , VK_PREL_G0 = VK_PREL | VK_G0 , VK_PREL_G0_NC = VK_PREL | VK_G0 | VK_NC , VK_GOT_LO12 = VK_GOT | VK_PAGEOFF | VK_NC , VK_GOT_PAGE = VK_GOT | VK_PAGE , VK_GOT_PAGE_LO15 = VK_GOT | VK_LO15 | VK_NC , VK_DTPREL_G2 = VK_DTPREL | VK_G2 , VK_DTPREL_G1 = VK_DTPREL | VK_G1 , VK_DTPREL_G1_NC = VK_DTPREL | VK_G1 | VK_NC , VK_DTPREL_G0 = VK_DTPREL | VK_G0 , VK_DTPREL_G0_NC = VK_DTPREL | VK_G0 | VK_NC , VK_DTPREL_HI12 = VK_DTPREL | VK_HI12 , VK_DTPREL_LO12 = VK_DTPREL | VK_PAGEOFF , VK_DTPREL_LO12_NC = VK_DTPREL | VK_PAGEOFF | VK_NC , VK_GOTTPREL_PAGE = VK_GOTTPREL | VK_PAGE , VK_GOTTPREL_LO12_NC = VK_GOTTPREL | VK_PAGEOFF | VK_NC , VK_GOTTPREL_G1 = VK_GOTTPREL | VK_G1 , VK_GOTTPREL_G0_NC = VK_GOTTPREL | VK_G0 | VK_NC , VK_TPREL_G2 = VK_TPREL | VK_G2 , VK_TPREL_G1 = VK_TPREL | VK_G1 , VK_TPREL_G1_NC = VK_TPREL | VK_G1 | VK_NC , VK_TPREL_G0 = VK_TPREL | VK_G0 , VK_TPREL_G0_NC = VK_TPREL | VK_G0 | VK_NC , VK_TPREL_HI12 = VK_TPREL | VK_HI12 , VK_TPREL_LO12 = VK_TPREL | VK_PAGEOFF , VK_TPREL_LO12_NC = VK_TPREL | VK_PAGEOFF | VK_NC , VK_TLSDESC_LO12 = VK_TLSDESC | VK_PAGEOFF , VK_TLSDESC_PAGE = VK_TLSDESC | VK_PAGE , VK_SECREL_LO12 = VK_SECREL | VK_PAGEOFF , VK_SECREL_HI12 = VK_SECREL | VK_HI12 , VK_INVALID = 0xfff } |
![]() | |
enum | ExprKind : uint8_t { Binary , Constant , SymbolRef , Unary , Target } |
Public Member Functions | |
StringRef | getVariantKindName () const |
Convert the variant kind into an ELF-appropriate modifier (e.g. | |
void | printImpl (raw_ostream &OS, const MCAsmInfo *MAI) const override |
void | visitUsedExpr (MCStreamer &Streamer) const override |
MCFragment * | findAssociatedFragment () const override |
bool | evaluateAsRelocatableImpl (MCValue &Res, const MCAsmLayout *Layout, const MCFixup *Fixup) const override |
void | fixELFSymbolsInTLSFixups (MCAssembler &Asm) const override |
Accessors | |
VariantKind | getKind () const |
Get the kind of this expression. | |
const MCExpr * | getSubExpr () const |
Get the expression this modifier applies to. | |
![]() | |
virtual void | printImpl (raw_ostream &OS, const MCAsmInfo *MAI) const =0 |
virtual bool | evaluateAsRelocatableImpl (MCValue &Res, const MCAsmLayout *Layout, const MCFixup *Fixup) const =0 |
virtual bool | isEqualTo (const MCExpr *x) const |
virtual bool | inlineAssignedExpr () const |
virtual void | visitUsedExpr (MCStreamer &Streamer) const =0 |
virtual MCFragment * | findAssociatedFragment () const =0 |
virtual void | fixELFSymbolsInTLSFixups (MCAssembler &) const =0 |
![]() | |
MCExpr (const MCExpr &)=delete | |
MCExpr & | operator= (const MCExpr &)=delete |
ExprKind | getKind () const |
SMLoc | getLoc () const |
void | print (raw_ostream &OS, const MCAsmInfo *MAI, bool InParens=false) const |
void | dump () const |
bool | evaluateAsAbsolute (int64_t &Res, const MCAsmLayout &Layout, const SectionAddrMap &Addrs) const |
Try to evaluate the expression to an absolute value. | |
bool | evaluateAsAbsolute (int64_t &Res) const |
bool | evaluateAsAbsolute (int64_t &Res, const MCAssembler &Asm) const |
bool | evaluateAsAbsolute (int64_t &Res, const MCAssembler *Asm) const |
bool | evaluateAsAbsolute (int64_t &Res, const MCAsmLayout &Layout) const |
bool | evaluateKnownAbsolute (int64_t &Res, const MCAsmLayout &Layout) const |
bool | evaluateAsRelocatable (MCValue &Res, const MCAsmLayout *Layout, const MCFixup *Fixup) const |
Try to evaluate the expression to a relocatable value, i.e. | |
bool | evaluateAsValue (MCValue &Res, const MCAsmLayout &Layout) const |
Try to evaluate the expression to the form (a - b + constant) where neither a nor b are variables. | |
MCFragment * | findAssociatedFragment () const |
Find the "associated section" for this expression, which is currently defined as the absolute section for constants, or otherwise the section associated with the first defined symbol in the expression. | |
Static Public Member Functions | |
static bool | classof (const MCExpr *E) |
Construction | |
static const AArch64MCExpr * | create (const MCExpr *Expr, VariantKind Kind, MCContext &Ctx) |
VariantKind information extractors. | |
static VariantKind | getSymbolLoc (VariantKind Kind) |
static VariantKind | getAddressFrag (VariantKind Kind) |
static bool | isNotChecked (VariantKind Kind) |
![]() | |
static bool | classof (const MCExpr *E) |
Additional Inherited Members | |
![]() | |
MCTargetExpr () | |
virtual | ~MCTargetExpr ()=default |
![]() | |
MCExpr (ExprKind Kind, SMLoc Loc, unsigned SubclassData=0) | |
bool | evaluateAsRelocatableImpl (MCValue &Res, const MCAssembler *Asm, const MCAsmLayout *Layout, const MCFixup *Fixup, const SectionAddrMap *Addrs, bool InSet) const |
unsigned | getSubclassData () const |
Definition at line 22 of file AArch64MCExpr.h.
Definition at line 24 of file AArch64MCExpr.h.
Definition at line 170 of file AArch64MCExpr.h.
References E, and llvm::MCExpr::Target.
|
static |
Definition at line 27 of file AArch64MCExpr.cpp.
Referenced by llvm::AArch64MCInstLower::lowerSymbolOperandCOFF(), and llvm::AArch64MCInstLower::lowerSymbolOperandELF().
|
overridevirtual |
Implements llvm::MCTargetExpr.
Definition at line 103 of file AArch64MCExpr.cpp.
References llvm::MCExpr::evaluateAsRelocatable(), Fixup, llvm::MCValue::get(), llvm::MCValue::getConstant(), getKind(), getSubExpr(), llvm::MCValue::getSymA(), and llvm::MCValue::getSymB().
|
overridevirtual |
Implements llvm::MCTargetExpr.
Definition at line 99 of file AArch64MCExpr.cpp.
References llvm_unreachable.
|
overridevirtual |
Implements llvm::MCTargetExpr.
Definition at line 144 of file AArch64MCExpr.cpp.
References fixELFSymbolsInTLSFixupsImpl(), getSubExpr(), getSymbolLoc(), VK_DTPREL, VK_GOTTPREL, VK_TLSDESC, and VK_TPREL.
|
inlinestatic |
Definition at line 147 of file AArch64MCExpr.h.
References VK_AddressFragBits.
Referenced by adjustFixupValue().
|
inline |
Get the kind of this expression.
Definition at line 134 of file AArch64MCExpr.h.
Referenced by evaluateAsRelocatableImpl(), and getVariantKindName().
Get the expression this modifier applies to.
Definition at line 137 of file AArch64MCExpr.h.
Referenced by evaluateAsRelocatableImpl(), fixELFSymbolsInTLSFixups(), and visitUsedExpr().
|
inlinestatic |
Definition at line 143 of file AArch64MCExpr.h.
References VK_SymLocBits.
Referenced by adjustFixupValue(), and fixELFSymbolsInTLSFixups().
StringRef AArch64MCExpr::getVariantKindName | ( | ) | const |
Convert the variant kind into an ELF-appropriate modifier (e.g.
":got:", ":lo12:").
Definition at line 32 of file AArch64MCExpr.cpp.
References getKind(), llvm_unreachable, VK_ABS_G0, VK_ABS_G0_NC, VK_ABS_G0_S, VK_ABS_G1, VK_ABS_G1_NC, VK_ABS_G1_S, VK_ABS_G2, VK_ABS_G2_NC, VK_ABS_G2_S, VK_ABS_G3, VK_ABS_PAGE, VK_ABS_PAGE_NC, VK_CALL, VK_DTPREL_G0, VK_DTPREL_G0_NC, VK_DTPREL_G1, VK_DTPREL_G1_NC, VK_DTPREL_G2, VK_DTPREL_HI12, VK_DTPREL_LO12, VK_DTPREL_LO12_NC, VK_GOT, VK_GOT_LO12, VK_GOT_PAGE, VK_GOT_PAGE_LO15, VK_GOTTPREL, VK_GOTTPREL_G0_NC, VK_GOTTPREL_G1, VK_GOTTPREL_LO12_NC, VK_GOTTPREL_PAGE, VK_LO12, VK_PREL_G0, VK_PREL_G0_NC, VK_PREL_G1, VK_PREL_G1_NC, VK_PREL_G2, VK_PREL_G2_NC, VK_PREL_G3, VK_SECREL_HI12, VK_SECREL_LO12, VK_TLSDESC, VK_TLSDESC_LO12, VK_TLSDESC_PAGE, VK_TPREL_G0, VK_TPREL_G0_NC, VK_TPREL_G1, VK_TPREL_G1_NC, VK_TPREL_G2, VK_TPREL_HI12, VK_TPREL_LO12, and VK_TPREL_LO12_NC.
Referenced by printImpl().
|
inlinestatic |
Definition at line 151 of file AArch64MCExpr.h.
References VK_NC.
|
overridevirtual |
Implements llvm::MCTargetExpr.
Definition at line 90 of file AArch64MCExpr.cpp.
References getVariantKindName(), OS, and llvm::MCExpr::print().
|
overridevirtual |
Implements llvm::MCTargetExpr.
Definition at line 95 of file AArch64MCExpr.cpp.
References getSubExpr(), and llvm::MCStreamer::visitUsedExpr().