brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 8cd3966 Raw
106 lines · cpp
1//===- ARCMCTargetDesc.cpp - ARC Target Descriptions ------------*- C++ -*-===//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 ARC specific target descriptions.10//11//===----------------------------------------------------------------------===//12 13#include "ARCMCTargetDesc.h"14#include "ARCInstPrinter.h"15#include "ARCMCAsmInfo.h"16#include "ARCTargetStreamer.h"17#include "TargetInfo/ARCTargetInfo.h"18#include "llvm/MC/MCDwarf.h"19#include "llvm/MC/MCInstrInfo.h"20#include "llvm/MC/MCRegisterInfo.h"21#include "llvm/MC/MCSubtargetInfo.h"22#include "llvm/MC/TargetRegistry.h"23#include "llvm/Support/ErrorHandling.h"24#include "llvm/Support/FormattedStream.h"25 26using namespace llvm;27 28#define GET_INSTRINFO_MC_DESC29#define ENABLE_INSTR_PREDICATE_VERIFIER30#include "ARCGenInstrInfo.inc"31 32#define GET_SUBTARGETINFO_MC_DESC33#include "ARCGenSubtargetInfo.inc"34 35#define GET_REGINFO_MC_DESC36#include "ARCGenRegisterInfo.inc"37 38static MCInstrInfo *createARCMCInstrInfo() {39  auto *X = new MCInstrInfo();40  InitARCMCInstrInfo(X);41  return X;42}43 44static MCRegisterInfo *createARCMCRegisterInfo(const Triple &TT) {45  auto *X = new MCRegisterInfo();46  InitARCMCRegisterInfo(X, ARC::BLINK);47  return X;48}49 50static MCSubtargetInfo *createARCMCSubtargetInfo(const Triple &TT,51                                                 StringRef CPU, StringRef FS) {52  return createARCMCSubtargetInfoImpl(TT, CPU, /*TuneCPU=*/CPU, FS);53}54 55static MCAsmInfo *createARCMCAsmInfo(const MCRegisterInfo &MRI,56                                     const Triple &TT,57                                     const MCTargetOptions &Options) {58  MCAsmInfo *MAI = new ARCMCAsmInfo(TT);59 60  // Initial state of the frame pointer is SP.61  MCCFIInstruction Inst = MCCFIInstruction::cfiDefCfa(nullptr, ARC::SP, 0);62  MAI->addInitialFrameState(Inst);63 64  return MAI;65}66 67static MCInstPrinter *createARCMCInstPrinter(const Triple &T,68                                             unsigned SyntaxVariant,69                                             const MCAsmInfo &MAI,70                                             const MCInstrInfo &MII,71                                             const MCRegisterInfo &MRI) {72  return new ARCInstPrinter(MAI, MII, MRI);73}74 75ARCTargetStreamer::ARCTargetStreamer(MCStreamer &S) : MCTargetStreamer(S) {}76ARCTargetStreamer::~ARCTargetStreamer() = default;77 78static MCTargetStreamer *createTargetAsmStreamer(MCStreamer &S,79                                                 formatted_raw_ostream &OS,80                                                 MCInstPrinter *InstPrint) {81  return new ARCTargetStreamer(S);82}83 84// Force static initialization.85extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeARCTargetMC() {86  // Register the MC asm info.87  Target &TheARCTarget = getTheARCTarget();88  RegisterMCAsmInfoFn X(TheARCTarget, createARCMCAsmInfo);89 90  // Register the MC instruction info.91  TargetRegistry::RegisterMCInstrInfo(TheARCTarget, createARCMCInstrInfo);92 93  // Register the MC register info.94  TargetRegistry::RegisterMCRegInfo(TheARCTarget, createARCMCRegisterInfo);95 96  // Register the MC subtarget info.97  TargetRegistry::RegisterMCSubtargetInfo(TheARCTarget,98                                          createARCMCSubtargetInfo);99 100  // Register the MCInstPrinter101  TargetRegistry::RegisterMCInstPrinter(TheARCTarget, createARCMCInstPrinter);102 103  TargetRegistry::RegisterAsmTargetStreamer(TheARCTarget,104                                            createTargetAsmStreamer);105}106