MipsMCTargetDesc.cpp revision 226633
1//===-- MipsMCTargetDesc.cpp - Mips Target Descriptions ---------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file provides Mips specific target descriptions. 11// 12//===----------------------------------------------------------------------===// 13 14#include "MipsMCTargetDesc.h" 15#include "MipsMCAsmInfo.h" 16#include "InstPrinter/MipsInstPrinter.h" 17#include "llvm/MC/MachineLocation.h" 18#include "llvm/MC/MCCodeGenInfo.h" 19#include "llvm/MC/MCInstrInfo.h" 20#include "llvm/MC/MCRegisterInfo.h" 21#include "llvm/MC/MCStreamer.h" 22#include "llvm/MC/MCSubtargetInfo.h" 23#include "llvm/Support/TargetRegistry.h" 24 25#define GET_INSTRINFO_MC_DESC 26#include "MipsGenInstrInfo.inc" 27 28#define GET_SUBTARGETINFO_MC_DESC 29#include "MipsGenSubtargetInfo.inc" 30 31#define GET_REGINFO_MC_DESC 32#include "MipsGenRegisterInfo.inc" 33 34using namespace llvm; 35 36static MCInstrInfo *createMipsMCInstrInfo() { 37 MCInstrInfo *X = new MCInstrInfo(); 38 InitMipsMCInstrInfo(X); 39 return X; 40} 41 42static MCRegisterInfo *createMipsMCRegisterInfo(StringRef TT) { 43 MCRegisterInfo *X = new MCRegisterInfo(); 44 InitMipsMCRegisterInfo(X, Mips::RA); 45 return X; 46} 47 48static MCSubtargetInfo *createMipsMCSubtargetInfo(StringRef TT, StringRef CPU, 49 StringRef FS) { 50 MCSubtargetInfo *X = new MCSubtargetInfo(); 51 InitMipsMCSubtargetInfo(X, TT, CPU, FS); 52 return X; 53} 54 55static MCAsmInfo *createMipsMCAsmInfo(const Target &T, StringRef TT) { 56 MCAsmInfo *MAI = new MipsMCAsmInfo(T, TT); 57 58 MachineLocation Dst(MachineLocation::VirtualFP); 59 MachineLocation Src(Mips::SP, 0); 60 MAI->addInitialFrameState(0, Dst, Src); 61 62 return MAI; 63} 64 65static MCCodeGenInfo *createMipsMCCodeGenInfo(StringRef TT, Reloc::Model RM, 66 CodeModel::Model CM) { 67 MCCodeGenInfo *X = new MCCodeGenInfo(); 68 if (RM == Reloc::Default) 69 RM = Reloc::PIC_; 70 X->InitMCCodeGenInfo(RM, CM); 71 return X; 72} 73 74static MCInstPrinter *createMipsMCInstPrinter(const Target &T, 75 unsigned SyntaxVariant, 76 const MCAsmInfo &MAI, 77 const MCSubtargetInfo &STI) { 78 return new MipsInstPrinter(MAI); 79} 80 81static MCStreamer *createMCStreamer(const Target &T, StringRef TT, 82 MCContext &Ctx, MCAsmBackend &MAB, 83 raw_ostream &_OS, 84 MCCodeEmitter *_Emitter, 85 bool RelaxAll, 86 bool NoExecStack) { 87 Triple TheTriple(TT); 88 89 return createELFStreamer(Ctx, MAB, _OS, _Emitter, RelaxAll, NoExecStack); 90} 91 92extern "C" void LLVMInitializeMipsTargetMC() { 93 // Register the MC asm info. 94 RegisterMCAsmInfoFn X(TheMipsTarget, createMipsMCAsmInfo); 95 RegisterMCAsmInfoFn Y(TheMipselTarget, createMipsMCAsmInfo); 96 RegisterMCAsmInfoFn A(TheMips64Target, createMipsMCAsmInfo); 97 RegisterMCAsmInfoFn B(TheMips64elTarget, createMipsMCAsmInfo); 98 99 // Register the MC codegen info. 100 TargetRegistry::RegisterMCCodeGenInfo(TheMipsTarget, 101 createMipsMCCodeGenInfo); 102 TargetRegistry::RegisterMCCodeGenInfo(TheMipselTarget, 103 createMipsMCCodeGenInfo); 104 TargetRegistry::RegisterMCCodeGenInfo(TheMips64Target, 105 createMipsMCCodeGenInfo); 106 TargetRegistry::RegisterMCCodeGenInfo(TheMips64elTarget, 107 createMipsMCCodeGenInfo); 108 109 // Register the MC instruction info. 110 TargetRegistry::RegisterMCInstrInfo(TheMipsTarget, createMipsMCInstrInfo); 111 TargetRegistry::RegisterMCInstrInfo(TheMipselTarget, createMipsMCInstrInfo); 112 TargetRegistry::RegisterMCInstrInfo(TheMips64Target, createMipsMCInstrInfo); 113 TargetRegistry::RegisterMCInstrInfo(TheMips64elTarget, createMipsMCInstrInfo); 114 115 // Register the MC register info. 116 TargetRegistry::RegisterMCRegInfo(TheMipsTarget, createMipsMCRegisterInfo); 117 TargetRegistry::RegisterMCRegInfo(TheMipselTarget, createMipsMCRegisterInfo); 118 TargetRegistry::RegisterMCRegInfo(TheMips64Target, createMipsMCRegisterInfo); 119 TargetRegistry::RegisterMCRegInfo(TheMips64elTarget, 120 createMipsMCRegisterInfo); 121 122 // Register the MC Code Emitter 123 TargetRegistry::RegisterMCCodeEmitter(TheMipsTarget, createMipsMCCodeEmitter); 124 TargetRegistry::RegisterMCCodeEmitter(TheMipselTarget, 125 createMipsMCCodeEmitter); 126 TargetRegistry::RegisterMCCodeEmitter(TheMips64Target, 127 createMipsMCCodeEmitter); 128 TargetRegistry::RegisterMCCodeEmitter(TheMips64elTarget, 129 createMipsMCCodeEmitter); 130 131 // Register the object streamer. 132 TargetRegistry::RegisterMCObjectStreamer(TheMipsTarget, createMCStreamer); 133 TargetRegistry::RegisterMCObjectStreamer(TheMipselTarget, createMCStreamer); 134 TargetRegistry::RegisterMCObjectStreamer(TheMips64Target, createMCStreamer); 135 TargetRegistry::RegisterMCObjectStreamer(TheMips64elTarget, createMCStreamer); 136 137 // Register the asm backend. 138 TargetRegistry::RegisterMCAsmBackend(TheMipsTarget, createMipsAsmBackend); 139 TargetRegistry::RegisterMCAsmBackend(TheMipselTarget, createMipsAsmBackend); 140 TargetRegistry::RegisterMCAsmBackend(TheMips64Target, createMipsAsmBackend); 141 TargetRegistry::RegisterMCAsmBackend(TheMips64elTarget, createMipsAsmBackend); 142 143 // Register the MC subtarget info. 144 TargetRegistry::RegisterMCSubtargetInfo(TheMipsTarget, 145 createMipsMCSubtargetInfo); 146 TargetRegistry::RegisterMCSubtargetInfo(TheMipselTarget, 147 createMipsMCSubtargetInfo); 148 TargetRegistry::RegisterMCSubtargetInfo(TheMips64Target, 149 createMipsMCSubtargetInfo); 150 TargetRegistry::RegisterMCSubtargetInfo(TheMips64elTarget, 151 createMipsMCSubtargetInfo); 152 153 // Register the MCInstPrinter. 154 TargetRegistry::RegisterMCInstPrinter(TheMipsTarget, 155 createMipsMCInstPrinter); 156 TargetRegistry::RegisterMCInstPrinter(TheMipselTarget, 157 createMipsMCInstPrinter); 158 TargetRegistry::RegisterMCInstPrinter(TheMips64Target, 159 createMipsMCInstPrinter); 160 TargetRegistry::RegisterMCInstPrinter(TheMips64elTarget, 161 createMipsMCInstPrinter); 162} 163