MipsMCTargetDesc.cpp revision 234353
1193323Sed//===-- MipsMCTargetDesc.cpp - Mips Target Descriptions -------------------===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10193323Sed// This file provides Mips specific target descriptions. 11193323Sed// 12193323Sed//===----------------------------------------------------------------------===// 13193323Sed 14193323Sed#include "MipsMCAsmInfo.h" 15193323Sed#include "MipsMCTargetDesc.h" 16193323Sed#include "InstPrinter/MipsInstPrinter.h" 17193323Sed#include "llvm/MC/MachineLocation.h" 18193323Sed#include "llvm/MC/MCCodeGenInfo.h" 19193323Sed#include "llvm/MC/MCInstrInfo.h" 20194612Sed#include "llvm/MC/MCRegisterInfo.h" 21193323Sed#include "llvm/MC/MCStreamer.h" 22193323Sed#include "llvm/MC/MCSubtargetInfo.h" 23193323Sed#include "llvm/Support/ErrorHandling.h" 24193323Sed#include "llvm/Support/TargetRegistry.h" 25194178Sed 26193323Sed#define GET_INSTRINFO_MC_DESC 27194612Sed#include "MipsGenInstrInfo.inc" 28193323Sed 29193323Sed#define GET_SUBTARGETINFO_MC_DESC 30194612Sed#include "MipsGenSubtargetInfo.inc" 31194178Sed 32194178Sed#define GET_REGINFO_MC_DESC 33194178Sed#include "MipsGenRegisterInfo.inc" 34194178Sed 35194612Sedusing namespace llvm; 36194178Sed 37194178Sedstatic MCInstrInfo *createMipsMCInstrInfo() { 38193323Sed MCInstrInfo *X = new MCInstrInfo(); 39193323Sed InitMipsMCInstrInfo(X); 40193323Sed return X; 41193323Sed} 42193323Sed 43193323Sedstatic MCRegisterInfo *createMipsMCRegisterInfo(StringRef TT) { 44194178Sed MCRegisterInfo *X = new MCRegisterInfo(); 45194612Sed InitMipsMCRegisterInfo(X, Mips::RA); 46194612Sed return X; 47194612Sed} 48194612Sed 49194612Sedstatic MCSubtargetInfo *createMipsMCSubtargetInfo(StringRef TT, StringRef CPU, 50194612Sed StringRef FS) { 51193323Sed MCSubtargetInfo *X = new MCSubtargetInfo(); 52194178Sed InitMipsMCSubtargetInfo(X, TT, CPU, FS); 53194178Sed return X; 54194178Sed} 55193323Sed 56193323Sedstatic MCAsmInfo *createMipsMCAsmInfo(const Target &T, StringRef TT) { 57193323Sed MCAsmInfo *MAI = new MipsMCAsmInfo(T, TT); 58193323Sed 59193323Sed MachineLocation Dst(MachineLocation::VirtualFP); 60193323Sed MachineLocation Src(Mips::SP, 0); 61193323Sed MAI->addInitialFrameState(0, Dst, Src); 62193323Sed 63193323Sed return MAI; 64193323Sed} 65193323Sed 66193323Sedstatic MCCodeGenInfo *createMipsMCCodeGenInfo(StringRef TT, Reloc::Model RM, 67193323Sed CodeModel::Model CM, 68193323Sed CodeGenOpt::Level OL) { 69193323Sed MCCodeGenInfo *X = new MCCodeGenInfo(); 70193323Sed if (CM == CodeModel::JITDefault) 71193323Sed RM = Reloc::Static; 72193323Sed else if (RM == Reloc::Default) 73193323Sed RM = Reloc::PIC_; 74193323Sed X->InitMCCodeGenInfo(RM, CM, OL); 75193323Sed return X; 76193323Sed} 77193323Sed 78193323Sedstatic MCInstPrinter *createMipsMCInstPrinter(const Target &T, 79193323Sed unsigned SyntaxVariant, 80193323Sed const MCAsmInfo &MAI, 81193323Sed const MCInstrInfo &MII, 82193323Sed const MCRegisterInfo &MRI, 83193574Sed const MCSubtargetInfo &STI) { 84193574Sed return new MipsInstPrinter(MAI, MII, MRI); 85193574Sed} 86193574Sed 87193574Sedstatic MCStreamer *createMCStreamer(const Target &T, StringRef TT, 88193574Sed MCContext &Ctx, MCAsmBackend &MAB, 89193574Sed raw_ostream &_OS, 90193574Sed MCCodeEmitter *_Emitter, 91193574Sed bool RelaxAll, 92193323Sed bool NoExecStack) { 93193323Sed Triple TheTriple(TT); 94194612Sed 95194612Sed return createELFStreamer(Ctx, MAB, _OS, _Emitter, RelaxAll, NoExecStack); 96193323Sed} 97193323Sed 98193323Sedextern "C" void LLVMInitializeMipsTargetMC() { 99193323Sed // Register the MC asm info. 100193323Sed RegisterMCAsmInfoFn X(TheMipsTarget, createMipsMCAsmInfo); 101193323Sed RegisterMCAsmInfoFn Y(TheMipselTarget, createMipsMCAsmInfo); 102193323Sed RegisterMCAsmInfoFn A(TheMips64Target, createMipsMCAsmInfo); 103193323Sed RegisterMCAsmInfoFn B(TheMips64elTarget, createMipsMCAsmInfo); 104193323Sed 105193323Sed // Register the MC codegen info. 106193323Sed TargetRegistry::RegisterMCCodeGenInfo(TheMipsTarget, 107193323Sed createMipsMCCodeGenInfo); 108193323Sed TargetRegistry::RegisterMCCodeGenInfo(TheMipselTarget, 109193323Sed createMipsMCCodeGenInfo); 110193323Sed TargetRegistry::RegisterMCCodeGenInfo(TheMips64Target, 111193323Sed createMipsMCCodeGenInfo); 112193323Sed TargetRegistry::RegisterMCCodeGenInfo(TheMips64elTarget, 113193323Sed createMipsMCCodeGenInfo); 114193323Sed 115193323Sed // Register the MC instruction info. 116193323Sed TargetRegistry::RegisterMCInstrInfo(TheMipsTarget, createMipsMCInstrInfo); 117193323Sed TargetRegistry::RegisterMCInstrInfo(TheMipselTarget, createMipsMCInstrInfo); 118193323Sed TargetRegistry::RegisterMCInstrInfo(TheMips64Target, createMipsMCInstrInfo); 119193323Sed TargetRegistry::RegisterMCInstrInfo(TheMips64elTarget, 120193323Sed createMipsMCInstrInfo); 121193323Sed 122193323Sed // Register the MC register info. 123193323Sed TargetRegistry::RegisterMCRegInfo(TheMipsTarget, createMipsMCRegisterInfo); 124193323Sed TargetRegistry::RegisterMCRegInfo(TheMipselTarget, createMipsMCRegisterInfo); 125193323Sed TargetRegistry::RegisterMCRegInfo(TheMips64Target, createMipsMCRegisterInfo); 126193323Sed TargetRegistry::RegisterMCRegInfo(TheMips64elTarget, 127193574Sed createMipsMCRegisterInfo); 128193323Sed 129193323Sed // Register the MC Code Emitter 130193574Sed TargetRegistry::RegisterMCCodeEmitter(TheMipsTarget, 131193574Sed createMipsMCCodeEmitterEB); 132193574Sed TargetRegistry::RegisterMCCodeEmitter(TheMipselTarget, 133193574Sed createMipsMCCodeEmitterEL); 134193574Sed TargetRegistry::RegisterMCCodeEmitter(TheMips64Target, 135193574Sed createMipsMCCodeEmitterEB); 136193574Sed TargetRegistry::RegisterMCCodeEmitter(TheMips64elTarget, 137193323Sed createMipsMCCodeEmitterEL); 138193323Sed 139193323Sed // Register the object streamer. 140193323Sed TargetRegistry::RegisterMCObjectStreamer(TheMipsTarget, createMCStreamer); 141193323Sed TargetRegistry::RegisterMCObjectStreamer(TheMipselTarget, createMCStreamer); 142193323Sed TargetRegistry::RegisterMCObjectStreamer(TheMips64Target, createMCStreamer); 143193323Sed TargetRegistry::RegisterMCObjectStreamer(TheMips64elTarget, 144193323Sed createMCStreamer); 145193323Sed 146193323Sed // Register the asm backend. 147193323Sed TargetRegistry::RegisterMCAsmBackend(TheMipsTarget, 148193323Sed createMipsAsmBackendEB32); 149193323Sed TargetRegistry::RegisterMCAsmBackend(TheMipselTarget, 150193323Sed createMipsAsmBackendEL32); 151193323Sed TargetRegistry::RegisterMCAsmBackend(TheMips64Target, 152193323Sed createMipsAsmBackendEB64); 153193323Sed TargetRegistry::RegisterMCAsmBackend(TheMips64elTarget, 154193323Sed createMipsAsmBackendEL64); 155193323Sed 156193323Sed // Register the MC subtarget info. 157193323Sed TargetRegistry::RegisterMCSubtargetInfo(TheMipsTarget, 158193323Sed createMipsMCSubtargetInfo); 159193323Sed TargetRegistry::RegisterMCSubtargetInfo(TheMipselTarget, 160193323Sed createMipsMCSubtargetInfo); 161193323Sed TargetRegistry::RegisterMCSubtargetInfo(TheMips64Target, 162193323Sed createMipsMCSubtargetInfo); 163193323Sed TargetRegistry::RegisterMCSubtargetInfo(TheMips64elTarget, 164193323Sed createMipsMCSubtargetInfo); 165193323Sed 166193323Sed // Register the MCInstPrinter. 167193323Sed TargetRegistry::RegisterMCInstPrinter(TheMipsTarget, 168193323Sed createMipsMCInstPrinter); 169193323Sed TargetRegistry::RegisterMCInstPrinter(TheMipselTarget, 170193323Sed createMipsMCInstPrinter); 171193323Sed TargetRegistry::RegisterMCInstPrinter(TheMips64Target, 172193323Sed createMipsMCInstPrinter); 173193323Sed TargetRegistry::RegisterMCInstPrinter(TheMips64elTarget, 174193323Sed createMipsMCInstPrinter); 175193323Sed} 176193323Sed