diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2013-04-08 18:41:23 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2013-04-08 18:41:23 +0000 | 
| commit | 4a16efa3e43e35f0cc9efe3a67f620f0017c3d36 (patch) | |
| tree | 06099edc18d30894081a822b756f117cbe0b8207 /lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.cpp | |
| parent | 482e7bddf617ae804dc47133cb07eb4aa81e45de (diff) | |
Diffstat (limited to 'lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.cpp')
| -rw-r--r-- | lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.cpp | 113 | 
1 files changed, 113 insertions, 0 deletions
| diff --git a/lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.cpp b/lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.cpp new file mode 100644 index 000000000000..072ee49b6311 --- /dev/null +++ b/lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.cpp @@ -0,0 +1,113 @@ +//===-- AMDGPUMCTargetDesc.cpp - AMDGPU Target Descriptions ---------------===// +// +//                     The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +/// \file +/// \brief This file provides AMDGPU specific target descriptions. +// +//===----------------------------------------------------------------------===// + +#include "AMDGPUMCTargetDesc.h" +#include "AMDGPUMCAsmInfo.h" +#include "InstPrinter/AMDGPUInstPrinter.h" +#include "llvm/MC/MCCodeGenInfo.h" +#include "llvm/MC/MCInstrInfo.h" +#include "llvm/MC/MCRegisterInfo.h" +#include "llvm/MC/MCStreamer.h" +#include "llvm/MC/MCSubtargetInfo.h" +#include "llvm/MC/MachineLocation.h" +#include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/TargetRegistry.h" + +#define GET_INSTRINFO_MC_DESC +#include "AMDGPUGenInstrInfo.inc" + +#define GET_SUBTARGETINFO_MC_DESC +#include "AMDGPUGenSubtargetInfo.inc" + +#define GET_REGINFO_MC_DESC +#include "AMDGPUGenRegisterInfo.inc" + +using namespace llvm; + +static MCInstrInfo *createAMDGPUMCInstrInfo() { +  MCInstrInfo *X = new MCInstrInfo(); +  InitAMDGPUMCInstrInfo(X); +  return X; +} + +static MCRegisterInfo *createAMDGPUMCRegisterInfo(StringRef TT) { +  MCRegisterInfo *X = new MCRegisterInfo(); +  InitAMDGPUMCRegisterInfo(X, 0); +  return X; +} + +static MCSubtargetInfo *createAMDGPUMCSubtargetInfo(StringRef TT, StringRef CPU, +                                                   StringRef FS) { +  MCSubtargetInfo * X = new MCSubtargetInfo(); +  InitAMDGPUMCSubtargetInfo(X, TT, CPU, FS); +  return X; +} + +static MCCodeGenInfo *createAMDGPUMCCodeGenInfo(StringRef TT, Reloc::Model RM, +                                               CodeModel::Model CM, +                                               CodeGenOpt::Level OL) { +  MCCodeGenInfo *X = new MCCodeGenInfo(); +  X->InitMCCodeGenInfo(RM, CM, OL); +  return X; +} + +static MCInstPrinter *createAMDGPUMCInstPrinter(const Target &T, +                                                unsigned SyntaxVariant, +                                                const MCAsmInfo &MAI, +                                                const MCInstrInfo &MII, +                                                const MCRegisterInfo &MRI, +                                                const MCSubtargetInfo &STI) { +  return new AMDGPUInstPrinter(MAI, MII, MRI); +} + +static MCCodeEmitter *createAMDGPUMCCodeEmitter(const MCInstrInfo &MCII, +                                                const MCRegisterInfo &MRI, +                                                const MCSubtargetInfo &STI, +                                                MCContext &Ctx) { +  if (STI.getFeatureBits() & AMDGPU::Feature64BitPtr) { +    return createSIMCCodeEmitter(MCII, MRI, STI, Ctx); +  } else { +    return createR600MCCodeEmitter(MCII, MRI, STI, Ctx); +  } +} + +static MCStreamer *createMCStreamer(const Target &T, StringRef TT, +                                    MCContext &Ctx, MCAsmBackend &MAB, +                                    raw_ostream &_OS, +                                    MCCodeEmitter *_Emitter, +                                    bool RelaxAll, +                                    bool NoExecStack) { +  return createPureStreamer(Ctx, MAB, _OS, _Emitter); +} + +extern "C" void LLVMInitializeR600TargetMC() { + +  RegisterMCAsmInfo<AMDGPUMCAsmInfo> Y(TheAMDGPUTarget); + +  TargetRegistry::RegisterMCCodeGenInfo(TheAMDGPUTarget, createAMDGPUMCCodeGenInfo); + +  TargetRegistry::RegisterMCInstrInfo(TheAMDGPUTarget, createAMDGPUMCInstrInfo); + +  TargetRegistry::RegisterMCRegInfo(TheAMDGPUTarget, createAMDGPUMCRegisterInfo); + +  TargetRegistry::RegisterMCSubtargetInfo(TheAMDGPUTarget, createAMDGPUMCSubtargetInfo); + +  TargetRegistry::RegisterMCInstPrinter(TheAMDGPUTarget, createAMDGPUMCInstPrinter); + +  TargetRegistry::RegisterMCCodeEmitter(TheAMDGPUTarget, createAMDGPUMCCodeEmitter); + +  TargetRegistry::RegisterMCAsmBackend(TheAMDGPUTarget, createAMDGPUAsmBackend); + +  TargetRegistry::RegisterMCObjectStreamer(TheAMDGPUTarget, createMCStreamer); +} | 
