Path: blob/main/contrib/llvm-project/llvm/lib/Target/AVR/MCTargetDesc/AVRMCTargetDesc.cpp
35294 views
//===-- AVRMCTargetDesc.cpp - AVR Target Descriptions ---------------------===//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 provides AVR specific target descriptions.9//10//===----------------------------------------------------------------------===//1112#include "AVRMCTargetDesc.h"13#include "AVRELFStreamer.h"14#include "AVRInstPrinter.h"15#include "AVRMCAsmInfo.h"16#include "AVRMCELFStreamer.h"17#include "AVRTargetStreamer.h"18#include "TargetInfo/AVRTargetInfo.h"1920#include "llvm/MC/MCAsmBackend.h"21#include "llvm/MC/MCCodeEmitter.h"22#include "llvm/MC/MCELFStreamer.h"23#include "llvm/MC/MCInstrInfo.h"24#include "llvm/MC/MCRegisterInfo.h"25#include "llvm/MC/MCSubtargetInfo.h"26#include "llvm/MC/TargetRegistry.h"2728#define GET_INSTRINFO_MC_DESC29#define ENABLE_INSTR_PREDICATE_VERIFIER30#include "AVRGenInstrInfo.inc"3132#define GET_SUBTARGETINFO_MC_DESC33#include "AVRGenSubtargetInfo.inc"3435#define GET_REGINFO_MC_DESC36#include "AVRGenRegisterInfo.inc"3738using namespace llvm;3940MCInstrInfo *llvm::createAVRMCInstrInfo() {41MCInstrInfo *X = new MCInstrInfo();42InitAVRMCInstrInfo(X);4344return X;45}4647static MCRegisterInfo *createAVRMCRegisterInfo(const Triple &TT) {48MCRegisterInfo *X = new MCRegisterInfo();49InitAVRMCRegisterInfo(X, 0);5051return X;52}5354static MCSubtargetInfo *createAVRMCSubtargetInfo(const Triple &TT,55StringRef CPU, StringRef FS) {56return createAVRMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FS);57}5859static MCInstPrinter *createAVRMCInstPrinter(const Triple &T,60unsigned SyntaxVariant,61const MCAsmInfo &MAI,62const MCInstrInfo &MII,63const MCRegisterInfo &MRI) {64if (SyntaxVariant == 0) {65return new AVRInstPrinter(MAI, MII, MRI);66}6768return nullptr;69}7071static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,72std::unique_ptr<MCAsmBackend> &&MAB,73std::unique_ptr<MCObjectWriter> &&OW,74std::unique_ptr<MCCodeEmitter> &&Emitter) {75return createELFStreamer(Context, std::move(MAB), std::move(OW),76std::move(Emitter));77}7879static MCTargetStreamer *80createAVRObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {81return new AVRELFStreamer(S, STI);82}8384static MCTargetStreamer *createMCAsmTargetStreamer(MCStreamer &S,85formatted_raw_ostream &OS,86MCInstPrinter *InstPrint) {87return new AVRTargetAsmStreamer(S);88}8990extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAVRTargetMC() {91// Register the MC asm info.92RegisterMCAsmInfo<AVRMCAsmInfo> X(getTheAVRTarget());9394// Register the MC instruction info.95TargetRegistry::RegisterMCInstrInfo(getTheAVRTarget(), createAVRMCInstrInfo);9697// Register the MC register info.98TargetRegistry::RegisterMCRegInfo(getTheAVRTarget(), createAVRMCRegisterInfo);99100// Register the MC subtarget info.101TargetRegistry::RegisterMCSubtargetInfo(getTheAVRTarget(),102createAVRMCSubtargetInfo);103104// Register the MCInstPrinter.105TargetRegistry::RegisterMCInstPrinter(getTheAVRTarget(),106createAVRMCInstPrinter);107108// Register the MC Code Emitter109TargetRegistry::RegisterMCCodeEmitter(getTheAVRTarget(),110createAVRMCCodeEmitter);111112// Register the obj streamer113TargetRegistry::RegisterELFStreamer(getTheAVRTarget(), createMCStreamer);114115// Register the obj target streamer.116TargetRegistry::RegisterObjectTargetStreamer(getTheAVRTarget(),117createAVRObjectTargetStreamer);118119// Register the asm target streamer.120TargetRegistry::RegisterAsmTargetStreamer(getTheAVRTarget(),121createMCAsmTargetStreamer);122123// Register the asm backend (as little endian).124TargetRegistry::RegisterMCAsmBackend(getTheAVRTarget(), createAVRAsmBackend);125}126127128