MipsMCExpr.h revision cd81d94322a39503e4a3e87b6ee03d4fcb3465fb
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 MIPSMCEXPR_H 11#define 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 override; 50 bool EvaluateAsRelocatableImpl(MCValue &Res, 51 const MCAsmLayout *Layout) const override; 52 void visitUsedExpr(MCStreamer &Streamer) const override; 53 const MCSection *FindAssociatedSection() const override { 54 return getSubExpr()->FindAssociatedSection(); 55 } 56 57 // There are no TLS MipsMCExprs at the moment. 58 void fixELFSymbolsInTLSFixups(MCAssembler &Asm) const override {} 59 60 static bool classof(const MCExpr *E) { 61 return E->getKind() == MCExpr::Target; 62 } 63}; 64} // end namespace llvm 65 66#endif 67