1a20cde31SEvan Cheng //===-- ARMMCExpr.cpp - ARM specific MC expression classes ----------------===//
2a20cde31SEvan Cheng //
3*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
5*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a20cde31SEvan Cheng //
7a20cde31SEvan Cheng //===----------------------------------------------------------------------===//
8a20cde31SEvan Cheng 
9a20cde31SEvan Cheng #include "ARMMCExpr.h"
10ed0881b2SChandler Carruth #include "llvm/MC/MCContext.h"
11ef21bd44SPete Cooper #include "llvm/MC/MCStreamer.h"
12a20cde31SEvan Cheng using namespace llvm;
13a20cde31SEvan Cheng 
1484e68b29SChandler Carruth #define DEBUG_TYPE "armmcexpr"
1584e68b29SChandler Carruth 
16a20cde31SEvan Cheng const ARMMCExpr*
create(VariantKind Kind,const MCExpr * Expr,MCContext & Ctx)1713760bd1SJim Grosbach ARMMCExpr::create(VariantKind Kind, const MCExpr *Expr,
18a20cde31SEvan Cheng                        MCContext &Ctx) {
19a20cde31SEvan Cheng   return new (Ctx) ARMMCExpr(Kind, Expr);
20a20cde31SEvan Cheng }
21a20cde31SEvan Cheng 
printImpl(raw_ostream & OS,const MCAsmInfo * MAI) const228b643559SMatt Arsenault void ARMMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const {
23a20cde31SEvan Cheng   switch (Kind) {
24e55c556aSCraig Topper   default: llvm_unreachable("Invalid kind!");
25a20cde31SEvan Cheng   case VK_ARM_HI16: OS << ":upper16:"; break;
26a20cde31SEvan Cheng   case VK_ARM_LO16: OS << ":lower16:"; break;
27a20cde31SEvan Cheng   }
28a20cde31SEvan Cheng 
29a20cde31SEvan Cheng   const MCExpr *Expr = getSubExpr();
30a20cde31SEvan Cheng   if (Expr->getKind() != MCExpr::SymbolRef)
31a20cde31SEvan Cheng     OS << '(';
328b643559SMatt Arsenault   Expr->print(OS, MAI);
33a20cde31SEvan Cheng   if (Expr->getKind() != MCExpr::SymbolRef)
34a20cde31SEvan Cheng     OS << ')';
35a20cde31SEvan Cheng }
36a20cde31SEvan Cheng 
visitUsedExpr(MCStreamer & Streamer) const37e2c66244SRafael Espindola void ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
382be1281dSRafael Espindola   Streamer.visitUsedExpr(*getSubExpr());
39a20cde31SEvan Cheng }
40