1c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng//===-- BlackfinMCTargetDesc.cpp - Blackfin Target Descriptions -*- C++ -*-===// 2c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// 3c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// The LLVM Compiler Infrastructure 4c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// 5c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// This file is distributed under the University of Illinois Open Source 6c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// License. See LICENSE.TXT for details. 7c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// 8c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng//===----------------------------------------------------------------------===// 9c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// 10c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// This file provides Blackfin specific target descriptions. 11c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// 12c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng//===----------------------------------------------------------------------===// 13c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 14c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "BlackfinMCTargetDesc.h" 151abf2cb59b8d63415780a03329307c0997b2670cEvan Cheng#include "BlackfinMCAsmInfo.h" 167801136b95d1fbe515b9655b73ada39b05a33559Evan Cheng#include "llvm/MC/MCCodeGenInfo.h" 17c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "llvm/MC/MCInstrInfo.h" 18c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "llvm/MC/MCRegisterInfo.h" 19c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "llvm/MC/MCSubtargetInfo.h" 203e74d6fdd248e20a280f1dff3da9a6c689c2c4c3Evan Cheng#include "llvm/Support/TargetRegistry.h" 21c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 22c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#define GET_INSTRINFO_MC_DESC 23c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "BlackfinGenInstrInfo.inc" 24c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 25c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#define GET_SUBTARGETINFO_MC_DESC 26c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "BlackfinGenSubtargetInfo.inc" 27c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 28c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#define GET_REGINFO_MC_DESC 29c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "BlackfinGenRegisterInfo.inc" 30c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 31c60f9b752381baa6c4b80c0739034660f1748c84Evan Chengusing namespace llvm; 32c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 33c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 341abf2cb59b8d63415780a03329307c0997b2670cEvan Chengstatic MCInstrInfo *createBlackfinMCInstrInfo() { 35c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng MCInstrInfo *X = new MCInstrInfo(); 36c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng InitBlackfinMCInstrInfo(X); 37c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng return X; 38c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng} 39c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 400e6a052331f674dd70e28af41f654a7874405eabEvan Chengstatic MCRegisterInfo *createBlackfinMCRegisterInfo(StringRef TT) { 410e6a052331f674dd70e28af41f654a7874405eabEvan Cheng MCRegisterInfo *X = new MCRegisterInfo(); 420e6a052331f674dd70e28af41f654a7874405eabEvan Cheng InitBlackfinMCRegisterInfo(X, BF::RETS); 430e6a052331f674dd70e28af41f654a7874405eabEvan Cheng return X; 440e6a052331f674dd70e28af41f654a7874405eabEvan Cheng} 450e6a052331f674dd70e28af41f654a7874405eabEvan Cheng 461abf2cb59b8d63415780a03329307c0997b2670cEvan Chengstatic MCSubtargetInfo *createBlackfinMCSubtargetInfo(StringRef TT, 471abf2cb59b8d63415780a03329307c0997b2670cEvan Cheng StringRef CPU, 481abf2cb59b8d63415780a03329307c0997b2670cEvan Cheng StringRef FS) { 49c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng MCSubtargetInfo *X = new MCSubtargetInfo(); 50c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng InitBlackfinMCSubtargetInfo(X, TT, CPU, FS); 51c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng return X; 52c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng} 53c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 547f8dff65717b1e4090ba4a648f9ec4f037a66c1eEvan Chengstatic MCCodeGenInfo *createBlackfinMCCodeGenInfo(StringRef TT, Reloc::Model RM, 557f8dff65717b1e4090ba4a648f9ec4f037a66c1eEvan Cheng CodeModel::Model CM) { 56439661395fd2a2a832dba01c65bc88718528313cEvan Cheng MCCodeGenInfo *X = new MCCodeGenInfo(); 5734ad6db8b958fdc0d38e122edf753b5326e69b03Evan Cheng X->InitMCCodeGenInfo(RM, CM); 58439661395fd2a2a832dba01c65bc88718528313cEvan Cheng return X; 59439661395fd2a2a832dba01c65bc88718528313cEvan Cheng} 60439661395fd2a2a832dba01c65bc88718528313cEvan Cheng 61e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng// Force static initialization. 62e78085a3c03de648a481e9751c3094c517bd7123Evan Chengextern "C" void LLVMInitializeBlackfinTargetMC() { 63e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC asm info. 64e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng RegisterMCAsmInfo<BlackfinMCAsmInfo> X(TheBlackfinTarget); 65e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng 66e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC codegen info. 67439661395fd2a2a832dba01c65bc88718528313cEvan Cheng TargetRegistry::RegisterMCCodeGenInfo(TheBlackfinTarget, 68439661395fd2a2a832dba01c65bc88718528313cEvan Cheng createBlackfinMCCodeGenInfo); 69e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng 70e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC instruction info. 71e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng TargetRegistry::RegisterMCInstrInfo(TheBlackfinTarget, 72e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng createBlackfinMCInstrInfo); 73e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng 74e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC register info. 75e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng TargetRegistry::RegisterMCRegInfo(TheBlackfinTarget, 76e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng createBlackfinMCRegisterInfo); 77e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng 78e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC subtarget info. 79e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng TargetRegistry::RegisterMCSubtargetInfo(TheBlackfinTarget, 80e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng createBlackfinMCSubtargetInfo); 81439661395fd2a2a832dba01c65bc88718528313cEvan Cheng} 82