1*9880d681SAndroid Build Coastguard Worker //===-- ARMMCExpr.cpp - ARM specific MC expression classes ----------------===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker #include "ARMMCExpr.h" 11*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCAssembler.h" 12*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCContext.h" 13*9880d681SAndroid Build Coastguard Worker #include "llvm/MC/MCStreamer.h" 14*9880d681SAndroid Build Coastguard Worker using namespace llvm; 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker #define DEBUG_TYPE "armmcexpr" 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker const ARMMCExpr* create(VariantKind Kind,const MCExpr * Expr,MCContext & Ctx)19*9880d681SAndroid Build Coastguard WorkerARMMCExpr::create(VariantKind Kind, const MCExpr *Expr, 20*9880d681SAndroid Build Coastguard Worker MCContext &Ctx) { 21*9880d681SAndroid Build Coastguard Worker return new (Ctx) ARMMCExpr(Kind, Expr); 22*9880d681SAndroid Build Coastguard Worker } 23*9880d681SAndroid Build Coastguard Worker printImpl(raw_ostream & OS,const MCAsmInfo * MAI) const24*9880d681SAndroid Build Coastguard Workervoid ARMMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { 25*9880d681SAndroid Build Coastguard Worker switch (Kind) { 26*9880d681SAndroid Build Coastguard Worker default: llvm_unreachable("Invalid kind!"); 27*9880d681SAndroid Build Coastguard Worker case VK_ARM_HI16: OS << ":upper16:"; break; 28*9880d681SAndroid Build Coastguard Worker case VK_ARM_LO16: OS << ":lower16:"; break; 29*9880d681SAndroid Build Coastguard Worker } 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker const MCExpr *Expr = getSubExpr(); 32*9880d681SAndroid Build Coastguard Worker if (Expr->getKind() != MCExpr::SymbolRef) 33*9880d681SAndroid Build Coastguard Worker OS << '('; 34*9880d681SAndroid Build Coastguard Worker Expr->print(OS, MAI); 35*9880d681SAndroid Build Coastguard Worker if (Expr->getKind() != MCExpr::SymbolRef) 36*9880d681SAndroid Build Coastguard Worker OS << ')'; 37*9880d681SAndroid Build Coastguard Worker } 38*9880d681SAndroid Build Coastguard Worker visitUsedExpr(MCStreamer & Streamer) const39*9880d681SAndroid Build Coastguard Workervoid ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const { 40*9880d681SAndroid Build Coastguard Worker Streamer.visitUsedExpr(*getSubExpr()); 41*9880d681SAndroid Build Coastguard Worker } 42