1283625Sdim//===-- BPFTargetInfo.cpp - BPF Target Implementation ---------------------===//
2283625Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6283625Sdim//
7283625Sdim//===----------------------------------------------------------------------===//
8283625Sdim
9353358Sdim#include "TargetInfo/BPFTargetInfo.h"
10283625Sdim#include "llvm/Support/TargetRegistry.h"
11353358Sdim
12283625Sdimusing namespace llvm;
13283625Sdim
14353358SdimTarget &llvm::getTheBPFleTarget() {
15314564Sdim  static Target TheBPFleTarget;
16314564Sdim  return TheBPFleTarget;
17284236Sdim}
18353358SdimTarget &llvm::getTheBPFbeTarget() {
19314564Sdim  static Target TheBPFbeTarget;
20314564Sdim  return TheBPFbeTarget;
21314564Sdim}
22353358SdimTarget &llvm::getTheBPFTarget() {
23314564Sdim  static Target TheBPFTarget;
24314564Sdim  return TheBPFTarget;
25314564Sdim}
26283625Sdim
27360784Sdimextern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeBPFTargetInfo() {
28314564Sdim  TargetRegistry::RegisterTarget(getTheBPFTarget(), "bpf", "BPF (host endian)",
29327952Sdim                                 "BPF", [](Triple::ArchType) { return false; },
30327952Sdim                                 true);
31327952Sdim  RegisterTarget<Triple::bpfel, /*HasJIT=*/true> X(
32327952Sdim      getTheBPFleTarget(), "bpfel", "BPF (little endian)", "BPF");
33314564Sdim  RegisterTarget<Triple::bpfeb, /*HasJIT=*/true> Y(getTheBPFbeTarget(), "bpfeb",
34327952Sdim                                                   "BPF (big endian)", "BPF");
35283625Sdim}
36