1 // SPDX-License-Identifier: GPL-2.0
4 #include <bpf/bpf_helpers.h>
7 #if (defined(__TARGET_ARCH_arm64) || defined(__TARGET_ARCH_x86) || \
8 (defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64)) && __clang_major__ >= 18
11 __description("SDIV32, non-zero imm divisor, check 1")
12 __success __success_unpriv __retval(-20)
13 __naked void sdiv32_non_zero_imm_1(void)
23 __description("SDIV32, non-zero imm divisor, check 2")
24 __success __success_unpriv __retval(-20)
25 __naked void sdiv32_non_zero_imm_2(void)
35 __description("SDIV32, non-zero imm divisor, check 3")
36 __success __success_unpriv __retval(20)
37 __naked void sdiv32_non_zero_imm_3(void)
47 __description("SDIV32, non-zero imm divisor, check 4")
48 __success __success_unpriv __retval(-21)
49 __naked void sdiv32_non_zero_imm_4(void)
59 __description("SDIV32, non-zero imm divisor, check 5")
60 __success __success_unpriv __retval(-21)
61 __naked void sdiv32_non_zero_imm_5(void)
71 __description("SDIV32, non-zero imm divisor, check 6")
72 __success __success_unpriv __retval(21)
73 __naked void sdiv32_non_zero_imm_6(void)
83 __description("SDIV32, non-zero imm divisor, check 7")
84 __success __success_unpriv __retval(21)
85 __naked void sdiv32_non_zero_imm_7(void)
95 __description("SDIV32, non-zero imm divisor, check 8")
96 __success __success_unpriv __retval(20)
97 __naked void sdiv32_non_zero_imm_8(void)
103 " ::: __clobber_all);
107 __description("SDIV32, non-zero reg divisor, check 1")
108 __success __success_unpriv __retval(-20)
109 __naked void sdiv32_non_zero_reg_1(void)
116 " ::: __clobber_all);
120 __description("SDIV32, non-zero reg divisor, check 2")
121 __success __success_unpriv __retval(-20)
122 __naked void sdiv32_non_zero_reg_2(void)
129 " ::: __clobber_all);
133 __description("SDIV32, non-zero reg divisor, check 3")
134 __success __success_unpriv __retval(20)
135 __naked void sdiv32_non_zero_reg_3(void)
142 " ::: __clobber_all);
146 __description("SDIV32, non-zero reg divisor, check 4")
147 __success __success_unpriv __retval(-21)
148 __naked void sdiv32_non_zero_reg_4(void)
155 " ::: __clobber_all);
159 __description("SDIV32, non-zero reg divisor, check 5")
160 __success __success_unpriv __retval(-21)
161 __naked void sdiv32_non_zero_reg_5(void)
168 " ::: __clobber_all);
172 __description("SDIV32, non-zero reg divisor, check 6")
173 __success __success_unpriv __retval(21)
174 __naked void sdiv32_non_zero_reg_6(void)
181 " ::: __clobber_all);
185 __description("SDIV32, non-zero reg divisor, check 7")
186 __success __success_unpriv __retval(21)
187 __naked void sdiv32_non_zero_reg_7(void)
194 " ::: __clobber_all);
198 __description("SDIV32, non-zero reg divisor, check 8")
199 __success __success_unpriv __retval(20)
200 __naked void sdiv32_non_zero_reg_8(void)
207 " ::: __clobber_all);
211 __description("SDIV64, non-zero imm divisor, check 1")
212 __success __success_unpriv __retval(-20)
213 __naked void sdiv64_non_zero_imm_1(void)
219 " ::: __clobber_all);
223 __description("SDIV64, non-zero imm divisor, check 2")
224 __success __success_unpriv __retval(-20)
225 __naked void sdiv64_non_zero_imm_2(void)
231 " ::: __clobber_all);
235 __description("SDIV64, non-zero imm divisor, check 3")
236 __success __success_unpriv __retval(20)
237 __naked void sdiv64_non_zero_imm_3(void)
243 " ::: __clobber_all);
247 __description("SDIV64, non-zero imm divisor, check 4")
248 __success __success_unpriv __retval(-21)
249 __naked void sdiv64_non_zero_imm_4(void)
255 " ::: __clobber_all);
259 __description("SDIV64, non-zero imm divisor, check 5")
260 __success __success_unpriv __retval(-21)
261 __naked void sdiv64_non_zero_imm_5(void)
267 " ::: __clobber_all);
271 __description("SDIV64, non-zero imm divisor, check 6")
272 __success __success_unpriv __retval(21)
273 __naked void sdiv64_non_zero_imm_6(void)
279 " ::: __clobber_all);
283 __description("SDIV64, non-zero reg divisor, check 1")
284 __success __success_unpriv __retval(-20)
285 __naked void sdiv64_non_zero_reg_1(void)
292 " ::: __clobber_all);
296 __description("SDIV64, non-zero reg divisor, check 2")
297 __success __success_unpriv __retval(-20)
298 __naked void sdiv64_non_zero_reg_2(void)
305 " ::: __clobber_all);
309 __description("SDIV64, non-zero reg divisor, check 3")
310 __success __success_unpriv __retval(20)
311 __naked void sdiv64_non_zero_reg_3(void)
318 " ::: __clobber_all);
322 __description("SDIV64, non-zero reg divisor, check 4")
323 __success __success_unpriv __retval(-21)
324 __naked void sdiv64_non_zero_reg_4(void)
331 " ::: __clobber_all);
335 __description("SDIV64, non-zero reg divisor, check 5")
336 __success __success_unpriv __retval(-21)
337 __naked void sdiv64_non_zero_reg_5(void)
344 " ::: __clobber_all);
348 __description("SDIV64, non-zero reg divisor, check 6")
349 __success __success_unpriv __retval(21)
350 __naked void sdiv64_non_zero_reg_6(void)
357 " ::: __clobber_all);
361 __description("SMOD32, non-zero imm divisor, check 1")
362 __success __success_unpriv __retval(-1)
363 __naked void smod32_non_zero_imm_1(void)
369 " ::: __clobber_all);
373 __description("SMOD32, non-zero imm divisor, check 2")
374 __success __success_unpriv __retval(1)
375 __naked void smod32_non_zero_imm_2(void)
381 " ::: __clobber_all);
385 __description("SMOD32, non-zero imm divisor, check 3")
386 __success __success_unpriv __retval(-1)
387 __naked void smod32_non_zero_imm_3(void)
393 " ::: __clobber_all);
397 __description("SMOD32, non-zero imm divisor, check 4")
398 __success __success_unpriv __retval(0)
399 __naked void smod32_non_zero_imm_4(void)
405 " ::: __clobber_all);
409 __description("SMOD32, non-zero imm divisor, check 5")
410 __success __success_unpriv __retval(0)
411 __naked void smod32_non_zero_imm_5(void)
417 " ::: __clobber_all);
421 __description("SMOD32, non-zero imm divisor, check 6")
422 __success __success_unpriv __retval(0)
423 __naked void smod32_non_zero_imm_6(void)
429 " ::: __clobber_all);
433 __description("SMOD32, non-zero reg divisor, check 1")
434 __success __success_unpriv __retval(-1)
435 __naked void smod32_non_zero_reg_1(void)
442 " ::: __clobber_all);
446 __description("SMOD32, non-zero reg divisor, check 2")
447 __success __success_unpriv __retval(1)
448 __naked void smod32_non_zero_reg_2(void)
455 " ::: __clobber_all);
459 __description("SMOD32, non-zero reg divisor, check 3")
460 __success __success_unpriv __retval(-1)
461 __naked void smod32_non_zero_reg_3(void)
468 " ::: __clobber_all);
472 __description("SMOD32, non-zero reg divisor, check 4")
473 __success __success_unpriv __retval(0)
474 __naked void smod32_non_zero_reg_4(void)
481 " ::: __clobber_all);
485 __description("SMOD32, non-zero reg divisor, check 5")
486 __success __success_unpriv __retval(0)
487 __naked void smod32_non_zero_reg_5(void)
494 " ::: __clobber_all);
498 __description("SMOD32, non-zero reg divisor, check 6")
499 __success __success_unpriv __retval(0)
500 __naked void smod32_non_zero_reg_6(void)
507 " ::: __clobber_all);
511 __description("SMOD64, non-zero imm divisor, check 1")
512 __success __success_unpriv __retval(-1)
513 __naked void smod64_non_zero_imm_1(void)
519 " ::: __clobber_all);
523 __description("SMOD64, non-zero imm divisor, check 2")
524 __success __success_unpriv __retval(1)
525 __naked void smod64_non_zero_imm_2(void)
531 " ::: __clobber_all);
535 __description("SMOD64, non-zero imm divisor, check 3")
536 __success __success_unpriv __retval(-1)
537 __naked void smod64_non_zero_imm_3(void)
543 " ::: __clobber_all);
547 __description("SMOD64, non-zero imm divisor, check 4")
548 __success __success_unpriv __retval(0)
549 __naked void smod64_non_zero_imm_4(void)
555 " ::: __clobber_all);
559 __description("SMOD64, non-zero imm divisor, check 5")
560 __success __success_unpriv __retval(-0)
561 __naked void smod64_non_zero_imm_5(void)
567 " ::: __clobber_all);
571 __description("SMOD64, non-zero imm divisor, check 6")
572 __success __success_unpriv __retval(0)
573 __naked void smod64_non_zero_imm_6(void)
579 " ::: __clobber_all);
583 __description("SMOD64, non-zero imm divisor, check 7")
584 __success __success_unpriv __retval(0)
585 __naked void smod64_non_zero_imm_7(void)
591 " ::: __clobber_all);
595 __description("SMOD64, non-zero imm divisor, check 8")
596 __success __success_unpriv __retval(1)
597 __naked void smod64_non_zero_imm_8(void)
603 " ::: __clobber_all);
607 __description("SMOD64, non-zero reg divisor, check 1")
608 __success __success_unpriv __retval(-1)
609 __naked void smod64_non_zero_reg_1(void)
616 " ::: __clobber_all);
620 __description("SMOD64, non-zero reg divisor, check 2")
621 __success __success_unpriv __retval(1)
622 __naked void smod64_non_zero_reg_2(void)
629 " ::: __clobber_all);
633 __description("SMOD64, non-zero reg divisor, check 3")
634 __success __success_unpriv __retval(-1)
635 __naked void smod64_non_zero_reg_3(void)
642 " ::: __clobber_all);
646 __description("SMOD64, non-zero reg divisor, check 4")
647 __success __success_unpriv __retval(0)
648 __naked void smod64_non_zero_reg_4(void)
655 " ::: __clobber_all);
659 __description("SMOD64, non-zero reg divisor, check 5")
660 __success __success_unpriv __retval(0)
661 __naked void smod64_non_zero_reg_5(void)
668 " ::: __clobber_all);
672 __description("SMOD64, non-zero reg divisor, check 6")
673 __success __success_unpriv __retval(0)
674 __naked void smod64_non_zero_reg_6(void)
681 " ::: __clobber_all);
685 __description("SMOD64, non-zero reg divisor, check 7")
686 __success __success_unpriv __retval(0)
687 __naked void smod64_non_zero_reg_7(void)
694 " ::: __clobber_all);
698 __description("SMOD64, non-zero reg divisor, check 8")
699 __success __success_unpriv __retval(1)
700 __naked void smod64_non_zero_reg_8(void)
707 " ::: __clobber_all);
711 __description("SDIV32, zero divisor")
712 __success __success_unpriv __retval(0)
713 __naked void sdiv32_zero_divisor(void)
722 " ::: __clobber_all);
726 __description("SDIV64, zero divisor")
727 __success __success_unpriv __retval(0)
728 __naked void sdiv64_zero_divisor(void)
737 " ::: __clobber_all);
741 __description("SMOD32, zero divisor")
742 __success __success_unpriv __retval(-1)
743 __naked void smod32_zero_divisor(void)
752 " ::: __clobber_all);
756 __description("SMOD64, zero divisor")
757 __success __success_unpriv __retval(-1)
758 __naked void smod64_zero_divisor(void)
767 " ::: __clobber_all);
773 __description("cpuv4 is not supported by compiler or jit, use a dummy test")
782 char _license[] SEC("license") = "GPL";