Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 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 | |
Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 10 | #include "ARMMCExpr.h" |
Chandler Carruth | ed0881b | 2012-12-03 16:50:05 +0000 | [diff] [blame] | 11 | #include "llvm/MC/MCContext.h" |
Pete Cooper | ef21bd4 | 2015-03-04 01:24:11 +0000 | [diff] [blame] | 12 | #include "llvm/MC/MCStreamer.h" |
Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 13 | using namespace llvm; |
| 14 | |
Chandler Carruth | 84e68b2 | 2014-04-22 02:41:26 +0000 | [diff] [blame] | 15 | #define DEBUG_TYPE "armmcexpr" |
| 16 | |
Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 17 | const ARMMCExpr* |
Jim Grosbach | 13760bd | 2015-05-30 01:25:56 +0000 | [diff] [blame] | 18 | ARMMCExpr::create(VariantKind Kind, const MCExpr *Expr, |
Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 19 | MCContext &Ctx) { |
| 20 | return new (Ctx) ARMMCExpr(Kind, Expr); |
| 21 | } |
| 22 | |
Matt Arsenault | 8b64355 | 2015-06-09 00:31:39 +0000 | [diff] [blame] | 23 | void ARMMCExpr::printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const { |
Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 24 | switch (Kind) { |
Craig Topper | e55c556 | 2012-02-07 02:50:20 +0000 | [diff] [blame] | 25 | default: llvm_unreachable("Invalid kind!"); |
Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 26 | case VK_ARM_HI16: OS << ":upper16:"; break; |
| 27 | case VK_ARM_LO16: OS << ":lower16:"; break; |
| 28 | } |
| 29 | |
| 30 | const MCExpr *Expr = getSubExpr(); |
| 31 | if (Expr->getKind() != MCExpr::SymbolRef) |
| 32 | OS << '('; |
Matt Arsenault | 8b64355 | 2015-06-09 00:31:39 +0000 | [diff] [blame] | 33 | Expr->print(OS, MAI); |
Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 34 | if (Expr->getKind() != MCExpr::SymbolRef) |
| 35 | OS << ')'; |
| 36 | } |
| 37 | |
Rafael Espindola | e2c6624 | 2014-06-25 15:45:33 +0000 | [diff] [blame] | 38 | void ARMMCExpr::visitUsedExpr(MCStreamer &Streamer) const { |
Rafael Espindola | 2be1281 | 2014-06-25 15:29:54 +0000 | [diff] [blame] | 39 | Streamer.visitUsedExpr(*getSubExpr()); |
Evan Cheng | 965b3c7 | 2011-01-13 07:58:56 +0000 | [diff] [blame] | 40 | } |