1e4c8c807SAlexei Starovoitov //===-- BPFSubtarget.cpp - BPF Subtarget Information ----------------------===// 2e4c8c807SAlexei Starovoitov // 3e4c8c807SAlexei Starovoitov // The LLVM Compiler Infrastructure 4e4c8c807SAlexei Starovoitov // 5e4c8c807SAlexei Starovoitov // This file is distributed under the University of Illinois Open Source 6e4c8c807SAlexei Starovoitov // License. See LICENSE.TXT for details. 7e4c8c807SAlexei Starovoitov // 8e4c8c807SAlexei Starovoitov //===----------------------------------------------------------------------===// 9e4c8c807SAlexei Starovoitov // 10e4c8c807SAlexei Starovoitov // This file implements the BPF specific subclass of TargetSubtargetInfo. 11e4c8c807SAlexei Starovoitov // 12e4c8c807SAlexei Starovoitov //===----------------------------------------------------------------------===// 13e4c8c807SAlexei Starovoitov 14e4c8c807SAlexei Starovoitov #include "BPFSubtarget.h" 15e4c8c807SAlexei Starovoitov #include "BPF.h" 16*dc1dbf6eSYonghong Song #include "llvm/Support/Host.h" 17e4c8c807SAlexei Starovoitov #include "llvm/Support/TargetRegistry.h" 18e4c8c807SAlexei Starovoitov 19e4c8c807SAlexei Starovoitov using namespace llvm; 20e4c8c807SAlexei Starovoitov 21e4c8c807SAlexei Starovoitov #define DEBUG_TYPE "bpf-subtarget" 22e4c8c807SAlexei Starovoitov 23e4c8c807SAlexei Starovoitov #define GET_SUBTARGETINFO_TARGET_DESC 24e4c8c807SAlexei Starovoitov #define GET_SUBTARGETINFO_CTOR 25e4c8c807SAlexei Starovoitov #include "BPFGenSubtargetInfo.inc" 26e4c8c807SAlexei Starovoitov 27e4c8c807SAlexei Starovoitov void BPFSubtarget::anchor() {} 28e4c8c807SAlexei Starovoitov 29*dc1dbf6eSYonghong Song BPFSubtarget &BPFSubtarget::initializeSubtargetDependencies(StringRef CPU, 30*dc1dbf6eSYonghong Song StringRef FS) { 31*dc1dbf6eSYonghong Song initializeEnvironment(); 32*dc1dbf6eSYonghong Song initSubtargetFeatures(CPU, FS); 33*dc1dbf6eSYonghong Song return *this; 34*dc1dbf6eSYonghong Song } 35*dc1dbf6eSYonghong Song 36*dc1dbf6eSYonghong Song void BPFSubtarget::initializeEnvironment() { 37*dc1dbf6eSYonghong Song HasJmpExt = false; 38*dc1dbf6eSYonghong Song } 39*dc1dbf6eSYonghong Song 40*dc1dbf6eSYonghong Song void BPFSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) { 41*dc1dbf6eSYonghong Song if (CPU == "probe") 42*dc1dbf6eSYonghong Song CPU = sys::detail::getHostCPUNameForBPF(); 43*dc1dbf6eSYonghong Song if (CPU == "generic" || CPU == "v1") 44*dc1dbf6eSYonghong Song return; 45*dc1dbf6eSYonghong Song if (CPU == "v2") { 46*dc1dbf6eSYonghong Song HasJmpExt = true; 47*dc1dbf6eSYonghong Song return; 48*dc1dbf6eSYonghong Song } 49*dc1dbf6eSYonghong Song } 50*dc1dbf6eSYonghong Song 51a73f1fdbSDaniel Sanders BPFSubtarget::BPFSubtarget(const Triple &TT, const std::string &CPU, 52e4c8c807SAlexei Starovoitov const std::string &FS, const TargetMachine &TM) 53*dc1dbf6eSYonghong Song : BPFGenSubtargetInfo(TT, CPU, FS), InstrInfo(), 54*dc1dbf6eSYonghong Song FrameLowering(initializeSubtargetDependencies(CPU, FS)), 5550f17235SDaniel Sanders TLInfo(TM, *this) {} 56