1de1c2680SYonghong Song // SPDX-License-Identifier: GPL-2.0
2de1c2680SYonghong Song
3de1c2680SYonghong Song #include <linux/bpf.h>
4de1c2680SYonghong Song #include <bpf/bpf_helpers.h>
5de1c2680SYonghong Song #include "bpf_misc.h"
6de1c2680SYonghong Song
7*0209fd51SPu Lehui #if (defined(__TARGET_ARCH_arm64) || defined(__TARGET_ARCH_x86) || \
8*0209fd51SPu Lehui (defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64)) && __clang_major__ >= 18
9de1c2680SYonghong Song
10de1c2680SYonghong Song SEC("socket")
11de1c2680SYonghong Song __description("SDIV32, non-zero imm divisor, check 1")
12de1c2680SYonghong Song __success __success_unpriv __retval(-20)
sdiv32_non_zero_imm_1(void)13de1c2680SYonghong Song __naked void sdiv32_non_zero_imm_1(void)
14de1c2680SYonghong Song {
15de1c2680SYonghong Song asm volatile (" \
16de1c2680SYonghong Song w0 = -41; \
17de1c2680SYonghong Song w0 s/= 2; \
18de1c2680SYonghong Song exit; \
19de1c2680SYonghong Song " ::: __clobber_all);
20de1c2680SYonghong Song }
21de1c2680SYonghong Song
22de1c2680SYonghong Song SEC("socket")
23de1c2680SYonghong Song __description("SDIV32, non-zero imm divisor, check 2")
24de1c2680SYonghong Song __success __success_unpriv __retval(-20)
sdiv32_non_zero_imm_2(void)25de1c2680SYonghong Song __naked void sdiv32_non_zero_imm_2(void)
26de1c2680SYonghong Song {
27de1c2680SYonghong Song asm volatile (" \
28de1c2680SYonghong Song w0 = 41; \
29de1c2680SYonghong Song w0 s/= -2; \
30de1c2680SYonghong Song exit; \
31de1c2680SYonghong Song " ::: __clobber_all);
32de1c2680SYonghong Song }
33de1c2680SYonghong Song
34de1c2680SYonghong Song SEC("socket")
35de1c2680SYonghong Song __description("SDIV32, non-zero imm divisor, check 3")
36de1c2680SYonghong Song __success __success_unpriv __retval(20)
sdiv32_non_zero_imm_3(void)37de1c2680SYonghong Song __naked void sdiv32_non_zero_imm_3(void)
38de1c2680SYonghong Song {
39de1c2680SYonghong Song asm volatile (" \
40de1c2680SYonghong Song w0 = -41; \
41de1c2680SYonghong Song w0 s/= -2; \
42de1c2680SYonghong Song exit; \
43de1c2680SYonghong Song " ::: __clobber_all);
44de1c2680SYonghong Song }
45de1c2680SYonghong Song
46de1c2680SYonghong Song SEC("socket")
47de1c2680SYonghong Song __description("SDIV32, non-zero imm divisor, check 4")
48de1c2680SYonghong Song __success __success_unpriv __retval(-21)
sdiv32_non_zero_imm_4(void)49de1c2680SYonghong Song __naked void sdiv32_non_zero_imm_4(void)
50de1c2680SYonghong Song {
51de1c2680SYonghong Song asm volatile (" \
52de1c2680SYonghong Song w0 = -42; \
53de1c2680SYonghong Song w0 s/= 2; \
54de1c2680SYonghong Song exit; \
55de1c2680SYonghong Song " ::: __clobber_all);
56de1c2680SYonghong Song }
57de1c2680SYonghong Song
58de1c2680SYonghong Song SEC("socket")
59de1c2680SYonghong Song __description("SDIV32, non-zero imm divisor, check 5")
60de1c2680SYonghong Song __success __success_unpriv __retval(-21)
sdiv32_non_zero_imm_5(void)61de1c2680SYonghong Song __naked void sdiv32_non_zero_imm_5(void)
62de1c2680SYonghong Song {
63de1c2680SYonghong Song asm volatile (" \
64de1c2680SYonghong Song w0 = 42; \
65de1c2680SYonghong Song w0 s/= -2; \
66de1c2680SYonghong Song exit; \
67de1c2680SYonghong Song " ::: __clobber_all);
68de1c2680SYonghong Song }
69de1c2680SYonghong Song
70de1c2680SYonghong Song SEC("socket")
71de1c2680SYonghong Song __description("SDIV32, non-zero imm divisor, check 6")
72de1c2680SYonghong Song __success __success_unpriv __retval(21)
sdiv32_non_zero_imm_6(void)73de1c2680SYonghong Song __naked void sdiv32_non_zero_imm_6(void)
74de1c2680SYonghong Song {
75de1c2680SYonghong Song asm volatile (" \
76de1c2680SYonghong Song w0 = -42; \
77de1c2680SYonghong Song w0 s/= -2; \
78de1c2680SYonghong Song exit; \
79de1c2680SYonghong Song " ::: __clobber_all);
80de1c2680SYonghong Song }
81de1c2680SYonghong Song
82de1c2680SYonghong Song SEC("socket")
83de1c2680SYonghong Song __description("SDIV32, non-zero imm divisor, check 7")
84de1c2680SYonghong Song __success __success_unpriv __retval(21)
sdiv32_non_zero_imm_7(void)85de1c2680SYonghong Song __naked void sdiv32_non_zero_imm_7(void)
86de1c2680SYonghong Song {
87de1c2680SYonghong Song asm volatile (" \
88de1c2680SYonghong Song w0 = 42; \
89de1c2680SYonghong Song w0 s/= 2; \
90de1c2680SYonghong Song exit; \
91de1c2680SYonghong Song " ::: __clobber_all);
92de1c2680SYonghong Song }
93de1c2680SYonghong Song
94de1c2680SYonghong Song SEC("socket")
95de1c2680SYonghong Song __description("SDIV32, non-zero imm divisor, check 8")
96de1c2680SYonghong Song __success __success_unpriv __retval(20)
sdiv32_non_zero_imm_8(void)97de1c2680SYonghong Song __naked void sdiv32_non_zero_imm_8(void)
98de1c2680SYonghong Song {
99de1c2680SYonghong Song asm volatile (" \
100de1c2680SYonghong Song w0 = 41; \
101de1c2680SYonghong Song w0 s/= 2; \
102de1c2680SYonghong Song exit; \
103de1c2680SYonghong Song " ::: __clobber_all);
104de1c2680SYonghong Song }
105de1c2680SYonghong Song
106de1c2680SYonghong Song SEC("socket")
107de1c2680SYonghong Song __description("SDIV32, non-zero reg divisor, check 1")
108de1c2680SYonghong Song __success __success_unpriv __retval(-20)
sdiv32_non_zero_reg_1(void)109de1c2680SYonghong Song __naked void sdiv32_non_zero_reg_1(void)
110de1c2680SYonghong Song {
111de1c2680SYonghong Song asm volatile (" \
112de1c2680SYonghong Song w0 = -41; \
113de1c2680SYonghong Song w1 = 2; \
114de1c2680SYonghong Song w0 s/= w1; \
115de1c2680SYonghong Song exit; \
116de1c2680SYonghong Song " ::: __clobber_all);
117de1c2680SYonghong Song }
118de1c2680SYonghong Song
119de1c2680SYonghong Song SEC("socket")
120de1c2680SYonghong Song __description("SDIV32, non-zero reg divisor, check 2")
121de1c2680SYonghong Song __success __success_unpriv __retval(-20)
sdiv32_non_zero_reg_2(void)122de1c2680SYonghong Song __naked void sdiv32_non_zero_reg_2(void)
123de1c2680SYonghong Song {
124de1c2680SYonghong Song asm volatile (" \
125de1c2680SYonghong Song w0 = 41; \
126de1c2680SYonghong Song w1 = -2; \
127de1c2680SYonghong Song w0 s/= w1; \
128de1c2680SYonghong Song exit; \
129de1c2680SYonghong Song " ::: __clobber_all);
130de1c2680SYonghong Song }
131de1c2680SYonghong Song
132de1c2680SYonghong Song SEC("socket")
133de1c2680SYonghong Song __description("SDIV32, non-zero reg divisor, check 3")
134de1c2680SYonghong Song __success __success_unpriv __retval(20)
sdiv32_non_zero_reg_3(void)135de1c2680SYonghong Song __naked void sdiv32_non_zero_reg_3(void)
136de1c2680SYonghong Song {
137de1c2680SYonghong Song asm volatile (" \
138de1c2680SYonghong Song w0 = -41; \
139de1c2680SYonghong Song w1 = -2; \
140de1c2680SYonghong Song w0 s/= w1; \
141de1c2680SYonghong Song exit; \
142de1c2680SYonghong Song " ::: __clobber_all);
143de1c2680SYonghong Song }
144de1c2680SYonghong Song
145de1c2680SYonghong Song SEC("socket")
146de1c2680SYonghong Song __description("SDIV32, non-zero reg divisor, check 4")
147de1c2680SYonghong Song __success __success_unpriv __retval(-21)
sdiv32_non_zero_reg_4(void)148de1c2680SYonghong Song __naked void sdiv32_non_zero_reg_4(void)
149de1c2680SYonghong Song {
150de1c2680SYonghong Song asm volatile (" \
151de1c2680SYonghong Song w0 = -42; \
152de1c2680SYonghong Song w1 = 2; \
153de1c2680SYonghong Song w0 s/= w1; \
154de1c2680SYonghong Song exit; \
155de1c2680SYonghong Song " ::: __clobber_all);
156de1c2680SYonghong Song }
157de1c2680SYonghong Song
158de1c2680SYonghong Song SEC("socket")
159de1c2680SYonghong Song __description("SDIV32, non-zero reg divisor, check 5")
160de1c2680SYonghong Song __success __success_unpriv __retval(-21)
sdiv32_non_zero_reg_5(void)161de1c2680SYonghong Song __naked void sdiv32_non_zero_reg_5(void)
162de1c2680SYonghong Song {
163de1c2680SYonghong Song asm volatile (" \
164de1c2680SYonghong Song w0 = 42; \
165de1c2680SYonghong Song w1 = -2; \
166de1c2680SYonghong Song w0 s/= w1; \
167de1c2680SYonghong Song exit; \
168de1c2680SYonghong Song " ::: __clobber_all);
169de1c2680SYonghong Song }
170de1c2680SYonghong Song
171de1c2680SYonghong Song SEC("socket")
172de1c2680SYonghong Song __description("SDIV32, non-zero reg divisor, check 6")
173de1c2680SYonghong Song __success __success_unpriv __retval(21)
sdiv32_non_zero_reg_6(void)174de1c2680SYonghong Song __naked void sdiv32_non_zero_reg_6(void)
175de1c2680SYonghong Song {
176de1c2680SYonghong Song asm volatile (" \
177de1c2680SYonghong Song w0 = -42; \
178de1c2680SYonghong Song w1 = -2; \
179de1c2680SYonghong Song w0 s/= w1; \
180de1c2680SYonghong Song exit; \
181de1c2680SYonghong Song " ::: __clobber_all);
182de1c2680SYonghong Song }
183de1c2680SYonghong Song
184de1c2680SYonghong Song SEC("socket")
185de1c2680SYonghong Song __description("SDIV32, non-zero reg divisor, check 7")
186de1c2680SYonghong Song __success __success_unpriv __retval(21)
sdiv32_non_zero_reg_7(void)187de1c2680SYonghong Song __naked void sdiv32_non_zero_reg_7(void)
188de1c2680SYonghong Song {
189de1c2680SYonghong Song asm volatile (" \
190de1c2680SYonghong Song w0 = 42; \
191de1c2680SYonghong Song w1 = 2; \
192de1c2680SYonghong Song w0 s/= w1; \
193de1c2680SYonghong Song exit; \
194de1c2680SYonghong Song " ::: __clobber_all);
195de1c2680SYonghong Song }
196de1c2680SYonghong Song
197de1c2680SYonghong Song SEC("socket")
198de1c2680SYonghong Song __description("SDIV32, non-zero reg divisor, check 8")
199de1c2680SYonghong Song __success __success_unpriv __retval(20)
sdiv32_non_zero_reg_8(void)200de1c2680SYonghong Song __naked void sdiv32_non_zero_reg_8(void)
201de1c2680SYonghong Song {
202de1c2680SYonghong Song asm volatile (" \
203de1c2680SYonghong Song w0 = 41; \
204de1c2680SYonghong Song w1 = 2; \
205de1c2680SYonghong Song w0 s/= w1; \
206de1c2680SYonghong Song exit; \
207de1c2680SYonghong Song " ::: __clobber_all);
208de1c2680SYonghong Song }
209de1c2680SYonghong Song
210de1c2680SYonghong Song SEC("socket")
211de1c2680SYonghong Song __description("SDIV64, non-zero imm divisor, check 1")
212de1c2680SYonghong Song __success __success_unpriv __retval(-20)
sdiv64_non_zero_imm_1(void)213de1c2680SYonghong Song __naked void sdiv64_non_zero_imm_1(void)
214de1c2680SYonghong Song {
215de1c2680SYonghong Song asm volatile (" \
216de1c2680SYonghong Song r0 = -41; \
217de1c2680SYonghong Song r0 s/= 2; \
218de1c2680SYonghong Song exit; \
219de1c2680SYonghong Song " ::: __clobber_all);
220de1c2680SYonghong Song }
221de1c2680SYonghong Song
222de1c2680SYonghong Song SEC("socket")
223de1c2680SYonghong Song __description("SDIV64, non-zero imm divisor, check 2")
224de1c2680SYonghong Song __success __success_unpriv __retval(-20)
sdiv64_non_zero_imm_2(void)225de1c2680SYonghong Song __naked void sdiv64_non_zero_imm_2(void)
226de1c2680SYonghong Song {
227de1c2680SYonghong Song asm volatile (" \
228de1c2680SYonghong Song r0 = 41; \
229de1c2680SYonghong Song r0 s/= -2; \
230de1c2680SYonghong Song exit; \
231de1c2680SYonghong Song " ::: __clobber_all);
232de1c2680SYonghong Song }
233de1c2680SYonghong Song
234de1c2680SYonghong Song SEC("socket")
235de1c2680SYonghong Song __description("SDIV64, non-zero imm divisor, check 3")
236de1c2680SYonghong Song __success __success_unpriv __retval(20)
sdiv64_non_zero_imm_3(void)237de1c2680SYonghong Song __naked void sdiv64_non_zero_imm_3(void)
238de1c2680SYonghong Song {
239de1c2680SYonghong Song asm volatile (" \
240de1c2680SYonghong Song r0 = -41; \
241de1c2680SYonghong Song r0 s/= -2; \
242de1c2680SYonghong Song exit; \
243de1c2680SYonghong Song " ::: __clobber_all);
244de1c2680SYonghong Song }
245de1c2680SYonghong Song
246de1c2680SYonghong Song SEC("socket")
247de1c2680SYonghong Song __description("SDIV64, non-zero imm divisor, check 4")
248de1c2680SYonghong Song __success __success_unpriv __retval(-21)
sdiv64_non_zero_imm_4(void)249de1c2680SYonghong Song __naked void sdiv64_non_zero_imm_4(void)
250de1c2680SYonghong Song {
251de1c2680SYonghong Song asm volatile (" \
252de1c2680SYonghong Song r0 = -42; \
253de1c2680SYonghong Song r0 s/= 2; \
254de1c2680SYonghong Song exit; \
255de1c2680SYonghong Song " ::: __clobber_all);
256de1c2680SYonghong Song }
257de1c2680SYonghong Song
258de1c2680SYonghong Song SEC("socket")
259de1c2680SYonghong Song __description("SDIV64, non-zero imm divisor, check 5")
260de1c2680SYonghong Song __success __success_unpriv __retval(-21)
sdiv64_non_zero_imm_5(void)261de1c2680SYonghong Song __naked void sdiv64_non_zero_imm_5(void)
262de1c2680SYonghong Song {
263de1c2680SYonghong Song asm volatile (" \
264de1c2680SYonghong Song r0 = 42; \
265de1c2680SYonghong Song r0 s/= -2; \
266de1c2680SYonghong Song exit; \
267de1c2680SYonghong Song " ::: __clobber_all);
268de1c2680SYonghong Song }
269de1c2680SYonghong Song
270de1c2680SYonghong Song SEC("socket")
271de1c2680SYonghong Song __description("SDIV64, non-zero imm divisor, check 6")
272de1c2680SYonghong Song __success __success_unpriv __retval(21)
sdiv64_non_zero_imm_6(void)273de1c2680SYonghong Song __naked void sdiv64_non_zero_imm_6(void)
274de1c2680SYonghong Song {
275de1c2680SYonghong Song asm volatile (" \
276de1c2680SYonghong Song r0 = -42; \
277de1c2680SYonghong Song r0 s/= -2; \
278de1c2680SYonghong Song exit; \
279de1c2680SYonghong Song " ::: __clobber_all);
280de1c2680SYonghong Song }
281de1c2680SYonghong Song
282de1c2680SYonghong Song SEC("socket")
283de1c2680SYonghong Song __description("SDIV64, non-zero reg divisor, check 1")
284de1c2680SYonghong Song __success __success_unpriv __retval(-20)
sdiv64_non_zero_reg_1(void)285de1c2680SYonghong Song __naked void sdiv64_non_zero_reg_1(void)
286de1c2680SYonghong Song {
287de1c2680SYonghong Song asm volatile (" \
288de1c2680SYonghong Song r0 = -41; \
289de1c2680SYonghong Song r1 = 2; \
290de1c2680SYonghong Song r0 s/= r1; \
291de1c2680SYonghong Song exit; \
292de1c2680SYonghong Song " ::: __clobber_all);
293de1c2680SYonghong Song }
294de1c2680SYonghong Song
295de1c2680SYonghong Song SEC("socket")
296de1c2680SYonghong Song __description("SDIV64, non-zero reg divisor, check 2")
297de1c2680SYonghong Song __success __success_unpriv __retval(-20)
sdiv64_non_zero_reg_2(void)298de1c2680SYonghong Song __naked void sdiv64_non_zero_reg_2(void)
299de1c2680SYonghong Song {
300de1c2680SYonghong Song asm volatile (" \
301de1c2680SYonghong Song r0 = 41; \
302de1c2680SYonghong Song r1 = -2; \
303de1c2680SYonghong Song r0 s/= r1; \
304de1c2680SYonghong Song exit; \
305de1c2680SYonghong Song " ::: __clobber_all);
306de1c2680SYonghong Song }
307de1c2680SYonghong Song
308de1c2680SYonghong Song SEC("socket")
309de1c2680SYonghong Song __description("SDIV64, non-zero reg divisor, check 3")
310de1c2680SYonghong Song __success __success_unpriv __retval(20)
sdiv64_non_zero_reg_3(void)311de1c2680SYonghong Song __naked void sdiv64_non_zero_reg_3(void)
312de1c2680SYonghong Song {
313de1c2680SYonghong Song asm volatile (" \
314de1c2680SYonghong Song r0 = -41; \
315de1c2680SYonghong Song r1 = -2; \
316de1c2680SYonghong Song r0 s/= r1; \
317de1c2680SYonghong Song exit; \
318de1c2680SYonghong Song " ::: __clobber_all);
319de1c2680SYonghong Song }
320de1c2680SYonghong Song
321de1c2680SYonghong Song SEC("socket")
322de1c2680SYonghong Song __description("SDIV64, non-zero reg divisor, check 4")
323de1c2680SYonghong Song __success __success_unpriv __retval(-21)
sdiv64_non_zero_reg_4(void)324de1c2680SYonghong Song __naked void sdiv64_non_zero_reg_4(void)
325de1c2680SYonghong Song {
326de1c2680SYonghong Song asm volatile (" \
327de1c2680SYonghong Song r0 = -42; \
328de1c2680SYonghong Song r1 = 2; \
329de1c2680SYonghong Song r0 s/= r1; \
330de1c2680SYonghong Song exit; \
331de1c2680SYonghong Song " ::: __clobber_all);
332de1c2680SYonghong Song }
333de1c2680SYonghong Song
334de1c2680SYonghong Song SEC("socket")
335de1c2680SYonghong Song __description("SDIV64, non-zero reg divisor, check 5")
336de1c2680SYonghong Song __success __success_unpriv __retval(-21)
sdiv64_non_zero_reg_5(void)337de1c2680SYonghong Song __naked void sdiv64_non_zero_reg_5(void)
338de1c2680SYonghong Song {
339de1c2680SYonghong Song asm volatile (" \
340de1c2680SYonghong Song r0 = 42; \
341de1c2680SYonghong Song r1 = -2; \
342de1c2680SYonghong Song r0 s/= r1; \
343de1c2680SYonghong Song exit; \
344de1c2680SYonghong Song " ::: __clobber_all);
345de1c2680SYonghong Song }
346de1c2680SYonghong Song
347de1c2680SYonghong Song SEC("socket")
348de1c2680SYonghong Song __description("SDIV64, non-zero reg divisor, check 6")
349de1c2680SYonghong Song __success __success_unpriv __retval(21)
sdiv64_non_zero_reg_6(void)350de1c2680SYonghong Song __naked void sdiv64_non_zero_reg_6(void)
351de1c2680SYonghong Song {
352de1c2680SYonghong Song asm volatile (" \
353de1c2680SYonghong Song r0 = -42; \
354de1c2680SYonghong Song r1 = -2; \
355de1c2680SYonghong Song r0 s/= r1; \
356de1c2680SYonghong Song exit; \
357de1c2680SYonghong Song " ::: __clobber_all);
358de1c2680SYonghong Song }
359de1c2680SYonghong Song
360de1c2680SYonghong Song SEC("socket")
361de1c2680SYonghong Song __description("SMOD32, non-zero imm divisor, check 1")
362de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod32_non_zero_imm_1(void)363de1c2680SYonghong Song __naked void smod32_non_zero_imm_1(void)
364de1c2680SYonghong Song {
365de1c2680SYonghong Song asm volatile (" \
366de1c2680SYonghong Song w0 = -41; \
367de1c2680SYonghong Song w0 s%%= 2; \
368de1c2680SYonghong Song exit; \
369de1c2680SYonghong Song " ::: __clobber_all);
370de1c2680SYonghong Song }
371de1c2680SYonghong Song
372de1c2680SYonghong Song SEC("socket")
373de1c2680SYonghong Song __description("SMOD32, non-zero imm divisor, check 2")
374de1c2680SYonghong Song __success __success_unpriv __retval(1)
smod32_non_zero_imm_2(void)375de1c2680SYonghong Song __naked void smod32_non_zero_imm_2(void)
376de1c2680SYonghong Song {
377de1c2680SYonghong Song asm volatile (" \
378de1c2680SYonghong Song w0 = 41; \
379de1c2680SYonghong Song w0 s%%= -2; \
380de1c2680SYonghong Song exit; \
381de1c2680SYonghong Song " ::: __clobber_all);
382de1c2680SYonghong Song }
383de1c2680SYonghong Song
384de1c2680SYonghong Song SEC("socket")
385de1c2680SYonghong Song __description("SMOD32, non-zero imm divisor, check 3")
386de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod32_non_zero_imm_3(void)387de1c2680SYonghong Song __naked void smod32_non_zero_imm_3(void)
388de1c2680SYonghong Song {
389de1c2680SYonghong Song asm volatile (" \
390de1c2680SYonghong Song w0 = -41; \
391de1c2680SYonghong Song w0 s%%= -2; \
392de1c2680SYonghong Song exit; \
393de1c2680SYonghong Song " ::: __clobber_all);
394de1c2680SYonghong Song }
395de1c2680SYonghong Song
396de1c2680SYonghong Song SEC("socket")
397de1c2680SYonghong Song __description("SMOD32, non-zero imm divisor, check 4")
398de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod32_non_zero_imm_4(void)399de1c2680SYonghong Song __naked void smod32_non_zero_imm_4(void)
400de1c2680SYonghong Song {
401de1c2680SYonghong Song asm volatile (" \
402de1c2680SYonghong Song w0 = -42; \
403de1c2680SYonghong Song w0 s%%= 2; \
404de1c2680SYonghong Song exit; \
405de1c2680SYonghong Song " ::: __clobber_all);
406de1c2680SYonghong Song }
407de1c2680SYonghong Song
408de1c2680SYonghong Song SEC("socket")
409de1c2680SYonghong Song __description("SMOD32, non-zero imm divisor, check 5")
410de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod32_non_zero_imm_5(void)411de1c2680SYonghong Song __naked void smod32_non_zero_imm_5(void)
412de1c2680SYonghong Song {
413de1c2680SYonghong Song asm volatile (" \
414de1c2680SYonghong Song w0 = 42; \
415de1c2680SYonghong Song w0 s%%= -2; \
416de1c2680SYonghong Song exit; \
417de1c2680SYonghong Song " ::: __clobber_all);
418de1c2680SYonghong Song }
419de1c2680SYonghong Song
420de1c2680SYonghong Song SEC("socket")
421de1c2680SYonghong Song __description("SMOD32, non-zero imm divisor, check 6")
422de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod32_non_zero_imm_6(void)423de1c2680SYonghong Song __naked void smod32_non_zero_imm_6(void)
424de1c2680SYonghong Song {
425de1c2680SYonghong Song asm volatile (" \
426de1c2680SYonghong Song w0 = -42; \
427de1c2680SYonghong Song w0 s%%= -2; \
428de1c2680SYonghong Song exit; \
429de1c2680SYonghong Song " ::: __clobber_all);
430de1c2680SYonghong Song }
431de1c2680SYonghong Song
432de1c2680SYonghong Song SEC("socket")
433de1c2680SYonghong Song __description("SMOD32, non-zero reg divisor, check 1")
434de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod32_non_zero_reg_1(void)435de1c2680SYonghong Song __naked void smod32_non_zero_reg_1(void)
436de1c2680SYonghong Song {
437de1c2680SYonghong Song asm volatile (" \
438de1c2680SYonghong Song w0 = -41; \
439de1c2680SYonghong Song w1 = 2; \
440de1c2680SYonghong Song w0 s%%= w1; \
441de1c2680SYonghong Song exit; \
442de1c2680SYonghong Song " ::: __clobber_all);
443de1c2680SYonghong Song }
444de1c2680SYonghong Song
445de1c2680SYonghong Song SEC("socket")
446de1c2680SYonghong Song __description("SMOD32, non-zero reg divisor, check 2")
447de1c2680SYonghong Song __success __success_unpriv __retval(1)
smod32_non_zero_reg_2(void)448de1c2680SYonghong Song __naked void smod32_non_zero_reg_2(void)
449de1c2680SYonghong Song {
450de1c2680SYonghong Song asm volatile (" \
451de1c2680SYonghong Song w0 = 41; \
452de1c2680SYonghong Song w1 = -2; \
453de1c2680SYonghong Song w0 s%%= w1; \
454de1c2680SYonghong Song exit; \
455de1c2680SYonghong Song " ::: __clobber_all);
456de1c2680SYonghong Song }
457de1c2680SYonghong Song
458de1c2680SYonghong Song SEC("socket")
459de1c2680SYonghong Song __description("SMOD32, non-zero reg divisor, check 3")
460de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod32_non_zero_reg_3(void)461de1c2680SYonghong Song __naked void smod32_non_zero_reg_3(void)
462de1c2680SYonghong Song {
463de1c2680SYonghong Song asm volatile (" \
464de1c2680SYonghong Song w0 = -41; \
465de1c2680SYonghong Song w1 = -2; \
466de1c2680SYonghong Song w0 s%%= w1; \
467de1c2680SYonghong Song exit; \
468de1c2680SYonghong Song " ::: __clobber_all);
469de1c2680SYonghong Song }
470de1c2680SYonghong Song
471de1c2680SYonghong Song SEC("socket")
472de1c2680SYonghong Song __description("SMOD32, non-zero reg divisor, check 4")
473de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod32_non_zero_reg_4(void)474de1c2680SYonghong Song __naked void smod32_non_zero_reg_4(void)
475de1c2680SYonghong Song {
476de1c2680SYonghong Song asm volatile (" \
477de1c2680SYonghong Song w0 = -42; \
478de1c2680SYonghong Song w1 = 2; \
479de1c2680SYonghong Song w0 s%%= w1; \
480de1c2680SYonghong Song exit; \
481de1c2680SYonghong Song " ::: __clobber_all);
482de1c2680SYonghong Song }
483de1c2680SYonghong Song
484de1c2680SYonghong Song SEC("socket")
485de1c2680SYonghong Song __description("SMOD32, non-zero reg divisor, check 5")
486de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod32_non_zero_reg_5(void)487de1c2680SYonghong Song __naked void smod32_non_zero_reg_5(void)
488de1c2680SYonghong Song {
489de1c2680SYonghong Song asm volatile (" \
490de1c2680SYonghong Song w0 = 42; \
491de1c2680SYonghong Song w1 = -2; \
492de1c2680SYonghong Song w0 s%%= w1; \
493de1c2680SYonghong Song exit; \
494de1c2680SYonghong Song " ::: __clobber_all);
495de1c2680SYonghong Song }
496de1c2680SYonghong Song
497de1c2680SYonghong Song SEC("socket")
498de1c2680SYonghong Song __description("SMOD32, non-zero reg divisor, check 6")
499de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod32_non_zero_reg_6(void)500de1c2680SYonghong Song __naked void smod32_non_zero_reg_6(void)
501de1c2680SYonghong Song {
502de1c2680SYonghong Song asm volatile (" \
503de1c2680SYonghong Song w0 = -42; \
504de1c2680SYonghong Song w1 = -2; \
505de1c2680SYonghong Song w0 s%%= w1; \
506de1c2680SYonghong Song exit; \
507de1c2680SYonghong Song " ::: __clobber_all);
508de1c2680SYonghong Song }
509de1c2680SYonghong Song
510de1c2680SYonghong Song SEC("socket")
511de1c2680SYonghong Song __description("SMOD64, non-zero imm divisor, check 1")
512de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod64_non_zero_imm_1(void)513de1c2680SYonghong Song __naked void smod64_non_zero_imm_1(void)
514de1c2680SYonghong Song {
515de1c2680SYonghong Song asm volatile (" \
516de1c2680SYonghong Song r0 = -41; \
517de1c2680SYonghong Song r0 s%%= 2; \
518de1c2680SYonghong Song exit; \
519de1c2680SYonghong Song " ::: __clobber_all);
520de1c2680SYonghong Song }
521de1c2680SYonghong Song
522de1c2680SYonghong Song SEC("socket")
523de1c2680SYonghong Song __description("SMOD64, non-zero imm divisor, check 2")
524de1c2680SYonghong Song __success __success_unpriv __retval(1)
smod64_non_zero_imm_2(void)525de1c2680SYonghong Song __naked void smod64_non_zero_imm_2(void)
526de1c2680SYonghong Song {
527de1c2680SYonghong Song asm volatile (" \
528de1c2680SYonghong Song r0 = 41; \
529de1c2680SYonghong Song r0 s%%= -2; \
530de1c2680SYonghong Song exit; \
531de1c2680SYonghong Song " ::: __clobber_all);
532de1c2680SYonghong Song }
533de1c2680SYonghong Song
534de1c2680SYonghong Song SEC("socket")
535de1c2680SYonghong Song __description("SMOD64, non-zero imm divisor, check 3")
536de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod64_non_zero_imm_3(void)537de1c2680SYonghong Song __naked void smod64_non_zero_imm_3(void)
538de1c2680SYonghong Song {
539de1c2680SYonghong Song asm volatile (" \
540de1c2680SYonghong Song r0 = -41; \
541de1c2680SYonghong Song r0 s%%= -2; \
542de1c2680SYonghong Song exit; \
543de1c2680SYonghong Song " ::: __clobber_all);
544de1c2680SYonghong Song }
545de1c2680SYonghong Song
546de1c2680SYonghong Song SEC("socket")
547de1c2680SYonghong Song __description("SMOD64, non-zero imm divisor, check 4")
548de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod64_non_zero_imm_4(void)549de1c2680SYonghong Song __naked void smod64_non_zero_imm_4(void)
550de1c2680SYonghong Song {
551de1c2680SYonghong Song asm volatile (" \
552de1c2680SYonghong Song r0 = -42; \
553de1c2680SYonghong Song r0 s%%= 2; \
554de1c2680SYonghong Song exit; \
555de1c2680SYonghong Song " ::: __clobber_all);
556de1c2680SYonghong Song }
557de1c2680SYonghong Song
558de1c2680SYonghong Song SEC("socket")
559de1c2680SYonghong Song __description("SMOD64, non-zero imm divisor, check 5")
560de1c2680SYonghong Song __success __success_unpriv __retval(-0)
smod64_non_zero_imm_5(void)561de1c2680SYonghong Song __naked void smod64_non_zero_imm_5(void)
562de1c2680SYonghong Song {
563de1c2680SYonghong Song asm volatile (" \
564de1c2680SYonghong Song r0 = 42; \
565de1c2680SYonghong Song r0 s%%= -2; \
566de1c2680SYonghong Song exit; \
567de1c2680SYonghong Song " ::: __clobber_all);
568de1c2680SYonghong Song }
569de1c2680SYonghong Song
570de1c2680SYonghong Song SEC("socket")
571de1c2680SYonghong Song __description("SMOD64, non-zero imm divisor, check 6")
572de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod64_non_zero_imm_6(void)573de1c2680SYonghong Song __naked void smod64_non_zero_imm_6(void)
574de1c2680SYonghong Song {
575de1c2680SYonghong Song asm volatile (" \
576de1c2680SYonghong Song r0 = -42; \
577de1c2680SYonghong Song r0 s%%= -2; \
578de1c2680SYonghong Song exit; \
579de1c2680SYonghong Song " ::: __clobber_all);
580de1c2680SYonghong Song }
581de1c2680SYonghong Song
582de1c2680SYonghong Song SEC("socket")
583de1c2680SYonghong Song __description("SMOD64, non-zero imm divisor, check 7")
584de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod64_non_zero_imm_7(void)585de1c2680SYonghong Song __naked void smod64_non_zero_imm_7(void)
586de1c2680SYonghong Song {
587de1c2680SYonghong Song asm volatile (" \
588de1c2680SYonghong Song r0 = 42; \
589de1c2680SYonghong Song r0 s%%= 2; \
590de1c2680SYonghong Song exit; \
591de1c2680SYonghong Song " ::: __clobber_all);
592de1c2680SYonghong Song }
593de1c2680SYonghong Song
594de1c2680SYonghong Song SEC("socket")
595de1c2680SYonghong Song __description("SMOD64, non-zero imm divisor, check 8")
596de1c2680SYonghong Song __success __success_unpriv __retval(1)
smod64_non_zero_imm_8(void)597de1c2680SYonghong Song __naked void smod64_non_zero_imm_8(void)
598de1c2680SYonghong Song {
599de1c2680SYonghong Song asm volatile (" \
600de1c2680SYonghong Song r0 = 41; \
601de1c2680SYonghong Song r0 s%%= 2; \
602de1c2680SYonghong Song exit; \
603de1c2680SYonghong Song " ::: __clobber_all);
604de1c2680SYonghong Song }
605de1c2680SYonghong Song
606de1c2680SYonghong Song SEC("socket")
607de1c2680SYonghong Song __description("SMOD64, non-zero reg divisor, check 1")
608de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod64_non_zero_reg_1(void)609de1c2680SYonghong Song __naked void smod64_non_zero_reg_1(void)
610de1c2680SYonghong Song {
611de1c2680SYonghong Song asm volatile (" \
612de1c2680SYonghong Song r0 = -41; \
613de1c2680SYonghong Song r1 = 2; \
614de1c2680SYonghong Song r0 s%%= r1; \
615de1c2680SYonghong Song exit; \
616de1c2680SYonghong Song " ::: __clobber_all);
617de1c2680SYonghong Song }
618de1c2680SYonghong Song
619de1c2680SYonghong Song SEC("socket")
620de1c2680SYonghong Song __description("SMOD64, non-zero reg divisor, check 2")
621de1c2680SYonghong Song __success __success_unpriv __retval(1)
smod64_non_zero_reg_2(void)622de1c2680SYonghong Song __naked void smod64_non_zero_reg_2(void)
623de1c2680SYonghong Song {
624de1c2680SYonghong Song asm volatile (" \
625de1c2680SYonghong Song r0 = 41; \
626de1c2680SYonghong Song r1 = -2; \
627de1c2680SYonghong Song r0 s%%= r1; \
628de1c2680SYonghong Song exit; \
629de1c2680SYonghong Song " ::: __clobber_all);
630de1c2680SYonghong Song }
631de1c2680SYonghong Song
632de1c2680SYonghong Song SEC("socket")
633de1c2680SYonghong Song __description("SMOD64, non-zero reg divisor, check 3")
634de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod64_non_zero_reg_3(void)635de1c2680SYonghong Song __naked void smod64_non_zero_reg_3(void)
636de1c2680SYonghong Song {
637de1c2680SYonghong Song asm volatile (" \
638de1c2680SYonghong Song r0 = -41; \
639de1c2680SYonghong Song r1 = -2; \
640de1c2680SYonghong Song r0 s%%= r1; \
641de1c2680SYonghong Song exit; \
642de1c2680SYonghong Song " ::: __clobber_all);
643de1c2680SYonghong Song }
644de1c2680SYonghong Song
645de1c2680SYonghong Song SEC("socket")
646de1c2680SYonghong Song __description("SMOD64, non-zero reg divisor, check 4")
647de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod64_non_zero_reg_4(void)648de1c2680SYonghong Song __naked void smod64_non_zero_reg_4(void)
649de1c2680SYonghong Song {
650de1c2680SYonghong Song asm volatile (" \
651de1c2680SYonghong Song r0 = -42; \
652de1c2680SYonghong Song r1 = 2; \
653de1c2680SYonghong Song r0 s%%= r1; \
654de1c2680SYonghong Song exit; \
655de1c2680SYonghong Song " ::: __clobber_all);
656de1c2680SYonghong Song }
657de1c2680SYonghong Song
658de1c2680SYonghong Song SEC("socket")
659de1c2680SYonghong Song __description("SMOD64, non-zero reg divisor, check 5")
660de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod64_non_zero_reg_5(void)661de1c2680SYonghong Song __naked void smod64_non_zero_reg_5(void)
662de1c2680SYonghong Song {
663de1c2680SYonghong Song asm volatile (" \
664de1c2680SYonghong Song r0 = 42; \
665de1c2680SYonghong Song r1 = -2; \
666de1c2680SYonghong Song r0 s%%= r1; \
667de1c2680SYonghong Song exit; \
668de1c2680SYonghong Song " ::: __clobber_all);
669de1c2680SYonghong Song }
670de1c2680SYonghong Song
671de1c2680SYonghong Song SEC("socket")
672de1c2680SYonghong Song __description("SMOD64, non-zero reg divisor, check 6")
673de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod64_non_zero_reg_6(void)674de1c2680SYonghong Song __naked void smod64_non_zero_reg_6(void)
675de1c2680SYonghong Song {
676de1c2680SYonghong Song asm volatile (" \
677de1c2680SYonghong Song r0 = -42; \
678de1c2680SYonghong Song r1 = -2; \
679de1c2680SYonghong Song r0 s%%= r1; \
680de1c2680SYonghong Song exit; \
681de1c2680SYonghong Song " ::: __clobber_all);
682de1c2680SYonghong Song }
683de1c2680SYonghong Song
684de1c2680SYonghong Song SEC("socket")
685de1c2680SYonghong Song __description("SMOD64, non-zero reg divisor, check 7")
686de1c2680SYonghong Song __success __success_unpriv __retval(0)
smod64_non_zero_reg_7(void)687de1c2680SYonghong Song __naked void smod64_non_zero_reg_7(void)
688de1c2680SYonghong Song {
689de1c2680SYonghong Song asm volatile (" \
690de1c2680SYonghong Song r0 = 42; \
691de1c2680SYonghong Song r1 = 2; \
692de1c2680SYonghong Song r0 s%%= r1; \
693de1c2680SYonghong Song exit; \
694de1c2680SYonghong Song " ::: __clobber_all);
695de1c2680SYonghong Song }
696de1c2680SYonghong Song
697de1c2680SYonghong Song SEC("socket")
698de1c2680SYonghong Song __description("SMOD64, non-zero reg divisor, check 8")
699de1c2680SYonghong Song __success __success_unpriv __retval(1)
smod64_non_zero_reg_8(void)700de1c2680SYonghong Song __naked void smod64_non_zero_reg_8(void)
701de1c2680SYonghong Song {
702de1c2680SYonghong Song asm volatile (" \
703de1c2680SYonghong Song r0 = 41; \
704de1c2680SYonghong Song r1 = 2; \
705de1c2680SYonghong Song r0 s%%= r1; \
706de1c2680SYonghong Song exit; \
707de1c2680SYonghong Song " ::: __clobber_all);
708de1c2680SYonghong Song }
709de1c2680SYonghong Song
710de1c2680SYonghong Song SEC("socket")
711de1c2680SYonghong Song __description("SDIV32, zero divisor")
712de1c2680SYonghong Song __success __success_unpriv __retval(0)
sdiv32_zero_divisor(void)713de1c2680SYonghong Song __naked void sdiv32_zero_divisor(void)
714de1c2680SYonghong Song {
715de1c2680SYonghong Song asm volatile (" \
716de1c2680SYonghong Song w0 = 42; \
717de1c2680SYonghong Song w1 = 0; \
718de1c2680SYonghong Song w2 = -1; \
719de1c2680SYonghong Song w2 s/= w1; \
720de1c2680SYonghong Song w0 = w2; \
721de1c2680SYonghong Song exit; \
722de1c2680SYonghong Song " ::: __clobber_all);
723de1c2680SYonghong Song }
724de1c2680SYonghong Song
725de1c2680SYonghong Song SEC("socket")
726de1c2680SYonghong Song __description("SDIV64, zero divisor")
727de1c2680SYonghong Song __success __success_unpriv __retval(0)
sdiv64_zero_divisor(void)728de1c2680SYonghong Song __naked void sdiv64_zero_divisor(void)
729de1c2680SYonghong Song {
730de1c2680SYonghong Song asm volatile (" \
731de1c2680SYonghong Song r0 = 42; \
732de1c2680SYonghong Song r1 = 0; \
733de1c2680SYonghong Song r2 = -1; \
734de1c2680SYonghong Song r2 s/= r1; \
735de1c2680SYonghong Song r0 = r2; \
736de1c2680SYonghong Song exit; \
737de1c2680SYonghong Song " ::: __clobber_all);
738de1c2680SYonghong Song }
739de1c2680SYonghong Song
740de1c2680SYonghong Song SEC("socket")
741de1c2680SYonghong Song __description("SMOD32, zero divisor")
742de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod32_zero_divisor(void)743de1c2680SYonghong Song __naked void smod32_zero_divisor(void)
744de1c2680SYonghong Song {
745de1c2680SYonghong Song asm volatile (" \
746de1c2680SYonghong Song w0 = 42; \
747de1c2680SYonghong Song w1 = 0; \
748de1c2680SYonghong Song w2 = -1; \
749de1c2680SYonghong Song w2 s%%= w1; \
750de1c2680SYonghong Song w0 = w2; \
751de1c2680SYonghong Song exit; \
752de1c2680SYonghong Song " ::: __clobber_all);
753de1c2680SYonghong Song }
754de1c2680SYonghong Song
755de1c2680SYonghong Song SEC("socket")
756de1c2680SYonghong Song __description("SMOD64, zero divisor")
757de1c2680SYonghong Song __success __success_unpriv __retval(-1)
smod64_zero_divisor(void)758de1c2680SYonghong Song __naked void smod64_zero_divisor(void)
759de1c2680SYonghong Song {
760de1c2680SYonghong Song asm volatile (" \
761de1c2680SYonghong Song r0 = 42; \
762de1c2680SYonghong Song r1 = 0; \
763de1c2680SYonghong Song r2 = -1; \
764de1c2680SYonghong Song r2 s%%= r1; \
765de1c2680SYonghong Song r0 = r2; \
766de1c2680SYonghong Song exit; \
767de1c2680SYonghong Song " ::: __clobber_all);
768de1c2680SYonghong Song }
769de1c2680SYonghong Song
770de1c2680SYonghong Song #else
771de1c2680SYonghong Song
772de1c2680SYonghong Song SEC("socket")
773de1c2680SYonghong Song __description("cpuv4 is not supported by compiler or jit, use a dummy test")
774de1c2680SYonghong Song __success
dummy_test(void)775de1c2680SYonghong Song int dummy_test(void)
776de1c2680SYonghong Song {
777de1c2680SYonghong Song return 0;
778de1c2680SYonghong Song }
779de1c2680SYonghong Song
780de1c2680SYonghong Song #endif
781de1c2680SYonghong Song
782de1c2680SYonghong Song char _license[] SEC("license") = "GPL";
783