Path: blob/main/contrib/llvm-project/llvm/lib/Target/AVR/MCTargetDesc/AVRMCELFStreamer.cpp
35294 views
//===--------- AVRMCELFStreamer.cpp - AVR subclass of MCELFStreamer -------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file is a stub that parses a MCInst bundle and passes the9// instructions on to the real streamer.10//11//===----------------------------------------------------------------------===//12#include "MCTargetDesc/AVRMCELFStreamer.h"13#include "llvm/MC/MCContext.h"14#include "llvm/MC/MCExpr.h"15#include "llvm/MC/MCObjectWriter.h"16#include "llvm/MC/MCSymbol.h"1718#define DEBUG_TYPE "avrmcelfstreamer"1920using namespace llvm;2122void AVRMCELFStreamer::emitValueForModiferKind(23const MCSymbol *Sym, unsigned SizeInBytes, SMLoc Loc,24AVRMCExpr::VariantKind ModifierKind) {25MCSymbolRefExpr::VariantKind Kind = MCSymbolRefExpr::VK_AVR_NONE;26if (ModifierKind == AVRMCExpr::VK_AVR_None) {27Kind = MCSymbolRefExpr::VK_AVR_DIFF8;28if (SizeInBytes == SIZE_LONG)29Kind = MCSymbolRefExpr::VK_AVR_DIFF32;30else if (SizeInBytes == SIZE_WORD)31Kind = MCSymbolRefExpr::VK_AVR_DIFF16;32} else if (ModifierKind == AVRMCExpr::VK_AVR_LO8)33Kind = MCSymbolRefExpr::VK_AVR_LO8;34else if (ModifierKind == AVRMCExpr::VK_AVR_HI8)35Kind = MCSymbolRefExpr::VK_AVR_HI8;36else if (ModifierKind == AVRMCExpr::VK_AVR_HH8)37Kind = MCSymbolRefExpr::VK_AVR_HLO8;38MCELFStreamer::emitValue(MCSymbolRefExpr::create(Sym, Kind, getContext()),39SizeInBytes, Loc);40}4142namespace llvm {43MCStreamer *createAVRELFStreamer(Triple const &TT, MCContext &Context,44std::unique_ptr<MCAsmBackend> MAB,45std::unique_ptr<MCObjectWriter> OW,46std::unique_ptr<MCCodeEmitter> CE) {47return new AVRMCELFStreamer(Context, std::move(MAB), std::move(OW),48std::move(CE));49}5051} // end namespace llvm525354