]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/AVR/MCTargetDesc/AVRMCELFStreamer.cpp
Merge clang 7.0.1 and several follow-up changes
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / AVR / MCTargetDesc / AVRMCELFStreamer.cpp
1 //===--------- AVRMCELFStreamer.cpp - AVR subclass of MCELFStreamer -------===//
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 //
10 // This file is a stub that parses a MCInst bundle and passes the
11 // instructions on to the real streamer.
12 //
13 //===----------------------------------------------------------------------===//
14 #define DEBUG_TYPE "avrmcelfstreamer"
15
16 #include "MCTargetDesc/AVRMCELFStreamer.h"
17 #include "llvm/MC/MCContext.h"
18 #include "llvm/MC/MCExpr.h"
19 #include "llvm/MC/MCSymbol.h"
20 #include "llvm/MC/MCObjectWriter.h"
21
22 using namespace llvm;
23
24 void AVRMCELFStreamer::EmitValueForModiferKind(
25     const MCSymbol *Sym, unsigned SizeInBytes, SMLoc Loc,
26     AVRMCExpr::VariantKind ModifierKind) {
27   MCSymbolRefExpr::VariantKind Kind = MCSymbolRefExpr::VK_AVR_NONE;
28   if (ModifierKind == AVRMCExpr::VK_AVR_None) {
29     Kind = MCSymbolRefExpr::VK_AVR_DIFF8;
30     if (SizeInBytes == SIZE_LONG)
31       Kind = MCSymbolRefExpr::VK_AVR_DIFF32;
32     else if (SizeInBytes == SIZE_WORD)
33       Kind = MCSymbolRefExpr::VK_AVR_DIFF16;
34   } else if (ModifierKind == AVRMCExpr::VK_AVR_LO8)
35     Kind = MCSymbolRefExpr::VK_AVR_LO8;
36   else if (ModifierKind == AVRMCExpr::VK_AVR_HI8)
37     Kind = MCSymbolRefExpr::VK_AVR_HI8;
38   else if (ModifierKind == AVRMCExpr::VK_AVR_HH8)
39     Kind = MCSymbolRefExpr::VK_AVR_HLO8;
40   MCELFStreamer::EmitValue(MCSymbolRefExpr::create(Sym, Kind, getContext()),
41                            SizeInBytes, Loc);
42 }
43
44 namespace llvm {
45 MCStreamer *createAVRELFStreamer(Triple const &TT, MCContext &Context,
46                                  std::unique_ptr<MCAsmBackend> MAB,
47                                  std::unique_ptr<MCObjectWriter> OW,
48                                  std::unique_ptr<MCCodeEmitter> CE) {
49   return new AVRMCELFStreamer(Context, std::move(MAB), std::move(OW),
50                               std::move(CE));
51 }
52
53 } // end namespace llvm