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" 16dc1dbf6eSYonghong 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 29dc1dbf6eSYonghong Song BPFSubtarget &BPFSubtarget::initializeSubtargetDependencies(StringRef CPU, 30dc1dbf6eSYonghong Song StringRef FS) { 31dc1dbf6eSYonghong Song initializeEnvironment(); 32dc1dbf6eSYonghong Song initSubtargetFeatures(CPU, FS); 3342389377SYonghong Song ParseSubtargetFeatures(CPU, FS); 34dc1dbf6eSYonghong Song return *this; 35dc1dbf6eSYonghong Song } 36dc1dbf6eSYonghong Song 37dc1dbf6eSYonghong Song void BPFSubtarget::initializeEnvironment() { 38dc1dbf6eSYonghong Song HasJmpExt = false; 3942389377SYonghong Song HasAlu32 = false; 40*03e1c8b8SYonghong Song UseDwarfRIS = false; 41dc1dbf6eSYonghong Song } 42dc1dbf6eSYonghong Song 43dc1dbf6eSYonghong Song void BPFSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) { 44dc1dbf6eSYonghong Song if (CPU == "probe") 45dc1dbf6eSYonghong Song CPU = sys::detail::getHostCPUNameForBPF(); 46dc1dbf6eSYonghong Song if (CPU == "generic" || CPU == "v1") 47dc1dbf6eSYonghong Song return; 48dc1dbf6eSYonghong Song if (CPU == "v2") { 49dc1dbf6eSYonghong Song HasJmpExt = true; 50dc1dbf6eSYonghong Song return; 51dc1dbf6eSYonghong Song } 52dc1dbf6eSYonghong Song } 53dc1dbf6eSYonghong Song 54a73f1fdbSDaniel Sanders BPFSubtarget::BPFSubtarget(const Triple &TT, const std::string &CPU, 55e4c8c807SAlexei Starovoitov const std::string &FS, const TargetMachine &TM) 56dc1dbf6eSYonghong Song : BPFGenSubtargetInfo(TT, CPU, FS), InstrInfo(), 57dc1dbf6eSYonghong Song FrameLowering(initializeSubtargetDependencies(CPU, FS)), 5850f17235SDaniel Sanders TLInfo(TM, *this) {} 59