Path: blob/main/contrib/llvm-project/llvm/lib/Target/VE/MCTargetDesc/VEMCTargetDesc.cpp
35294 views
//===-- VEMCTargetDesc.cpp - VE 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 VE specific target descriptions.9//10//===----------------------------------------------------------------------===//1112#include "VEMCTargetDesc.h"13#include "TargetInfo/VETargetInfo.h"14#include "VEInstPrinter.h"15#include "VEMCAsmInfo.h"16#include "VETargetStreamer.h"17#include "llvm/MC/MCInstrInfo.h"18#include "llvm/MC/MCRegisterInfo.h"19#include "llvm/MC/MCSubtargetInfo.h"20#include "llvm/MC/TargetRegistry.h"21#include "llvm/Support/ErrorHandling.h"2223using namespace llvm;2425#define GET_INSTRINFO_MC_DESC26#define ENABLE_INSTR_PREDICATE_VERIFIER27#include "VEGenInstrInfo.inc"2829#define GET_SUBTARGETINFO_MC_DESC30#include "VEGenSubtargetInfo.inc"3132#define GET_REGINFO_MC_DESC33#include "VEGenRegisterInfo.inc"3435static MCAsmInfo *createVEMCAsmInfo(const MCRegisterInfo &MRI, const Triple &TT,36const MCTargetOptions &Options) {37MCAsmInfo *MAI = new VEELFMCAsmInfo(TT);38unsigned Reg = MRI.getDwarfRegNum(VE::SX11, true);39MCCFIInstruction Inst = MCCFIInstruction::cfiDefCfa(nullptr, Reg, 0);40MAI->addInitialFrameState(Inst);41return MAI;42}4344static MCInstrInfo *createVEMCInstrInfo() {45MCInstrInfo *X = new MCInstrInfo();46InitVEMCInstrInfo(X);47return X;48}4950static MCRegisterInfo *createVEMCRegisterInfo(const Triple &TT) {51MCRegisterInfo *X = new MCRegisterInfo();52InitVEMCRegisterInfo(X, VE::SX10);53return X;54}5556static MCSubtargetInfo *createVEMCSubtargetInfo(const Triple &TT, StringRef CPU,57StringRef FS) {58if (CPU.empty())59CPU = "generic";60return createVEMCSubtargetInfoImpl(TT, CPU, /*TuneCPU=*/CPU, FS);61}6263static MCTargetStreamer *64createObjectTargetStreamer(MCStreamer &S, const MCSubtargetInfo &STI) {65return new VETargetELFStreamer(S);66}6768static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,69formatted_raw_ostream &OS,70MCInstPrinter *InstPrint) {71return new VETargetAsmStreamer(S, OS);72}7374static MCTargetStreamer *createNullTargetStreamer(MCStreamer &S) {75return new VETargetStreamer(S);76}7778static MCInstPrinter *createVEMCInstPrinter(const Triple &T,79unsigned SyntaxVariant,80const MCAsmInfo &MAI,81const MCInstrInfo &MII,82const MCRegisterInfo &MRI) {83return new VEInstPrinter(MAI, MII, MRI);84}8586extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeVETargetMC() {87// Register the MC asm info.88RegisterMCAsmInfoFn X(getTheVETarget(), createVEMCAsmInfo);8990for (Target *T : {&getTheVETarget()}) {91// Register the MC instruction info.92TargetRegistry::RegisterMCInstrInfo(*T, createVEMCInstrInfo);9394// Register the MC register info.95TargetRegistry::RegisterMCRegInfo(*T, createVEMCRegisterInfo);9697// Register the MC subtarget info.98TargetRegistry::RegisterMCSubtargetInfo(*T, createVEMCSubtargetInfo);99100// Register the MC Code Emitter.101TargetRegistry::RegisterMCCodeEmitter(*T, createVEMCCodeEmitter);102103// Register the asm backend.104TargetRegistry::RegisterMCAsmBackend(*T, createVEAsmBackend);105106// Register the object target streamer.107TargetRegistry::RegisterObjectTargetStreamer(*T,108createObjectTargetStreamer);109110// Register the asm streamer.111TargetRegistry::RegisterAsmTargetStreamer(*T, createTargetAsmStreamer);112113// Register the null streamer.114TargetRegistry::RegisterNullTargetStreamer(*T, createNullTargetStreamer);115116// Register the MCInstPrinter117TargetRegistry::RegisterMCInstPrinter(*T, createVEMCInstPrinter);118}119}120121122