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" 14 using namespace llvm; 15 16 #define DEBUG_TYPE "armmcexpr" 17 18 const ARMMCExpr* create(VariantKind Kind,const MCExpr * Expr,MCContext & Ctx)19ARMMCExpr::create(VariantKind Kind, const MCExpr *Expr, 20 MCContext &Ctx) { 21 return new (Ctx) ARMMCExpr(Kind, Expr); 22 } 23 printImpl(raw_ostream & OS,const MCAsmInfo * MAI) const24void ARMMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) 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, MAI); 35 if (Expr->getKind() != MCExpr::SymbolRef) 36 OS << ')'; 37 } 38 visitUsedExpr(MCStreamer & Streamer) const39void ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const { 40 Streamer.visitUsedExpr(*getSubExpr()); 41 } 42