xref: /aosp_15_r20/external/llvm/lib/Target/ARM/MCTargetDesc/ARMMCExpr.cpp (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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 Worker ARMMCExpr::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 Worker void 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 Worker void ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const {
40*9880d681SAndroid Build Coastguard Worker   Streamer.visitUsedExpr(*getSubExpr());
41*9880d681SAndroid Build Coastguard Worker }
42