1// SPDX-License-Identifier: GPL-2.0 2 3#include <linux/bpf.h> 4#include <bpf/bpf_helpers.h> 5#include "bpf_misc.h" 6 7#if (defined(__TARGET_ARCH_arm64) || defined(__TARGET_ARCH_x86) || \ 8 (defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64) || \ 9 defined(__TARGET_ARCH_arm) || defined(__TARGET_ARCH_s390) || \ 10 defined(__TARGET_ARCH_loongarch)) && \ 11 __clang_major__ >= 18 12 13SEC("socket") 14__description("BSWAP, 16") 15__success __success_unpriv __retval(0x23ff) 16__naked void bswap_16(void) 17{ 18 asm volatile (" \ 19 r0 = 0xff23; \ 20 r0 = bswap16 r0; \ 21 exit; \ 22" ::: __clobber_all); 23} 24 25SEC("socket") 26__description("BSWAP, 32") 27__success __success_unpriv __retval(0x23ff0000) 28__naked void bswap_32(void) 29{ 30 asm volatile (" \ 31 r0 = 0xff23; \ 32 r0 = bswap32 r0; \ 33 exit; \ 34" ::: __clobber_all); 35} 36 37SEC("socket") 38__description("BSWAP, 64") 39__success __success_unpriv __retval(0x34ff12ff) 40__naked void bswap_64(void) 41{ 42 asm volatile (" \ 43 r0 = %[u64_val] ll; \ 44 r0 = bswap64 r0; \ 45 exit; \ 46" : 47 : [u64_val]"i"(0xff12ff34ff56ff78ull) 48 : __clobber_all); 49} 50 51#else 52 53SEC("socket") 54__description("cpuv4 is not supported by compiler or jit, use a dummy test") 55__success 56int dummy_test(void) 57{ 58 return 0; 59} 60 61#endif 62 63char _license[] SEC("license") = "GPL"; 64