Path: blob/main/contrib/llvm-project/llvm/lib/Target/Xtensa/MCTargetDesc/XtensaMCTargetDesc.cpp
35295 views
//===-- XtensaMCTargetDesc.cpp - Xtensa target descriptions ---------------===//1//2// The LLVM Compiler Infrastructure3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9#include "XtensaMCTargetDesc.h"10#include "TargetInfo/XtensaTargetInfo.h"11#include "XtensaInstPrinter.h"12#include "XtensaMCAsmInfo.h"13#include "XtensaTargetStreamer.h"14#include "llvm/ADT/STLExtras.h"15#include "llvm/MC/MCAsmInfo.h"16#include "llvm/MC/MCInstrInfo.h"17#include "llvm/MC/MCRegisterInfo.h"18#include "llvm/MC/MCStreamer.h"19#include "llvm/MC/MCSubtargetInfo.h"20#include "llvm/MC/TargetRegistry.h"21#include "llvm/Support/ErrorHandling.h"2223#define GET_INSTRINFO_MC_DESC24#include "XtensaGenInstrInfo.inc"2526#define GET_REGINFO_MC_DESC27#include "XtensaGenRegisterInfo.inc"2829#define GET_SUBTARGETINFO_MC_DESC30#include "XtensaGenSubtargetInfo.inc"3132using namespace llvm;3334static MCAsmInfo *createXtensaMCAsmInfo(const MCRegisterInfo &MRI,35const Triple &TT,36const MCTargetOptions &Options) {37MCAsmInfo *MAI = new XtensaMCAsmInfo(TT);38return MAI;39}4041static MCInstrInfo *createXtensaMCInstrInfo() {42MCInstrInfo *X = new MCInstrInfo();43InitXtensaMCInstrInfo(X);44return X;45}4647static MCInstPrinter *createXtensaMCInstPrinter(const Triple &TT,48unsigned SyntaxVariant,49const MCAsmInfo &MAI,50const MCInstrInfo &MII,51const MCRegisterInfo &MRI) {52return new XtensaInstPrinter(MAI, MII, MRI);53}5455static MCRegisterInfo *createXtensaMCRegisterInfo(const Triple &TT) {56MCRegisterInfo *X = new MCRegisterInfo();57InitXtensaMCRegisterInfo(X, Xtensa::SP);58return X;59}6061static MCSubtargetInfo *62createXtensaMCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {63return createXtensaMCSubtargetInfoImpl(TT, CPU, CPU, FS);64}6566static MCTargetStreamer *67createXtensaAsmTargetStreamer(MCStreamer &S, formatted_raw_ostream &OS,68MCInstPrinter *InstPrint) {69return new XtensaTargetAsmStreamer(S, OS);70}7172static MCTargetStreamer *73createXtensaObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {74return new XtensaTargetELFStreamer(S);75}7677extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeXtensaTargetMC() {78// Register the MCAsmInfo.79TargetRegistry::RegisterMCAsmInfo(getTheXtensaTarget(),80createXtensaMCAsmInfo);8182// Register the MCCodeEmitter.83TargetRegistry::RegisterMCCodeEmitter(getTheXtensaTarget(),84createXtensaMCCodeEmitter);8586// Register the MCInstrInfo.87TargetRegistry::RegisterMCInstrInfo(getTheXtensaTarget(),88createXtensaMCInstrInfo);8990// Register the MCInstPrinter.91TargetRegistry::RegisterMCInstPrinter(getTheXtensaTarget(),92createXtensaMCInstPrinter);9394// Register the MCRegisterInfo.95TargetRegistry::RegisterMCRegInfo(getTheXtensaTarget(),96createXtensaMCRegisterInfo);9798// Register the MCSubtargetInfo.99TargetRegistry::RegisterMCSubtargetInfo(getTheXtensaTarget(),100createXtensaMCSubtargetInfo);101102// Register the MCAsmBackend.103TargetRegistry::RegisterMCAsmBackend(getTheXtensaTarget(),104createXtensaMCAsmBackend);105106// Register the asm target streamer.107TargetRegistry::RegisterAsmTargetStreamer(getTheXtensaTarget(),108createXtensaAsmTargetStreamer);109110// Register the ELF target streamer.111TargetRegistry::RegisterObjectTargetStreamer(112getTheXtensaTarget(), createXtensaObjectTargetStreamer);113}114115116