LLVM API Documentation
00001 //===-- NVPTXMCTargetDesc.cpp - NVPTX Target Descriptions -------*- C++ -*-===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file provides NVPTX specific target descriptions. 00011 // 00012 //===----------------------------------------------------------------------===// 00013 00014 #include "NVPTXMCTargetDesc.h" 00015 #include "NVPTXMCAsmInfo.h" 00016 #include "llvm/MC/MCCodeGenInfo.h" 00017 #include "llvm/MC/MCInstrInfo.h" 00018 #include "llvm/MC/MCRegisterInfo.h" 00019 #include "llvm/MC/MCSubtargetInfo.h" 00020 #include "llvm/Support/TargetRegistry.h" 00021 00022 #define GET_INSTRINFO_MC_DESC 00023 #include "NVPTXGenInstrInfo.inc" 00024 00025 #define GET_SUBTARGETINFO_MC_DESC 00026 #include "NVPTXGenSubtargetInfo.inc" 00027 00028 #define GET_REGINFO_MC_DESC 00029 #include "NVPTXGenRegisterInfo.inc" 00030 00031 using namespace llvm; 00032 00033 static MCInstrInfo *createNVPTXMCInstrInfo() { 00034 MCInstrInfo *X = new MCInstrInfo(); 00035 InitNVPTXMCInstrInfo(X); 00036 return X; 00037 } 00038 00039 static MCRegisterInfo *createNVPTXMCRegisterInfo(StringRef TT) { 00040 MCRegisterInfo *X = new MCRegisterInfo(); 00041 // PTX does not have a return address register. 00042 InitNVPTXMCRegisterInfo(X, 0); 00043 return X; 00044 } 00045 00046 static MCSubtargetInfo * 00047 createNVPTXMCSubtargetInfo(StringRef TT, StringRef CPU, StringRef FS) { 00048 MCSubtargetInfo *X = new MCSubtargetInfo(); 00049 InitNVPTXMCSubtargetInfo(X, TT, CPU, FS); 00050 return X; 00051 } 00052 00053 static MCCodeGenInfo *createNVPTXMCCodeGenInfo( 00054 StringRef TT, Reloc::Model RM, CodeModel::Model CM, CodeGenOpt::Level OL) { 00055 MCCodeGenInfo *X = new MCCodeGenInfo(); 00056 X->InitMCCodeGenInfo(RM, CM, OL); 00057 return X; 00058 } 00059 00060 // Force static initialization. 00061 extern "C" void LLVMInitializeNVPTXTargetMC() { 00062 // Register the MC asm info. 00063 RegisterMCAsmInfo<NVPTXMCAsmInfo> X(TheNVPTXTarget32); 00064 RegisterMCAsmInfo<NVPTXMCAsmInfo> Y(TheNVPTXTarget64); 00065 00066 // Register the MC codegen info. 00067 TargetRegistry::RegisterMCCodeGenInfo(TheNVPTXTarget32, 00068 createNVPTXMCCodeGenInfo); 00069 TargetRegistry::RegisterMCCodeGenInfo(TheNVPTXTarget64, 00070 createNVPTXMCCodeGenInfo); 00071 00072 // Register the MC instruction info. 00073 TargetRegistry::RegisterMCInstrInfo(TheNVPTXTarget32, createNVPTXMCInstrInfo); 00074 TargetRegistry::RegisterMCInstrInfo(TheNVPTXTarget64, createNVPTXMCInstrInfo); 00075 00076 // Register the MC register info. 00077 TargetRegistry::RegisterMCRegInfo(TheNVPTXTarget32, 00078 createNVPTXMCRegisterInfo); 00079 TargetRegistry::RegisterMCRegInfo(TheNVPTXTarget64, 00080 createNVPTXMCRegisterInfo); 00081 00082 // Register the MC subtarget info. 00083 TargetRegistry::RegisterMCSubtargetInfo(TheNVPTXTarget32, 00084 createNVPTXMCSubtargetInfo); 00085 TargetRegistry::RegisterMCSubtargetInfo(TheNVPTXTarget64, 00086 createNVPTXMCSubtargetInfo); 00087 00088 }