65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- BPFSubtarget.cpp - BPF Subtarget Information ----------------------===//
 | 
						|
//
 | 
						|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
 | 
						|
// See https://llvm.org/LICENSE.txt for license information.
 | 
						|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
//
 | 
						|
// This file implements the BPF specific subclass of TargetSubtargetInfo.
 | 
						|
//
 | 
						|
//===----------------------------------------------------------------------===//
 | 
						|
 | 
						|
#include "BPFSubtarget.h"
 | 
						|
#include "BPF.h"
 | 
						|
#include "llvm/MC/TargetRegistry.h"
 | 
						|
#include "llvm/Support/Host.h"
 | 
						|
 | 
						|
using namespace llvm;
 | 
						|
 | 
						|
#define DEBUG_TYPE "bpf-subtarget"
 | 
						|
 | 
						|
#define GET_SUBTARGETINFO_TARGET_DESC
 | 
						|
#define GET_SUBTARGETINFO_CTOR
 | 
						|
#include "BPFGenSubtargetInfo.inc"
 | 
						|
 | 
						|
void BPFSubtarget::anchor() {}
 | 
						|
 | 
						|
BPFSubtarget &BPFSubtarget::initializeSubtargetDependencies(StringRef CPU,
 | 
						|
                                                            StringRef FS) {
 | 
						|
  initializeEnvironment();
 | 
						|
  initSubtargetFeatures(CPU, FS);
 | 
						|
  ParseSubtargetFeatures(CPU, /*TuneCPU*/ CPU, FS);
 | 
						|
  return *this;
 | 
						|
}
 | 
						|
 | 
						|
void BPFSubtarget::initializeEnvironment() {
 | 
						|
  HasJmpExt = false;
 | 
						|
  HasJmp32 = false;
 | 
						|
  HasAlu32 = false;
 | 
						|
  UseDwarfRIS = false;
 | 
						|
}
 | 
						|
 | 
						|
void BPFSubtarget::initSubtargetFeatures(StringRef CPU, StringRef FS) {
 | 
						|
  if (CPU == "probe")
 | 
						|
    CPU = sys::detail::getHostCPUNameForBPF();
 | 
						|
  if (CPU == "generic" || CPU == "v1")
 | 
						|
    return;
 | 
						|
  if (CPU == "v2") {
 | 
						|
    HasJmpExt = true;
 | 
						|
    return;
 | 
						|
  }
 | 
						|
  if (CPU == "v3") {
 | 
						|
    HasJmpExt = true;
 | 
						|
    HasJmp32 = true;
 | 
						|
    HasAlu32 = true;
 | 
						|
    return;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
BPFSubtarget::BPFSubtarget(const Triple &TT, const std::string &CPU,
 | 
						|
                           const std::string &FS, const TargetMachine &TM)
 | 
						|
    : BPFGenSubtargetInfo(TT, CPU, /*TuneCPU*/ CPU, FS),
 | 
						|
      FrameLowering(initializeSubtargetDependencies(CPU, FS)),
 | 
						|
      TLInfo(TM, *this) {}
 |