1ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===-- BPFMCTargetDesc.cpp - BPF Target Descriptions ---------------------===// 2ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 3ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// The LLVM Compiler Infrastructure 4ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 5ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// This file is distributed under the University of Illinois Open Source 6ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// License. See LICENSE.TXT for details. 7ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 8ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===// 9ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 10ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// This file provides BPF specific target descriptions. 11ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 12ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===// 13ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 14ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "BPF.h" 15ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "BPFMCTargetDesc.h" 16ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "BPFMCAsmInfo.h" 17ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "InstPrinter/BPFInstPrinter.h" 18ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/MC/MCCodeGenInfo.h" 19ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/MC/MCInstrInfo.h" 20ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/MC/MCRegisterInfo.h" 21ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/MC/MCStreamer.h" 22ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/MC/MCSubtargetInfo.h" 23ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/Support/ErrorHandling.h" 24ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/Support/TargetRegistry.h" 25ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 26ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#define GET_INSTRINFO_MC_DESC 27ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "BPFGenInstrInfo.inc" 28ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 29ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#define GET_SUBTARGETINFO_MC_DESC 30ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "BPFGenSubtargetInfo.inc" 31ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 32ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#define GET_REGINFO_MC_DESC 33ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "BPFGenRegisterInfo.inc" 34ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 35ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesusing namespace llvm; 36ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 37ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesstatic MCInstrInfo *createBPFMCInstrInfo() { 38ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MCInstrInfo *X = new MCInstrInfo(); 39ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines InitBPFMCInstrInfo(X); 40ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return X; 41ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 42ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 43ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesstatic MCRegisterInfo *createBPFMCRegisterInfo(StringRef TT) { 44ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MCRegisterInfo *X = new MCRegisterInfo(); 45ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines InitBPFMCRegisterInfo(X, BPF::R11 /* RAReg doesn't exist */); 46ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return X; 47ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 48ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 49ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesstatic MCSubtargetInfo *createBPFMCSubtargetInfo(StringRef TT, StringRef CPU, 50ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines StringRef FS) { 51ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MCSubtargetInfo *X = new MCSubtargetInfo(); 52ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines InitBPFMCSubtargetInfo(X, TT, CPU, FS); 53ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return X; 54ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 55ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 56ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesstatic MCCodeGenInfo *createBPFMCCodeGenInfo(StringRef TT, Reloc::Model RM, 57ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines CodeModel::Model CM, 58ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines CodeGenOpt::Level OL) { 59ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MCCodeGenInfo *X = new MCCodeGenInfo(); 60ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines X->InitMCCodeGenInfo(RM, CM, OL); 61ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return X; 62ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 63ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 644c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainarstatic MCStreamer *createBPFMCStreamer(const Triple &T, 65ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MCContext &Ctx, MCAsmBackend &MAB, 662c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar raw_pwrite_stream &OS, MCCodeEmitter *Emitter, 67ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool RelaxAll) { 684c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar return createELFStreamer(Ctx, MAB, OS, Emitter, RelaxAll); 69ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 70ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 712c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainarstatic MCInstPrinter *createBPFMCInstPrinter(const Triple &T, 722c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar unsigned SyntaxVariant, 732c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar const MCAsmInfo &MAI, 742c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar const MCInstrInfo &MII, 752c3e0051c31c3f5b2328b447eadf1cf9c4427442Pirama Arumuga Nainar const MCRegisterInfo &MRI) { 76ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (SyntaxVariant == 0) 77ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return new BPFInstPrinter(MAI, MII, MRI); 78ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return 0; 79ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 80ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 81ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesextern "C" void LLVMInitializeBPFTargetMC() { 82ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the MC asm info. 83ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines RegisterMCAsmInfo<BPFMCAsmInfo> X(TheBPFTarget); 84ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 85ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the MC codegen info. 86ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines TargetRegistry::RegisterMCCodeGenInfo(TheBPFTarget, createBPFMCCodeGenInfo); 87ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 88ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the MC instruction info. 89ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines TargetRegistry::RegisterMCInstrInfo(TheBPFTarget, createBPFMCInstrInfo); 90ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 91ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the MC register info. 92ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines TargetRegistry::RegisterMCRegInfo(TheBPFTarget, createBPFMCRegisterInfo); 93ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 94ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the MC subtarget info. 95ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines TargetRegistry::RegisterMCSubtargetInfo(TheBPFTarget, 96ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines createBPFMCSubtargetInfo); 97ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 98ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the MC code emitter 99ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines TargetRegistry::RegisterMCCodeEmitter(TheBPFTarget, 100ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines llvm::createBPFMCCodeEmitter); 101ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 102ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the ASM Backend 103ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines TargetRegistry::RegisterMCAsmBackend(TheBPFTarget, createBPFAsmBackend); 104ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 105ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the object streamer 1064c5e43da7792f75567b693105cc53e3f1992ad98Pirama Arumuga Nainar TargetRegistry::RegisterELFStreamer(TheBPFTarget, createBPFMCStreamer); 107ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 108ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Register the MCInstPrinter. 109ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines TargetRegistry::RegisterMCInstPrinter(TheBPFTarget, createBPFMCInstPrinter); 110ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 111