1235633Sdim//===-- XCoreMCTargetDesc.cpp - XCore 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 XCore specific target descriptions. 11224133Sdim// 12224133Sdim//===----------------------------------------------------------------------===// 13224133Sdim 14224133Sdim#include "XCoreMCTargetDesc.h" 15252723Sdim#include "InstPrinter/XCoreInstPrinter.h" 16224133Sdim#include "XCoreMCAsmInfo.h" 17226890Sdim#include "llvm/MC/MCCodeGenInfo.h" 18224133Sdim#include "llvm/MC/MCInstrInfo.h" 19224133Sdim#include "llvm/MC/MCRegisterInfo.h" 20224133Sdim#include "llvm/MC/MCSubtargetInfo.h" 21235633Sdim#include "llvm/Support/ErrorHandling.h" 22226890Sdim#include "llvm/Support/TargetRegistry.h" 23224133Sdim 24224133Sdim#define GET_INSTRINFO_MC_DESC 25224133Sdim#include "XCoreGenInstrInfo.inc" 26224133Sdim 27224133Sdim#define GET_SUBTARGETINFO_MC_DESC 28224133Sdim#include "XCoreGenSubtargetInfo.inc" 29224133Sdim 30224133Sdim#define GET_REGINFO_MC_DESC 31224133Sdim#include "XCoreGenRegisterInfo.inc" 32224133Sdim 33224133Sdimusing namespace llvm; 34224133Sdim 35224133Sdimstatic MCInstrInfo *createXCoreMCInstrInfo() { 36224133Sdim MCInstrInfo *X = new MCInstrInfo(); 37224133Sdim InitXCoreMCInstrInfo(X); 38224133Sdim return X; 39224133Sdim} 40224133Sdim 41226890Sdimstatic MCRegisterInfo *createXCoreMCRegisterInfo(StringRef TT) { 42226890Sdim MCRegisterInfo *X = new MCRegisterInfo(); 43226890Sdim InitXCoreMCRegisterInfo(X, XCore::LR); 44226890Sdim return X; 45224133Sdim} 46224133Sdim 47224133Sdimstatic MCSubtargetInfo *createXCoreMCSubtargetInfo(StringRef TT, StringRef CPU, 48224133Sdim StringRef FS) { 49224133Sdim MCSubtargetInfo *X = new MCSubtargetInfo(); 50224133Sdim InitXCoreMCSubtargetInfo(X, TT, CPU, FS); 51224133Sdim return X; 52224133Sdim} 53224133Sdim 54263509Sdimstatic MCAsmInfo *createXCoreMCAsmInfo(const MCRegisterInfo &MRI, 55263509Sdim StringRef TT) { 56263509Sdim MCAsmInfo *MAI = new XCoreMCAsmInfo(TT); 57226890Sdim 58226890Sdim // Initial state of the frame pointer is SP. 59263509Sdim MCCFIInstruction Inst = MCCFIInstruction::createDefCfa(0, XCore::SP, 0); 60263509Sdim MAI->addInitialFrameState(Inst); 61226890Sdim 62226890Sdim return MAI; 63226890Sdim} 64226890Sdim 65226890Sdimstatic MCCodeGenInfo *createXCoreMCCodeGenInfo(StringRef TT, Reloc::Model RM, 66235633Sdim CodeModel::Model CM, 67235633Sdim CodeGenOpt::Level OL) { 68226890Sdim MCCodeGenInfo *X = new MCCodeGenInfo(); 69252723Sdim if (RM == Reloc::Default) { 70252723Sdim RM = Reloc::Static; 71252723Sdim } 72235633Sdim X->InitMCCodeGenInfo(RM, CM, OL); 73226890Sdim return X; 74226890Sdim} 75226890Sdim 76252723Sdimstatic MCInstPrinter *createXCoreMCInstPrinter(const Target &T, 77252723Sdim unsigned SyntaxVariant, 78252723Sdim const MCAsmInfo &MAI, 79252723Sdim const MCInstrInfo &MII, 80252723Sdim const MCRegisterInfo &MRI, 81252723Sdim const MCSubtargetInfo &STI) { 82252723Sdim return new XCoreInstPrinter(MAI, MII, MRI); 83252723Sdim} 84252723Sdim 85226890Sdim// Force static initialization. 86226890Sdimextern "C" void LLVMInitializeXCoreTargetMC() { 87226890Sdim // Register the MC asm info. 88226890Sdim RegisterMCAsmInfoFn X(TheXCoreTarget, createXCoreMCAsmInfo); 89226890Sdim 90226890Sdim // Register the MC codegen info. 91226890Sdim TargetRegistry::RegisterMCCodeGenInfo(TheXCoreTarget, 92226890Sdim createXCoreMCCodeGenInfo); 93226890Sdim 94226890Sdim // Register the MC instruction info. 95226890Sdim TargetRegistry::RegisterMCInstrInfo(TheXCoreTarget, createXCoreMCInstrInfo); 96226890Sdim 97226890Sdim // Register the MC register info. 98226890Sdim TargetRegistry::RegisterMCRegInfo(TheXCoreTarget, createXCoreMCRegisterInfo); 99226890Sdim 100226890Sdim // Register the MC subtarget info. 101224133Sdim TargetRegistry::RegisterMCSubtargetInfo(TheXCoreTarget, 102224133Sdim createXCoreMCSubtargetInfo); 103252723Sdim 104252723Sdim // Register the MCInstPrinter 105252723Sdim TargetRegistry::RegisterMCInstPrinter(TheXCoreTarget, 106252723Sdim createXCoreMCInstPrinter); 107224133Sdim} 108