SparcMCTargetDesc.cpp revision 251662
1234353Sdim//===-- SparcMCTargetDesc.cpp - Sparc Target Descriptions -----------------===// 2224133Sdim// 3224133Sdim// The LLVM Compiler Infrastructure 4224133Sdim// 5224133Sdim// This file is distributed under the University of Illinois Open Source 6224133Sdim// License. See LICENSE.TXT for details. 7224133Sdim// 8224133Sdim//===----------------------------------------------------------------------===// 9224133Sdim// 10224133Sdim// This file provides Sparc specific target descriptions. 11224133Sdim// 12224133Sdim//===----------------------------------------------------------------------===// 13224133Sdim 14224133Sdim#include "SparcMCTargetDesc.h" 15224133Sdim#include "SparcMCAsmInfo.h" 16226633Sdim#include "llvm/MC/MCCodeGenInfo.h" 17224133Sdim#include "llvm/MC/MCInstrInfo.h" 18224133Sdim#include "llvm/MC/MCRegisterInfo.h" 19224133Sdim#include "llvm/MC/MCSubtargetInfo.h" 20234353Sdim#include "llvm/Support/ErrorHandling.h" 21226633Sdim#include "llvm/Support/TargetRegistry.h" 22224133Sdim 23224133Sdim#define GET_INSTRINFO_MC_DESC 24224133Sdim#include "SparcGenInstrInfo.inc" 25224133Sdim 26224133Sdim#define GET_SUBTARGETINFO_MC_DESC 27224133Sdim#include "SparcGenSubtargetInfo.inc" 28224133Sdim 29224133Sdim#define GET_REGINFO_MC_DESC 30224133Sdim#include "SparcGenRegisterInfo.inc" 31224133Sdim 32224133Sdimusing namespace llvm; 33224133Sdim 34224133Sdimstatic MCInstrInfo *createSparcMCInstrInfo() { 35224133Sdim MCInstrInfo *X = new MCInstrInfo(); 36224133Sdim InitSparcMCInstrInfo(X); 37224133Sdim return X; 38224133Sdim} 39224133Sdim 40226633Sdimstatic MCRegisterInfo *createSparcMCRegisterInfo(StringRef TT) { 41226633Sdim MCRegisterInfo *X = new MCRegisterInfo(); 42226633Sdim InitSparcMCRegisterInfo(X, SP::I7); 43226633Sdim return X; 44224133Sdim} 45224133Sdim 46224133Sdimstatic MCSubtargetInfo *createSparcMCSubtargetInfo(StringRef TT, StringRef CPU, 47224133Sdim StringRef FS) { 48224133Sdim MCSubtargetInfo *X = new MCSubtargetInfo(); 49224133Sdim InitSparcMCSubtargetInfo(X, TT, CPU, FS); 50224133Sdim return X; 51224133Sdim} 52224133Sdim 53251662Sdim// Code models. Some only make sense for 64-bit code. 54251662Sdim// 55251662Sdim// SunCC Reloc CodeModel Constraints 56251662Sdim// abs32 Static Small text+data+bss linked below 2^32 bytes 57251662Sdim// abs44 Static Medium text+data+bss linked below 2^44 bytes 58251662Sdim// abs64 Static Large text smaller than 2^31 bytes 59251662Sdim// pic13 PIC_ Small GOT < 2^13 bytes 60251662Sdim// pic32 PIC_ Medium GOT < 2^32 bytes 61251662Sdim// 62251662Sdim// All code models require that the text segment is smaller than 2GB. 63251662Sdim 64226633Sdimstatic MCCodeGenInfo *createSparcMCCodeGenInfo(StringRef TT, Reloc::Model RM, 65234353Sdim CodeModel::Model CM, 66234353Sdim CodeGenOpt::Level OL) { 67226633Sdim MCCodeGenInfo *X = new MCCodeGenInfo(); 68251662Sdim 69251662Sdim // The default 32-bit code model is abs32/pic32. 70251662Sdim if (CM == CodeModel::Default) 71251662Sdim CM = RM == Reloc::PIC_ ? CodeModel::Medium : CodeModel::Small; 72251662Sdim 73234353Sdim X->InitMCCodeGenInfo(RM, CM, OL); 74226633Sdim return X; 75224133Sdim} 76224133Sdim 77251662Sdimstatic MCCodeGenInfo *createSparcV9MCCodeGenInfo(StringRef TT, Reloc::Model RM, 78251662Sdim CodeModel::Model CM, 79251662Sdim CodeGenOpt::Level OL) { 80251662Sdim MCCodeGenInfo *X = new MCCodeGenInfo(); 81251662Sdim 82251662Sdim // The default 64-bit code model is abs44/pic32. 83251662Sdim if (CM == CodeModel::Default) 84251662Sdim CM = CodeModel::Medium; 85251662Sdim 86251662Sdim X->InitMCCodeGenInfo(RM, CM, OL); 87251662Sdim return X; 88251662Sdim} 89226633Sdimextern "C" void LLVMInitializeSparcTargetMC() { 90226633Sdim // Register the MC asm info. 91224133Sdim RegisterMCAsmInfo<SparcELFMCAsmInfo> X(TheSparcTarget); 92224133Sdim RegisterMCAsmInfo<SparcELFMCAsmInfo> Y(TheSparcV9Target); 93226633Sdim 94226633Sdim // Register the MC codegen info. 95226633Sdim TargetRegistry::RegisterMCCodeGenInfo(TheSparcTarget, 96226633Sdim createSparcMCCodeGenInfo); 97226633Sdim TargetRegistry::RegisterMCCodeGenInfo(TheSparcV9Target, 98251662Sdim createSparcV9MCCodeGenInfo); 99226633Sdim 100226633Sdim // Register the MC instruction info. 101226633Sdim TargetRegistry::RegisterMCInstrInfo(TheSparcTarget, createSparcMCInstrInfo); 102226633Sdim 103226633Sdim // Register the MC register info. 104226633Sdim TargetRegistry::RegisterMCRegInfo(TheSparcTarget, createSparcMCRegisterInfo); 105226633Sdim 106226633Sdim // Register the MC subtarget info. 107226633Sdim TargetRegistry::RegisterMCSubtargetInfo(TheSparcTarget, 108226633Sdim createSparcMCSubtargetInfo); 109224133Sdim} 110