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