brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.4 KiB · d29a7a5 Raw
127 lines · cpp
1//===-- AVRMCTargetDesc.cpp - AVR Target Descriptions ---------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9// This file provides AVR specific target descriptions.10//11//===----------------------------------------------------------------------===//12 13#include "AVRMCTargetDesc.h"14#include "AVRELFStreamer.h"15#include "AVRInstPrinter.h"16#include "AVRMCAsmInfo.h"17#include "AVRTargetStreamer.h"18#include "TargetInfo/AVRTargetInfo.h"19 20#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"27#include "llvm/Support/Compiler.h"28 29#define GET_INSTRINFO_MC_DESC30#define ENABLE_INSTR_PREDICATE_VERIFIER31#include "AVRGenInstrInfo.inc"32 33#define GET_SUBTARGETINFO_MC_DESC34#include "AVRGenSubtargetInfo.inc"35 36#define GET_REGINFO_MC_DESC37#include "AVRGenRegisterInfo.inc"38 39using namespace llvm;40 41MCInstrInfo *llvm::createAVRMCInstrInfo() {42  MCInstrInfo *X = new MCInstrInfo();43  InitAVRMCInstrInfo(X);44 45  return X;46}47 48static MCRegisterInfo *createAVRMCRegisterInfo(const Triple &TT) {49  MCRegisterInfo *X = new MCRegisterInfo();50  InitAVRMCRegisterInfo(X, 0);51 52  return X;53}54 55static MCSubtargetInfo *createAVRMCSubtargetInfo(const Triple &TT,56                                                 StringRef CPU, StringRef FS) {57  return createAVRMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FS);58}59 60static MCInstPrinter *createAVRMCInstPrinter(const Triple &T,61                                             unsigned SyntaxVariant,62                                             const MCAsmInfo &MAI,63                                             const MCInstrInfo &MII,64                                             const MCRegisterInfo &MRI) {65  if (SyntaxVariant == 0) {66    return new AVRInstPrinter(MAI, MII, MRI);67  }68 69  return nullptr;70}71 72static MCStreamer *createMCStreamer(const Triple &T, MCContext &Context,73                                    std::unique_ptr<MCAsmBackend> &&MAB,74                                    std::unique_ptr<MCObjectWriter> &&OW,75                                    std::unique_ptr<MCCodeEmitter> &&Emitter) {76  return createELFStreamer(Context, std::move(MAB), std::move(OW),77                           std::move(Emitter));78}79 80static MCTargetStreamer *81createAVRObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {82  return new AVRELFStreamer(S, STI);83}84 85static MCTargetStreamer *createMCAsmTargetStreamer(MCStreamer &S,86                                                   formatted_raw_ostream &OS,87                                                   MCInstPrinter *InstPrint) {88  return new AVRTargetAsmStreamer(S);89}90 91extern "C" LLVM_ABI LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAVRTargetMC() {92  // Register the MC asm info.93  RegisterMCAsmInfo<AVRMCAsmInfo> X(getTheAVRTarget());94 95  // Register the MC instruction info.96  TargetRegistry::RegisterMCInstrInfo(getTheAVRTarget(), createAVRMCInstrInfo);97 98  // Register the MC register info.99  TargetRegistry::RegisterMCRegInfo(getTheAVRTarget(), createAVRMCRegisterInfo);100 101  // Register the MC subtarget info.102  TargetRegistry::RegisterMCSubtargetInfo(getTheAVRTarget(),103                                          createAVRMCSubtargetInfo);104 105  // Register the MCInstPrinter.106  TargetRegistry::RegisterMCInstPrinter(getTheAVRTarget(),107                                        createAVRMCInstPrinter);108 109  // Register the MC Code Emitter110  TargetRegistry::RegisterMCCodeEmitter(getTheAVRTarget(),111                                        createAVRMCCodeEmitter);112 113  // Register the obj streamer114  TargetRegistry::RegisterELFStreamer(getTheAVRTarget(), createMCStreamer);115 116  // Register the obj target streamer.117  TargetRegistry::RegisterObjectTargetStreamer(getTheAVRTarget(),118                                               createAVRObjectTargetStreamer);119 120  // Register the asm target streamer.121  TargetRegistry::RegisterAsmTargetStreamer(getTheAVRTarget(),122                                            createMCAsmTargetStreamer);123 124  // Register the asm backend (as little endian).125  TargetRegistry::RegisterMCAsmBackend(getTheAVRTarget(), createAVRAsmBackend);126}127