MipsMCExpr.h revision 302408
1//===-- MipsMCExpr.h - Mips specific MC expression classes ------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#ifndef LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSMCEXPR_H 11#define LLVM_LIB_TARGET_MIPS_MCTARGETDESC_MIPSMCEXPR_H 12 13#include "llvm/MC/MCAsmLayout.h" 14#include "llvm/MC/MCExpr.h" 15#include "llvm/MC/MCValue.h" 16 17namespace llvm { 18 19class MipsMCExpr : public MCTargetExpr { 20public: 21 enum VariantKind { 22 VK_Mips_None, 23 VK_Mips_LO, 24 VK_Mips_HI, 25 VK_Mips_HIGHER, 26 VK_Mips_HIGHEST 27 }; 28 29private: 30 const VariantKind Kind; 31 const MCExpr *Expr; 32 33 explicit MipsMCExpr(VariantKind Kind, const MCExpr *Expr) 34 : Kind(Kind), Expr(Expr) {} 35 36public: 37 static bool isSupportedBinaryExpr(MCSymbolRefExpr::VariantKind VK, 38 const MCBinaryExpr *BE); 39 40 static const MipsMCExpr *create(MCSymbolRefExpr::VariantKind VK, 41 const MCExpr *Expr, MCContext &Ctx); 42 43 /// getOpcode - Get the kind of this expression. 44 VariantKind getKind() const { return Kind; } 45 46 /// getSubExpr - Get the child of this expression. 47 const MCExpr *getSubExpr() const { return Expr; } 48 49 void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override; 50 bool evaluateAsRelocatableImpl(MCValue &Res, 51 const MCAsmLayout *Layout, 52 const MCFixup *Fixup) const override; 53 void visitUsedExpr(MCStreamer &Streamer) const override; 54 MCFragment *findAssociatedFragment() const override { 55 return getSubExpr()->findAssociatedFragment(); 56 } 57 58 // There are no TLS MipsMCExprs at the moment. 59 void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const override {} 60 61 static bool classof(const MCExpr *E) { 62 return E->getKind() == MCExpr::Target; 63 } 64}; 65} // end namespace llvm 66 67#endif 68