162306a36Sopenharmony_ci/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */
262306a36Sopenharmony_ci#ifndef __BPF_LEGACY__
362306a36Sopenharmony_ci#define __BPF_LEGACY__
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#if __GNUC__ && !__clang__
662306a36Sopenharmony_ci/* Functions to emit BPF_LD_ABS and BPF_LD_IND instructions.  We
762306a36Sopenharmony_ci * provide the "standard" names as synonyms of the corresponding GCC
862306a36Sopenharmony_ci * builtins. Note how the SKB argument is ignored.
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci#define load_byte(skb, off) __builtin_bpf_load_byte(off)
1162306a36Sopenharmony_ci#define load_half(skb, off) __builtin_bpf_load_half(off)
1262306a36Sopenharmony_ci#define load_word(skb, off) __builtin_bpf_load_word(off)
1362306a36Sopenharmony_ci#else
1462306a36Sopenharmony_ci/* llvm builtin functions that eBPF C program may use to
1562306a36Sopenharmony_ci * emit BPF_LD_ABS and BPF_LD_IND instructions
1662306a36Sopenharmony_ci */
1762306a36Sopenharmony_ciunsigned long long load_byte(void *skb, unsigned long long off) asm("llvm.bpf.load.byte");
1862306a36Sopenharmony_ciunsigned long long load_half(void *skb, unsigned long long off) asm("llvm.bpf.load.half");
1962306a36Sopenharmony_ciunsigned long long load_word(void *skb, unsigned long long off) asm("llvm.bpf.load.word");
2062306a36Sopenharmony_ci#endif
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#endif
2362306a36Sopenharmony_ci
24