10b57cec5SDimitry Andric //===-- ARMMCExpr.cpp - ARM specific MC expression classes ----------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 90b57cec5SDimitry Andric #include "ARMMCExpr.h" 100b57cec5SDimitry Andric #include "llvm/MC/MCContext.h" 110b57cec5SDimitry Andric #include "llvm/MC/MCStreamer.h" 120b57cec5SDimitry Andric using namespace llvm; 130b57cec5SDimitry Andric 140b57cec5SDimitry Andric #define DEBUG_TYPE "armmcexpr" 150b57cec5SDimitry Andric 160b57cec5SDimitry Andric const ARMMCExpr* create(VariantKind Kind,const MCExpr * Expr,MCContext & Ctx)170b57cec5SDimitry AndricARMMCExpr::create(VariantKind Kind, const MCExpr *Expr, 180b57cec5SDimitry Andric MCContext &Ctx) { 190b57cec5SDimitry Andric return new (Ctx) ARMMCExpr(Kind, Expr); 200b57cec5SDimitry Andric } 210b57cec5SDimitry Andric printImpl(raw_ostream & OS,const MCAsmInfo * MAI) const220b57cec5SDimitry Andricvoid ARMMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { 230b57cec5SDimitry Andric switch (Kind) { 240b57cec5SDimitry Andric default: llvm_unreachable("Invalid kind!"); 25*06c3fb27SDimitry Andric case VK_ARM_HI16: 26*06c3fb27SDimitry Andric OS << ":upper16:"; 27*06c3fb27SDimitry Andric break; 28*06c3fb27SDimitry Andric case VK_ARM_LO16: 29*06c3fb27SDimitry Andric OS << ":lower16:"; 30*06c3fb27SDimitry Andric break; 31*06c3fb27SDimitry Andric case VK_ARM_HI_8_15: 32*06c3fb27SDimitry Andric OS << ":upper8_15:"; 33*06c3fb27SDimitry Andric break; 34*06c3fb27SDimitry Andric case VK_ARM_HI_0_7: 35*06c3fb27SDimitry Andric OS << ":upper0_7:"; 36*06c3fb27SDimitry Andric break; 37*06c3fb27SDimitry Andric case VK_ARM_LO_8_15: 38*06c3fb27SDimitry Andric OS << ":lower8_15:"; 39*06c3fb27SDimitry Andric break; 40*06c3fb27SDimitry Andric case VK_ARM_LO_0_7: 41*06c3fb27SDimitry Andric OS << ":lower0_7:"; 42*06c3fb27SDimitry Andric break; 430b57cec5SDimitry Andric } 440b57cec5SDimitry Andric 450b57cec5SDimitry Andric const MCExpr *Expr = getSubExpr(); 460b57cec5SDimitry Andric if (Expr->getKind() != MCExpr::SymbolRef) 470b57cec5SDimitry Andric OS << '('; 480b57cec5SDimitry Andric Expr->print(OS, MAI); 490b57cec5SDimitry Andric if (Expr->getKind() != MCExpr::SymbolRef) 500b57cec5SDimitry Andric OS << ')'; 510b57cec5SDimitry Andric } 520b57cec5SDimitry Andric visitUsedExpr(MCStreamer & Streamer) const530b57cec5SDimitry Andricvoid ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const { 540b57cec5SDimitry Andric Streamer.visitUsedExpr(*getSubExpr()); 550b57cec5SDimitry Andric } 56