1c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng//===-- SparcMCTargetDesc.cpp - Sparc 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 Sparc specific target descriptions. 11c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng// 12c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng//===----------------------------------------------------------------------===// 13c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 14c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "SparcMCTargetDesc.h" 151abf2cb59b8d63415780a03329307c0997b2670cEvan Cheng#include "SparcMCAsmInfo.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 "SparcGenInstrInfo.inc" 24c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 25c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#define GET_SUBTARGETINFO_MC_DESC 26c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "SparcGenSubtargetInfo.inc" 27c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 28c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#define GET_REGINFO_MC_DESC 29c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng#include "SparcGenRegisterInfo.inc" 30c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 31c60f9b752381baa6c4b80c0739034660f1748c84Evan Chengusing namespace llvm; 32c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 331abf2cb59b8d63415780a03329307c0997b2670cEvan Chengstatic MCInstrInfo *createSparcMCInstrInfo() { 34c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng MCInstrInfo *X = new MCInstrInfo(); 35c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng InitSparcMCInstrInfo(X); 36c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng return X; 37c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng} 38c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 390e6a052331f674dd70e28af41f654a7874405eabEvan Chengstatic MCRegisterInfo *createSparcMCRegisterInfo(StringRef TT) { 400e6a052331f674dd70e28af41f654a7874405eabEvan Cheng MCRegisterInfo *X = new MCRegisterInfo(); 410e6a052331f674dd70e28af41f654a7874405eabEvan Cheng InitSparcMCRegisterInfo(X, SP::I7); 420e6a052331f674dd70e28af41f654a7874405eabEvan Cheng return X; 430e6a052331f674dd70e28af41f654a7874405eabEvan Cheng} 440e6a052331f674dd70e28af41f654a7874405eabEvan Cheng 451abf2cb59b8d63415780a03329307c0997b2670cEvan Chengstatic MCSubtargetInfo *createSparcMCSubtargetInfo(StringRef TT, StringRef CPU, 461abf2cb59b8d63415780a03329307c0997b2670cEvan Cheng StringRef FS) { 47c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng MCSubtargetInfo *X = new MCSubtargetInfo(); 48c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng InitSparcMCSubtargetInfo(X, TT, CPU, FS); 49c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng return X; 50c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng} 51c60f9b752381baa6c4b80c0739034660f1748c84Evan Cheng 527f8dff65717b1e4090ba4a648f9ec4f037a66c1eEvan Chengstatic MCCodeGenInfo *createSparcMCCodeGenInfo(StringRef TT, Reloc::Model RM, 537f8dff65717b1e4090ba4a648f9ec4f037a66c1eEvan Cheng CodeModel::Model CM) { 54439661395fd2a2a832dba01c65bc88718528313cEvan Cheng MCCodeGenInfo *X = new MCCodeGenInfo(); 5534ad6db8b958fdc0d38e122edf753b5326e69b03Evan Cheng X->InitMCCodeGenInfo(RM, CM); 56439661395fd2a2a832dba01c65bc88718528313cEvan Cheng return X; 57439661395fd2a2a832dba01c65bc88718528313cEvan Cheng} 58439661395fd2a2a832dba01c65bc88718528313cEvan Cheng 59e78085a3c03de648a481e9751c3094c517bd7123Evan Chengextern "C" void LLVMInitializeSparcTargetMC() { 60e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC asm info. 61e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng RegisterMCAsmInfo<SparcELFMCAsmInfo> X(TheSparcTarget); 62e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng RegisterMCAsmInfo<SparcELFMCAsmInfo> Y(TheSparcV9Target); 63e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng 64e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC codegen info. 65439661395fd2a2a832dba01c65bc88718528313cEvan Cheng TargetRegistry::RegisterMCCodeGenInfo(TheSparcTarget, 66439661395fd2a2a832dba01c65bc88718528313cEvan Cheng createSparcMCCodeGenInfo); 67439661395fd2a2a832dba01c65bc88718528313cEvan Cheng TargetRegistry::RegisterMCCodeGenInfo(TheSparcV9Target, 68439661395fd2a2a832dba01c65bc88718528313cEvan Cheng createSparcMCCodeGenInfo); 69439661395fd2a2a832dba01c65bc88718528313cEvan Cheng 70e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC instruction info. 71e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng TargetRegistry::RegisterMCInstrInfo(TheSparcTarget, createSparcMCInstrInfo); 72e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng 73e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC register info. 74e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng TargetRegistry::RegisterMCRegInfo(TheSparcTarget, createSparcMCRegisterInfo); 75e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng 76e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng // Register the MC subtarget info. 77e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng TargetRegistry::RegisterMCSubtargetInfo(TheSparcTarget, 78e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng createSparcMCSubtargetInfo); 79e78085a3c03de648a481e9751c3094c517bd7123Evan Cheng} 80