Path: blob/main/contrib/llvm-project/llvm/lib/Target/ARC/MCTargetDesc/ARCMCTargetDesc.cpp
35294 views
//===- ARCMCTargetDesc.cpp - ARC Target Descriptions ------------*- C++ -*-===//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 ARC specific target descriptions.9//10//===----------------------------------------------------------------------===//1112#include "ARCMCTargetDesc.h"13#include "ARCInstPrinter.h"14#include "ARCMCAsmInfo.h"15#include "ARCTargetStreamer.h"16#include "TargetInfo/ARCTargetInfo.h"17#include "llvm/MC/MCDwarf.h"18#include "llvm/MC/MCInstrInfo.h"19#include "llvm/MC/MCRegisterInfo.h"20#include "llvm/MC/MCSubtargetInfo.h"21#include "llvm/MC/TargetRegistry.h"22#include "llvm/Support/ErrorHandling.h"23#include "llvm/Support/FormattedStream.h"2425using namespace llvm;2627#define GET_INSTRINFO_MC_DESC28#define ENABLE_INSTR_PREDICATE_VERIFIER29#include "ARCGenInstrInfo.inc"3031#define GET_SUBTARGETINFO_MC_DESC32#include "ARCGenSubtargetInfo.inc"3334#define GET_REGINFO_MC_DESC35#include "ARCGenRegisterInfo.inc"3637static MCInstrInfo *createARCMCInstrInfo() {38auto *X = new MCInstrInfo();39InitARCMCInstrInfo(X);40return X;41}4243static MCRegisterInfo *createARCMCRegisterInfo(const Triple &TT) {44auto *X = new MCRegisterInfo();45InitARCMCRegisterInfo(X, ARC::BLINK);46return X;47}4849static MCSubtargetInfo *createARCMCSubtargetInfo(const Triple &TT,50StringRef CPU, StringRef FS) {51return createARCMCSubtargetInfoImpl(TT, CPU, /*TuneCPU=*/CPU, FS);52}5354static MCAsmInfo *createARCMCAsmInfo(const MCRegisterInfo &MRI,55const Triple &TT,56const MCTargetOptions &Options) {57MCAsmInfo *MAI = new ARCMCAsmInfo(TT);5859// Initial state of the frame pointer is SP.60MCCFIInstruction Inst = MCCFIInstruction::cfiDefCfa(nullptr, ARC::SP, 0);61MAI->addInitialFrameState(Inst);6263return MAI;64}6566static MCInstPrinter *createARCMCInstPrinter(const Triple &T,67unsigned SyntaxVariant,68const MCAsmInfo &MAI,69const MCInstrInfo &MII,70const MCRegisterInfo &MRI) {71return new ARCInstPrinter(MAI, MII, MRI);72}7374ARCTargetStreamer::ARCTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}75ARCTargetStreamer::~ARCTargetStreamer() = default;7677static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,78formatted_raw_ostream &OS,79MCInstPrinter *InstPrint) {80return new ARCTargetStreamer(S);81}8283// Force static initialization.84extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeARCTargetMC() {85// Register the MC asm info.86Target &TheARCTarget = getTheARCTarget();87RegisterMCAsmInfoFn X(TheARCTarget, createARCMCAsmInfo);8889// Register the MC instruction info.90TargetRegistry::RegisterMCInstrInfo(TheARCTarget, createARCMCInstrInfo);9192// Register the MC register info.93TargetRegistry::RegisterMCRegInfo(TheARCTarget, createARCMCRegisterInfo);9495// Register the MC subtarget info.96TargetRegistry::RegisterMCSubtargetInfo(TheARCTarget,97createARCMCSubtargetInfo);9899// Register the MCInstPrinter100TargetRegistry::RegisterMCInstPrinter(TheARCTarget, createARCMCInstPrinter);101102TargetRegistry::RegisterAsmTargetStreamer(TheARCTarget,103createTargetAsmStreamer);104}105106107