MipsMCTargetDesc.cpp revision 3e74d6fdd248e20a280f1dff3da9a6c689c2c4c3
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/MCSubtargetInfo.h" 22#include "llvm/Support/TargetRegistry.h" 23 24#define GET_INSTRINFO_MC_DESC 25#include "MipsGenInstrInfo.inc" 26 27#define GET_SUBTARGETINFO_MC_DESC 28#include "MipsGenSubtargetInfo.inc" 29 30#define GET_REGINFO_MC_DESC 31#include "MipsGenRegisterInfo.inc" 32 33using namespace llvm; 34 35static MCInstrInfo *createMipsMCInstrInfo() { 36 MCInstrInfo *X = new MCInstrInfo(); 37 InitMipsMCInstrInfo(X); 38 return X; 39} 40 41static MCRegisterInfo *createMipsMCRegisterInfo(StringRef TT) { 42 MCRegisterInfo *X = new MCRegisterInfo(); 43 InitMipsMCRegisterInfo(X, Mips::RA); 44 return X; 45} 46 47static MCSubtargetInfo *createMipsMCSubtargetInfo(StringRef TT, StringRef CPU, 48 StringRef FS) { 49 MCSubtargetInfo *X = new MCSubtargetInfo(); 50 InitMipsMCSubtargetInfo(X, TT, CPU, FS); 51 return X; 52} 53 54static MCAsmInfo *createMipsMCAsmInfo(const Target &T, StringRef TT) { 55 MCAsmInfo *MAI = new MipsMCAsmInfo(T, TT); 56 57 MachineLocation Dst(MachineLocation::VirtualFP); 58 MachineLocation Src(Mips::SP, 0); 59 MAI->addInitialFrameState(0, Dst, Src); 60 61 return MAI; 62} 63 64static MCCodeGenInfo *createMipsMCCodeGenInfo(StringRef TT, Reloc::Model RM, 65 CodeModel::Model CM) { 66 MCCodeGenInfo *X = new MCCodeGenInfo(); 67 if (RM == Reloc::Default) { 68 // Abicall enables PIC by default 69 if (TT.find("mipsallegrex") != std::string::npos || 70 TT.find("psp") != std::string::npos) 71 RM = Reloc::Static; 72 else 73 RM = Reloc::PIC_; 74 } 75 X->InitMCCodeGenInfo(RM, CM); 76 return X; 77} 78 79static MCInstPrinter *createMipsMCInstPrinter(const Target &T, 80 unsigned SyntaxVariant, 81 const MCAsmInfo &MAI) { 82 return new MipsInstPrinter(MAI); 83} 84 85extern "C" void LLVMInitializeMipsTargetMC() { 86 // Register the MC asm info. 87 RegisterMCAsmInfoFn X(TheMipsTarget, createMipsMCAsmInfo); 88 RegisterMCAsmInfoFn Y(TheMipselTarget, createMipsMCAsmInfo); 89 90 // Register the MC codegen info. 91 TargetRegistry::RegisterMCCodeGenInfo(TheMipsTarget, 92 createMipsMCCodeGenInfo); 93 TargetRegistry::RegisterMCCodeGenInfo(TheMipselTarget, 94 createMipsMCCodeGenInfo); 95 96 // Register the MC instruction info. 97 TargetRegistry::RegisterMCInstrInfo(TheMipsTarget, createMipsMCInstrInfo); 98 99 // Register the MC register info. 100 TargetRegistry::RegisterMCRegInfo(TheMipsTarget, createMipsMCRegisterInfo); 101 TargetRegistry::RegisterMCRegInfo(TheMipselTarget, createMipsMCRegisterInfo); 102 103 // Register the MC subtarget info. 104 TargetRegistry::RegisterMCSubtargetInfo(TheMipsTarget, 105 createMipsMCSubtargetInfo); 106 107 // Register the MCInstPrinter. 108 TargetRegistry::RegisterMCInstPrinter(TheMipsTarget, 109 createMipsMCInstPrinter); 110 TargetRegistry::RegisterMCInstPrinter(TheMipselTarget, 111 createMipsMCInstPrinter); 112} 113