NVPTXMCTargetDesc.cpp revision 49683f3c961379fbc088871a5d6304950f1f1cbc
149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===-- NVPTXMCTargetDesc.cpp - NVPTX Target Descriptions -------*- C++ -*-===//
249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//                     The LLVM Compiler Infrastructure
449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// This file is distributed under the University of Illinois Open Source
649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// License. See LICENSE.TXT for details.
749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===//
949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
1049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// This file provides NVPTX specific target descriptions.
1149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//
1249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski//===----------------------------------------------------------------------===//
1349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
1449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTXMCTargetDesc.h"
1549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTXMCAsmInfo.h"
1649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/MC/MCCodeGenInfo.h"
1749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/MC/MCInstrInfo.h"
1849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/MC/MCRegisterInfo.h"
1949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/MC/MCSubtargetInfo.h"
2049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "llvm/Support/TargetRegistry.h"
2149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
2249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#define GET_INSTRINFO_MC_DESC
2349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTXGenInstrInfo.inc"
2449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
2549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#define GET_SUBTARGETINFO_MC_DESC
2649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTXGenSubtargetInfo.inc"
2749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
2849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#define GET_REGINFO_MC_DESC
2949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski#include "NVPTXGenRegisterInfo.inc"
3049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
3149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
3249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiusing namespace llvm;
3349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
3449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskistatic MCInstrInfo *createNVPTXMCInstrInfo() {
3549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  MCInstrInfo *X = new MCInstrInfo();
3649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  InitNVPTXMCInstrInfo(X);
3749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  return X;
3849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski}
3949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
4049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskistatic MCRegisterInfo *createNVPTXMCRegisterInfo(StringRef TT) {
4149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  MCRegisterInfo *X = new MCRegisterInfo();
4249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  // PTX does not have a return address register.
4349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  InitNVPTXMCRegisterInfo(X, 0);
4449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  return X;
4549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski}
4649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
4749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskistatic MCSubtargetInfo *createNVPTXMCSubtargetInfo(StringRef TT, StringRef CPU,
4849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                                   StringRef FS) {
4949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  MCSubtargetInfo *X = new MCSubtargetInfo();
5049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  InitNVPTXMCSubtargetInfo(X, TT, CPU, FS);
5149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  return X;
5249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski}
5349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
5449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskistatic MCCodeGenInfo *createNVPTXMCCodeGenInfo(StringRef TT, Reloc::Model RM,
5549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                               CodeModel::Model CM,
5649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                               CodeGenOpt::Level OL) {
5749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  MCCodeGenInfo *X = new MCCodeGenInfo();
5849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  X->InitMCCodeGenInfo(RM, CM, OL);
5949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  return X;
6049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski}
6149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
6249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
6349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski// Force static initialization.
6449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinskiextern "C" void LLVMInitializeNVPTXTargetMC() {
6549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  // Register the MC asm info.
6649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  RegisterMCAsmInfo<NVPTXMCAsmInfo> X(TheNVPTXTarget32);
6749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  RegisterMCAsmInfo<NVPTXMCAsmInfo> Y(TheNVPTXTarget64);
6849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
6949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  // Register the MC codegen info.
7049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  TargetRegistry::RegisterMCCodeGenInfo(TheNVPTXTarget32,
7149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                        createNVPTXMCCodeGenInfo);
7249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  TargetRegistry::RegisterMCCodeGenInfo(TheNVPTXTarget64,
7349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                        createNVPTXMCCodeGenInfo);
7449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
7549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  // Register the MC instruction info.
7649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  TargetRegistry::RegisterMCInstrInfo(TheNVPTXTarget32, createNVPTXMCInstrInfo);
7749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  TargetRegistry::RegisterMCInstrInfo(TheNVPTXTarget64, createNVPTXMCInstrInfo);
7849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
7949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  // Register the MC register info.
8049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  TargetRegistry::RegisterMCRegInfo(TheNVPTXTarget32,
8149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                    createNVPTXMCRegisterInfo);
8249683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  TargetRegistry::RegisterMCRegInfo(TheNVPTXTarget64,
8349683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                    createNVPTXMCRegisterInfo);
8449683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
8549683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  // Register the MC subtarget info.
8649683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  TargetRegistry::RegisterMCSubtargetInfo(TheNVPTXTarget32,
8749683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                          createNVPTXMCSubtargetInfo);
8849683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski  TargetRegistry::RegisterMCSubtargetInfo(TheNVPTXTarget64,
8949683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski                                          createNVPTXMCSubtargetInfo);
9049683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski
9149683f3c961379fbc088871a5d6304950f1f1cbcJustin Holewinski}
92