Path: blob/main/contrib/llvm-project/llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h
35294 views
//====- SparcMCExpr.h - Sparc specific MC expression classes --*- C++ -*-=====//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file describes Sparc-specific MCExprs, used for modifiers like9// "%hi" or "%lo" etc.,10//11//===----------------------------------------------------------------------===//1213#ifndef LLVM_LIB_TARGET_SPARC_MCTARGETDESC_SPARCMCEXPR_H14#define LLVM_LIB_TARGET_SPARC_MCTARGETDESC_SPARCMCEXPR_H1516#include "SparcFixupKinds.h"17#include "llvm/MC/MCExpr.h"1819namespace llvm {2021class StringRef;22class SparcMCExpr : public MCTargetExpr {23public:24enum VariantKind {25VK_Sparc_None,26VK_Sparc_LO,27VK_Sparc_HI,28VK_Sparc_H44,29VK_Sparc_M44,30VK_Sparc_L44,31VK_Sparc_HH,32VK_Sparc_HM,33VK_Sparc_LM,34VK_Sparc_PC22,35VK_Sparc_PC10,36VK_Sparc_GOT22,37VK_Sparc_GOT10,38VK_Sparc_GOT13,39VK_Sparc_13,40VK_Sparc_WPLT30,41VK_Sparc_WDISP30,42VK_Sparc_R_DISP32,43VK_Sparc_TLS_GD_HI22,44VK_Sparc_TLS_GD_LO10,45VK_Sparc_TLS_GD_ADD,46VK_Sparc_TLS_GD_CALL,47VK_Sparc_TLS_LDM_HI22,48VK_Sparc_TLS_LDM_LO10,49VK_Sparc_TLS_LDM_ADD,50VK_Sparc_TLS_LDM_CALL,51VK_Sparc_TLS_LDO_HIX22,52VK_Sparc_TLS_LDO_LOX10,53VK_Sparc_TLS_LDO_ADD,54VK_Sparc_TLS_IE_HI22,55VK_Sparc_TLS_IE_LO10,56VK_Sparc_TLS_IE_LD,57VK_Sparc_TLS_IE_LDX,58VK_Sparc_TLS_IE_ADD,59VK_Sparc_TLS_LE_HIX22,60VK_Sparc_TLS_LE_LOX10,61VK_Sparc_HIX22,62VK_Sparc_LOX10,63VK_Sparc_GOTDATA_HIX22,64VK_Sparc_GOTDATA_LOX10,65VK_Sparc_GOTDATA_OP,66};6768private:69const VariantKind Kind;70const MCExpr *Expr;7172explicit SparcMCExpr(VariantKind Kind, const MCExpr *Expr)73: Kind(Kind), Expr(Expr) {}7475public:76/// @name Construction77/// @{7879static const SparcMCExpr *create(VariantKind Kind, const MCExpr *Expr,80MCContext &Ctx);81/// @}82/// @name Accessors83/// @{8485/// getOpcode - Get the kind of this expression.86VariantKind getKind() const { return Kind; }8788/// getSubExpr - Get the child of this expression.89const MCExpr *getSubExpr() const { return Expr; }9091/// getFixupKind - Get the fixup kind of this expression.92Sparc::Fixups getFixupKind() const { return getFixupKind(Kind); }9394/// @}95void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;96bool evaluateAsRelocatableImpl(MCValue &Res, const MCAssembler *Asm,97const MCFixup *Fixup) const override;98void visitUsedExpr(MCStreamer &Streamer) const override;99MCFragment *findAssociatedFragment() const override {100return getSubExpr()->findAssociatedFragment();101}102103void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const override;104105static bool classof(const MCExpr *E) {106return E->getKind() == MCExpr::Target;107}108109static VariantKind parseVariantKind(StringRef name);110static bool printVariantKind(raw_ostream &OS, VariantKind Kind);111static Sparc::Fixups getFixupKind(VariantKind Kind);112};113114} // end namespace llvm.115116#endif117118119