12ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard//===-- AMDGPUMCTargetDesc.cpp - AMDGPU Target Descriptions ---------------===// 22ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// 32ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// The LLVM Compiler Infrastructure 42ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// 52ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// This file is distributed under the University of Illinois Open Source 62ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// License. See LICENSE.TXT for details. 72ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// 82ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard//===----------------------------------------------------------------------===// 92ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// 102ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// This file provides AMDGPU specific target descriptions. 112ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard// 122ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard//===----------------------------------------------------------------------===// 132ad8608cb3e6a8d2f375ad2295504167b082711fTom Stellard 14228a6641ccddaf24a993f827af1e97379785985aTom Stellard#include "AMDGPUMCTargetDesc.h" 15228a6641ccddaf24a993f827af1e97379785985aTom Stellard#include "AMDGPUMCAsmInfo.h" 16e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard#include "InstPrinter/AMDGPUInstPrinter.h" 17a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/MC/MachineLocation.h" 18a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/MC/MCCodeGenInfo.h" 19a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/MC/MCInstrInfo.h" 20a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/MC/MCRegisterInfo.h" 21235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard#include "llvm/MC/MCStreamer.h" 22a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/MC/MCSubtargetInfo.h" 23a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/Support/ErrorHandling.h" 24a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#include "llvm/Support/TargetRegistry.h" 25a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 26a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define GET_INSTRINFO_MC_DESC 2765917004d99ccb79f709e621f8f6cf66715ffdcaTom Stellard#include "AMDGPUGenInstrInfo.inc" 28a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 29a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define GET_SUBTARGETINFO_MC_DESC 3065917004d99ccb79f709e621f8f6cf66715ffdcaTom Stellard#include "AMDGPUGenSubtargetInfo.inc" 31a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 32a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard#define GET_REGINFO_MC_DESC 3365917004d99ccb79f709e621f8f6cf66715ffdcaTom Stellard#include "AMDGPUGenRegisterInfo.inc" 34a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 35a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellardusing namespace llvm; 36a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 379c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellardstatic MCInstrInfo *createAMDGPUMCInstrInfo() { 38a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard MCInstrInfo *X = new MCInstrInfo(); 399c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellard InitAMDGPUMCInstrInfo(X); 40a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return X; 41a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 42a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 439c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellardstatic MCRegisterInfo *createAMDGPUMCRegisterInfo(StringRef TT) { 44a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard MCRegisterInfo *X = new MCRegisterInfo(); 459c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellard InitAMDGPUMCRegisterInfo(X, 0); 46a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return X; 47a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 48a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 499c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellardstatic MCSubtargetInfo *createAMDGPUMCSubtargetInfo(StringRef TT, StringRef CPU, 50a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard StringRef FS) { 51a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard MCSubtargetInfo * X = new MCSubtargetInfo(); 529c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellard InitAMDGPUMCSubtargetInfo(X, TT, CPU, FS); 53a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return X; 54a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 55a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 569c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellardstatic MCCodeGenInfo *createAMDGPUMCCodeGenInfo(StringRef TT, Reloc::Model RM, 57a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard CodeModel::Model CM, 58a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard CodeGenOpt::Level OL) { 59a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard MCCodeGenInfo *X = new MCCodeGenInfo(); 60a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard X->InitMCCodeGenInfo(RM, CM, OL); 61a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard return X; 62a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 63a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 64e30b4644b613a130318cdf240ad237b0afbc525aTom Stellardstatic MCInstPrinter *createAMDGPUMCInstPrinter(const Target &T, 65e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard unsigned SyntaxVariant, 66e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard const MCAsmInfo &MAI, 67e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard const MCInstrInfo &MII, 68e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard const MCRegisterInfo &MRI, 69e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard const MCSubtargetInfo &STI) { 70e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard return new AMDGPUInstPrinter(MAI, MII, MRI); 71e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard} 72e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard 7390bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellardstatic MCCodeEmitter *createAMDGPUMCCodeEmitter(const MCInstrInfo &MCII, 7490bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard const MCSubtargetInfo &STI, 7590bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard MCContext &Ctx) { 7690bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard if (STI.getFeatureBits() & AMDGPU::Feature64BitPtr) { 7790bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard return createSIMCCodeEmitter(MCII, STI, Ctx); 7890bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard } else { 7990bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard return createR600MCCodeEmitter(MCII, STI, Ctx); 8090bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard } 8190bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard} 8290bd1d52bbf95947955a66ec67f5f6c7dc87119aTom Stellard 83235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellardstatic MCStreamer *createMCStreamer(const Target &T, StringRef TT, 84235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard MCContext &Ctx, MCAsmBackend &MAB, 85235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard raw_ostream &_OS, 86235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard MCCodeEmitter *_Emitter, 87235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard bool RelaxAll, 88235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard bool NoExecStack) { 89235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard return createPureStreamer(Ctx, MAB, _OS, _Emitter); 90235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard} 91235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard 9249fb99bd131a4ed89e6f55cf360f67618acafec4Tom Stellardextern "C" void LLVMInitializeAMDGPUTargetMC() { 93a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 94228a6641ccddaf24a993f827af1e97379785985aTom Stellard RegisterMCAsmInfo<AMDGPUMCAsmInfo> Y(TheAMDGPUTarget); 95a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 969c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellard TargetRegistry::RegisterMCCodeGenInfo(TheAMDGPUTarget, createAMDGPUMCCodeGenInfo); 97a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 989c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellard TargetRegistry::RegisterMCInstrInfo(TheAMDGPUTarget, createAMDGPUMCInstrInfo); 99a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1009c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellard TargetRegistry::RegisterMCRegInfo(TheAMDGPUTarget, createAMDGPUMCRegisterInfo); 101a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 1029c42fb6f26bb7db1bc793f5fcc922bbae6700d74Tom Stellard TargetRegistry::RegisterMCSubtargetInfo(TheAMDGPUTarget, createAMDGPUMCSubtargetInfo); 103a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard 104e30b4644b613a130318cdf240ad237b0afbc525aTom Stellard TargetRegistry::RegisterMCInstPrinter(TheAMDGPUTarget, createAMDGPUMCInstPrinter); 105235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard 106235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard TargetRegistry::RegisterMCCodeEmitter(TheAMDGPUTarget, createAMDGPUMCCodeEmitter); 107235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard 108235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard TargetRegistry::RegisterMCAsmBackend(TheAMDGPUTarget, createAMDGPUAsmBackend); 109235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard 110235318a578b3d7772a60590c7e76791ed6d1a78eTom Stellard TargetRegistry::RegisterMCObjectStreamer(TheAMDGPUTarget, createMCStreamer); 111a75c6163e605f35b14f26930dd9227e4f337ec9eTom Stellard} 112