1239310Sdim//===-- NVPTXMCTargetDesc.cpp - NVPTX Target Descriptions -------*- C++ -*-===// 2239310Sdim// 3239310Sdim// The LLVM Compiler Infrastructure 4239310Sdim// 5239310Sdim// This file is distributed under the University of Illinois Open Source 6239310Sdim// License. See LICENSE.TXT for details. 7239310Sdim// 8239310Sdim//===----------------------------------------------------------------------===// 9239310Sdim// 10239310Sdim// This file provides NVPTX specific target descriptions. 11239310Sdim// 12239310Sdim//===----------------------------------------------------------------------===// 13239310Sdim 14239310Sdim#include "NVPTXMCTargetDesc.h" 15239310Sdim#include "NVPTXMCAsmInfo.h" 16263509Sdim#include "InstPrinter/NVPTXInstPrinter.h" 17239310Sdim#include "llvm/MC/MCCodeGenInfo.h" 18239310Sdim#include "llvm/MC/MCInstrInfo.h" 19239310Sdim#include "llvm/MC/MCRegisterInfo.h" 20239310Sdim#include "llvm/MC/MCSubtargetInfo.h" 21239310Sdim#include "llvm/Support/TargetRegistry.h" 22239310Sdim 23239310Sdim#define GET_INSTRINFO_MC_DESC 24239310Sdim#include "NVPTXGenInstrInfo.inc" 25239310Sdim 26239310Sdim#define GET_SUBTARGETINFO_MC_DESC 27239310Sdim#include "NVPTXGenSubtargetInfo.inc" 28239310Sdim 29239310Sdim#define GET_REGINFO_MC_DESC 30239310Sdim#include "NVPTXGenRegisterInfo.inc" 31239310Sdim 32239310Sdimusing namespace llvm; 33239310Sdim 34239310Sdimstatic MCInstrInfo *createNVPTXMCInstrInfo() { 35239310Sdim MCInstrInfo *X = new MCInstrInfo(); 36239310Sdim InitNVPTXMCInstrInfo(X); 37239310Sdim return X; 38239310Sdim} 39239310Sdim 40239310Sdimstatic MCRegisterInfo *createNVPTXMCRegisterInfo(StringRef TT) { 41239310Sdim MCRegisterInfo *X = new MCRegisterInfo(); 42239310Sdim // PTX does not have a return address register. 43239310Sdim InitNVPTXMCRegisterInfo(X, 0); 44239310Sdim return X; 45239310Sdim} 46239310Sdim 47252723Sdimstatic MCSubtargetInfo * 48252723SdimcreateNVPTXMCSubtargetInfo(StringRef TT, StringRef CPU, StringRef FS) { 49239310Sdim MCSubtargetInfo *X = new MCSubtargetInfo(); 50239310Sdim InitNVPTXMCSubtargetInfo(X, TT, CPU, FS); 51239310Sdim return X; 52239310Sdim} 53239310Sdim 54252723Sdimstatic MCCodeGenInfo *createNVPTXMCCodeGenInfo( 55252723Sdim StringRef TT, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL) { 56239310Sdim MCCodeGenInfo *X = new MCCodeGenInfo(); 57239310Sdim X->InitMCCodeGenInfo(RM, CM, OL); 58239310Sdim return X; 59239310Sdim} 60239310Sdim 61263509Sdimstatic MCInstPrinter *createNVPTXMCInstPrinter(const Target &T, 62263509Sdim unsigned SyntaxVariant, 63263509Sdim const MCAsmInfo &MAI, 64263509Sdim const MCInstrInfo &MII, 65263509Sdim const MCRegisterInfo &MRI, 66263509Sdim const MCSubtargetInfo &STI) { 67263509Sdim if (SyntaxVariant == 0) 68263509Sdim return new NVPTXInstPrinter(MAI, MII, MRI, STI); 69263509Sdim return 0; 70263509Sdim} 71263509Sdim 72239310Sdim// Force static initialization. 73239310Sdimextern "C" void LLVMInitializeNVPTXTargetMC() { 74239310Sdim // Register the MC asm info. 75239310Sdim RegisterMCAsmInfo<NVPTXMCAsmInfo> X(TheNVPTXTarget32); 76239310Sdim RegisterMCAsmInfo<NVPTXMCAsmInfo> Y(TheNVPTXTarget64); 77239310Sdim 78239310Sdim // Register the MC codegen info. 79239310Sdim TargetRegistry::RegisterMCCodeGenInfo(TheNVPTXTarget32, 80239310Sdim createNVPTXMCCodeGenInfo); 81239310Sdim TargetRegistry::RegisterMCCodeGenInfo(TheNVPTXTarget64, 82239310Sdim createNVPTXMCCodeGenInfo); 83239310Sdim 84239310Sdim // Register the MC instruction info. 85239310Sdim TargetRegistry::RegisterMCInstrInfo(TheNVPTXTarget32, createNVPTXMCInstrInfo); 86239310Sdim TargetRegistry::RegisterMCInstrInfo(TheNVPTXTarget64, createNVPTXMCInstrInfo); 87239310Sdim 88239310Sdim // Register the MC register info. 89239310Sdim TargetRegistry::RegisterMCRegInfo(TheNVPTXTarget32, 90239310Sdim createNVPTXMCRegisterInfo); 91239310Sdim TargetRegistry::RegisterMCRegInfo(TheNVPTXTarget64, 92239310Sdim createNVPTXMCRegisterInfo); 93239310Sdim 94239310Sdim // Register the MC subtarget info. 95239310Sdim TargetRegistry::RegisterMCSubtargetInfo(TheNVPTXTarget32, 96239310Sdim createNVPTXMCSubtargetInfo); 97239310Sdim TargetRegistry::RegisterMCSubtargetInfo(TheNVPTXTarget64, 98239310Sdim createNVPTXMCSubtargetInfo); 99239310Sdim 100263509Sdim // Register the MCInstPrinter. 101263509Sdim TargetRegistry::RegisterMCInstPrinter(TheNVPTXTarget32, 102263509Sdim createNVPTXMCInstPrinter); 103263509Sdim TargetRegistry::RegisterMCInstPrinter(TheNVPTXTarget64, 104263509Sdim createNVPTXMCInstPrinter); 105239310Sdim} 106