1//===-- ARMMCExpr.cpp - ARM specific MC expression classes ----------------===// 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#include "ARMMCExpr.h" 11#include "llvm/MC/MCAssembler.h" 12#include "llvm/MC/MCContext.h" 13using namespace llvm; 14 15#define DEBUG_TYPE "armmcexpr" 16 17const ARMMCExpr* 18ARMMCExpr::Create(VariantKind Kind, const MCExpr *Expr, 19 MCContext &Ctx) { 20 return new (Ctx) ARMMCExpr(Kind, Expr); 21} 22 23void ARMMCExpr::PrintImpl(raw_ostream &OS) const { 24 switch (Kind) { 25 default: llvm_unreachable("Invalid kind!"); 26 case VK_ARM_HI16: OS << ":upper16:"; break; 27 case VK_ARM_LO16: OS << ":lower16:"; break; 28 } 29 30 const MCExpr *Expr = getSubExpr(); 31 if (Expr->getKind() != MCExpr::SymbolRef) 32 OS << '('; 33 Expr->print(OS); 34 if (Expr->getKind() != MCExpr::SymbolRef) 35 OS << ')'; 36} 37 38bool 39ARMMCExpr::EvaluateAsRelocatableImpl(MCValue &Res, 40 const MCAsmLayout *Layout) const { 41 return false; 42} 43 44void ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const { 45 Streamer.visitUsedExpr(*getSubExpr()); 46} 47