162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#include <linux/bpf.h> 462306a36Sopenharmony_ci#include <bpf/bpf_helpers.h> 562306a36Sopenharmony_ci#include "bpf_misc.h" 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#if (defined(__TARGET_ARCH_arm64) || defined(__TARGET_ARCH_x86) || \ 862306a36Sopenharmony_ci (defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64)) && __clang_major__ >= 18 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ciSEC("socket") 1162306a36Sopenharmony_ci__description("gotol, small_imm") 1262306a36Sopenharmony_ci__success __success_unpriv __retval(1) 1362306a36Sopenharmony_ci__naked void gotol_small_imm(void) 1462306a36Sopenharmony_ci{ 1562306a36Sopenharmony_ci asm volatile (" \ 1662306a36Sopenharmony_ci call %[bpf_ktime_get_ns]; \ 1762306a36Sopenharmony_ci if r0 == 0 goto l0_%=; \ 1862306a36Sopenharmony_ci gotol l1_%=; \ 1962306a36Sopenharmony_cil2_%=: \ 2062306a36Sopenharmony_ci gotol l3_%=; \ 2162306a36Sopenharmony_cil1_%=: \ 2262306a36Sopenharmony_ci r0 = 1; \ 2362306a36Sopenharmony_ci gotol l2_%=; \ 2462306a36Sopenharmony_cil0_%=: \ 2562306a36Sopenharmony_ci r0 = 2; \ 2662306a36Sopenharmony_cil3_%=: \ 2762306a36Sopenharmony_ci exit; \ 2862306a36Sopenharmony_ci" : 2962306a36Sopenharmony_ci : __imm(bpf_ktime_get_ns) 3062306a36Sopenharmony_ci : __clobber_all); 3162306a36Sopenharmony_ci} 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci#else 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ciSEC("socket") 3662306a36Sopenharmony_ci__description("cpuv4 is not supported by compiler or jit, use a dummy test") 3762306a36Sopenharmony_ci__success 3862306a36Sopenharmony_ciint dummy_test(void) 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci return 0; 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#endif 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cichar _license[] SEC("license") = "GPL"; 46