1ade3f08fSEduard Zingerman // SPDX-License-Identifier: GPL-2.0
2ade3f08fSEduard Zingerman /* Converted from tools/testing/selftests/bpf/verifier/masking.c */
3ade3f08fSEduard Zingerman
4ade3f08fSEduard Zingerman #include <linux/bpf.h>
5ade3f08fSEduard Zingerman #include <bpf/bpf_helpers.h>
6ade3f08fSEduard Zingerman #include "bpf_misc.h"
7ade3f08fSEduard Zingerman
8ade3f08fSEduard Zingerman SEC("socket")
9ade3f08fSEduard Zingerman __description("masking, test out of bounds 1")
10ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_1(void)11ade3f08fSEduard Zingerman __naked void test_out_of_bounds_1(void)
12ade3f08fSEduard Zingerman {
13ade3f08fSEduard Zingerman asm volatile (" \
14ade3f08fSEduard Zingerman w1 = 5; \
15ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
16ade3f08fSEduard Zingerman r2 -= r1; \
17ade3f08fSEduard Zingerman r2 |= r1; \
18ade3f08fSEduard Zingerman r2 = -r2; \
19ade3f08fSEduard Zingerman r2 s>>= 63; \
20ade3f08fSEduard Zingerman r1 &= r2; \
21ade3f08fSEduard Zingerman r0 = r1; \
22ade3f08fSEduard Zingerman exit; \
23ade3f08fSEduard Zingerman " :
24ade3f08fSEduard Zingerman : __imm_const(__imm_0, 5 - 1)
25ade3f08fSEduard Zingerman : __clobber_all);
26ade3f08fSEduard Zingerman }
27ade3f08fSEduard Zingerman
28ade3f08fSEduard Zingerman SEC("socket")
29ade3f08fSEduard Zingerman __description("masking, test out of bounds 2")
30ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_2(void)31ade3f08fSEduard Zingerman __naked void test_out_of_bounds_2(void)
32ade3f08fSEduard Zingerman {
33ade3f08fSEduard Zingerman asm volatile (" \
34ade3f08fSEduard Zingerman w1 = 1; \
35ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
36ade3f08fSEduard Zingerman r2 -= r1; \
37ade3f08fSEduard Zingerman r2 |= r1; \
38ade3f08fSEduard Zingerman r2 = -r2; \
39ade3f08fSEduard Zingerman r2 s>>= 63; \
40ade3f08fSEduard Zingerman r1 &= r2; \
41ade3f08fSEduard Zingerman r0 = r1; \
42ade3f08fSEduard Zingerman exit; \
43ade3f08fSEduard Zingerman " :
44ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
45ade3f08fSEduard Zingerman : __clobber_all);
46ade3f08fSEduard Zingerman }
47ade3f08fSEduard Zingerman
48ade3f08fSEduard Zingerman SEC("socket")
49ade3f08fSEduard Zingerman __description("masking, test out of bounds 3")
50ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_3(void)51ade3f08fSEduard Zingerman __naked void test_out_of_bounds_3(void)
52ade3f08fSEduard Zingerman {
53ade3f08fSEduard Zingerman asm volatile (" \
54ade3f08fSEduard Zingerman w1 = 0xffffffff; \
55ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
56ade3f08fSEduard Zingerman r2 -= r1; \
57ade3f08fSEduard Zingerman r2 |= r1; \
58ade3f08fSEduard Zingerman r2 = -r2; \
59ade3f08fSEduard Zingerman r2 s>>= 63; \
60ade3f08fSEduard Zingerman r1 &= r2; \
61ade3f08fSEduard Zingerman r0 = r1; \
62ade3f08fSEduard Zingerman exit; \
63ade3f08fSEduard Zingerman " :
64ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
65ade3f08fSEduard Zingerman : __clobber_all);
66ade3f08fSEduard Zingerman }
67ade3f08fSEduard Zingerman
68ade3f08fSEduard Zingerman SEC("socket")
69ade3f08fSEduard Zingerman __description("masking, test out of bounds 4")
70ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_4(void)71ade3f08fSEduard Zingerman __naked void test_out_of_bounds_4(void)
72ade3f08fSEduard Zingerman {
73ade3f08fSEduard Zingerman asm volatile (" \
74ade3f08fSEduard Zingerman w1 = 0xffffffff; \
75ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
76ade3f08fSEduard Zingerman r2 -= r1; \
77ade3f08fSEduard Zingerman r2 |= r1; \
78ade3f08fSEduard Zingerman r2 = -r2; \
79ade3f08fSEduard Zingerman r2 s>>= 63; \
80ade3f08fSEduard Zingerman r1 &= r2; \
81ade3f08fSEduard Zingerman r0 = r1; \
82ade3f08fSEduard Zingerman exit; \
83ade3f08fSEduard Zingerman " :
84ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
85ade3f08fSEduard Zingerman : __clobber_all);
86ade3f08fSEduard Zingerman }
87ade3f08fSEduard Zingerman
88ade3f08fSEduard Zingerman SEC("socket")
89ade3f08fSEduard Zingerman __description("masking, test out of bounds 5")
90ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_5(void)91ade3f08fSEduard Zingerman __naked void test_out_of_bounds_5(void)
92ade3f08fSEduard Zingerman {
93ade3f08fSEduard Zingerman asm volatile (" \
94ade3f08fSEduard Zingerman w1 = -1; \
95ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
96ade3f08fSEduard Zingerman r2 -= r1; \
97ade3f08fSEduard Zingerman r2 |= r1; \
98ade3f08fSEduard Zingerman r2 = -r2; \
99ade3f08fSEduard Zingerman r2 s>>= 63; \
100ade3f08fSEduard Zingerman r1 &= r2; \
101ade3f08fSEduard Zingerman r0 = r1; \
102ade3f08fSEduard Zingerman exit; \
103ade3f08fSEduard Zingerman " :
104ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
105ade3f08fSEduard Zingerman : __clobber_all);
106ade3f08fSEduard Zingerman }
107ade3f08fSEduard Zingerman
108ade3f08fSEduard Zingerman SEC("socket")
109ade3f08fSEduard Zingerman __description("masking, test out of bounds 6")
110ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_6(void)111ade3f08fSEduard Zingerman __naked void test_out_of_bounds_6(void)
112ade3f08fSEduard Zingerman {
113ade3f08fSEduard Zingerman asm volatile (" \
114ade3f08fSEduard Zingerman w1 = -1; \
115ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
116ade3f08fSEduard Zingerman r2 -= r1; \
117ade3f08fSEduard Zingerman r2 |= r1; \
118ade3f08fSEduard Zingerman r2 = -r2; \
119ade3f08fSEduard Zingerman r2 s>>= 63; \
120ade3f08fSEduard Zingerman r1 &= r2; \
121ade3f08fSEduard Zingerman r0 = r1; \
122ade3f08fSEduard Zingerman exit; \
123ade3f08fSEduard Zingerman " :
124ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
125ade3f08fSEduard Zingerman : __clobber_all);
126ade3f08fSEduard Zingerman }
127ade3f08fSEduard Zingerman
128ade3f08fSEduard Zingerman SEC("socket")
129ade3f08fSEduard Zingerman __description("masking, test out of bounds 7")
130ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_7(void)131ade3f08fSEduard Zingerman __naked void test_out_of_bounds_7(void)
132ade3f08fSEduard Zingerman {
133ade3f08fSEduard Zingerman asm volatile (" \
134ade3f08fSEduard Zingerman r1 = 5; \
135ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
136ade3f08fSEduard Zingerman r2 -= r1; \
137ade3f08fSEduard Zingerman r2 |= r1; \
138ade3f08fSEduard Zingerman r2 = -r2; \
139ade3f08fSEduard Zingerman r2 s>>= 63; \
140ade3f08fSEduard Zingerman r1 &= r2; \
141ade3f08fSEduard Zingerman r0 = r1; \
142ade3f08fSEduard Zingerman exit; \
143ade3f08fSEduard Zingerman " :
144ade3f08fSEduard Zingerman : __imm_const(__imm_0, 5 - 1)
145ade3f08fSEduard Zingerman : __clobber_all);
146ade3f08fSEduard Zingerman }
147ade3f08fSEduard Zingerman
148ade3f08fSEduard Zingerman SEC("socket")
149ade3f08fSEduard Zingerman __description("masking, test out of bounds 8")
150ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_8(void)151ade3f08fSEduard Zingerman __naked void test_out_of_bounds_8(void)
152ade3f08fSEduard Zingerman {
153ade3f08fSEduard Zingerman asm volatile (" \
154ade3f08fSEduard Zingerman r1 = 1; \
155ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
156ade3f08fSEduard Zingerman r2 -= r1; \
157ade3f08fSEduard Zingerman r2 |= r1; \
158ade3f08fSEduard Zingerman r2 = -r2; \
159ade3f08fSEduard Zingerman r2 s>>= 63; \
160ade3f08fSEduard Zingerman r1 &= r2; \
161ade3f08fSEduard Zingerman r0 = r1; \
162ade3f08fSEduard Zingerman exit; \
163ade3f08fSEduard Zingerman " :
164ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
165ade3f08fSEduard Zingerman : __clobber_all);
166ade3f08fSEduard Zingerman }
167ade3f08fSEduard Zingerman
168ade3f08fSEduard Zingerman SEC("socket")
169ade3f08fSEduard Zingerman __description("masking, test out of bounds 9")
170ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_9(void)171ade3f08fSEduard Zingerman __naked void test_out_of_bounds_9(void)
172ade3f08fSEduard Zingerman {
173ade3f08fSEduard Zingerman asm volatile (" \
174ade3f08fSEduard Zingerman r1 = 0xffffffff; \
175ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
176ade3f08fSEduard Zingerman r2 -= r1; \
177ade3f08fSEduard Zingerman r2 |= r1; \
178ade3f08fSEduard Zingerman r2 = -r2; \
179ade3f08fSEduard Zingerman r2 s>>= 63; \
180ade3f08fSEduard Zingerman r1 &= r2; \
181ade3f08fSEduard Zingerman r0 = r1; \
182ade3f08fSEduard Zingerman exit; \
183ade3f08fSEduard Zingerman " :
184ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
185ade3f08fSEduard Zingerman : __clobber_all);
186ade3f08fSEduard Zingerman }
187ade3f08fSEduard Zingerman
188ade3f08fSEduard Zingerman SEC("socket")
189ade3f08fSEduard Zingerman __description("masking, test out of bounds 10")
190ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_10(void)191ade3f08fSEduard Zingerman __naked void test_out_of_bounds_10(void)
192ade3f08fSEduard Zingerman {
193ade3f08fSEduard Zingerman asm volatile (" \
194ade3f08fSEduard Zingerman r1 = 0xffffffff; \
195ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
196ade3f08fSEduard Zingerman r2 -= r1; \
197ade3f08fSEduard Zingerman r2 |= r1; \
198ade3f08fSEduard Zingerman r2 = -r2; \
199ade3f08fSEduard Zingerman r2 s>>= 63; \
200ade3f08fSEduard Zingerman r1 &= r2; \
201ade3f08fSEduard Zingerman r0 = r1; \
202ade3f08fSEduard Zingerman exit; \
203ade3f08fSEduard Zingerman " :
204ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
205ade3f08fSEduard Zingerman : __clobber_all);
206ade3f08fSEduard Zingerman }
207ade3f08fSEduard Zingerman
208ade3f08fSEduard Zingerman SEC("socket")
209ade3f08fSEduard Zingerman __description("masking, test out of bounds 11")
210ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_11(void)211ade3f08fSEduard Zingerman __naked void test_out_of_bounds_11(void)
212ade3f08fSEduard Zingerman {
213ade3f08fSEduard Zingerman asm volatile (" \
214ade3f08fSEduard Zingerman r1 = -1; \
215ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
216ade3f08fSEduard Zingerman r2 -= r1; \
217ade3f08fSEduard Zingerman r2 |= r1; \
218ade3f08fSEduard Zingerman r2 = -r2; \
219ade3f08fSEduard Zingerman r2 s>>= 63; \
220ade3f08fSEduard Zingerman r1 &= r2; \
221ade3f08fSEduard Zingerman r0 = r1; \
222ade3f08fSEduard Zingerman exit; \
223ade3f08fSEduard Zingerman " :
224ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
225ade3f08fSEduard Zingerman : __clobber_all);
226ade3f08fSEduard Zingerman }
227ade3f08fSEduard Zingerman
228ade3f08fSEduard Zingerman SEC("socket")
229ade3f08fSEduard Zingerman __description("masking, test out of bounds 12")
230ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
test_out_of_bounds_12(void)231ade3f08fSEduard Zingerman __naked void test_out_of_bounds_12(void)
232ade3f08fSEduard Zingerman {
233ade3f08fSEduard Zingerman asm volatile (" \
234ade3f08fSEduard Zingerman r1 = -1; \
235ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
236ade3f08fSEduard Zingerman r2 -= r1; \
237ade3f08fSEduard Zingerman r2 |= r1; \
238ade3f08fSEduard Zingerman r2 = -r2; \
239ade3f08fSEduard Zingerman r2 s>>= 63; \
240ade3f08fSEduard Zingerman r1 &= r2; \
241ade3f08fSEduard Zingerman r0 = r1; \
242ade3f08fSEduard Zingerman exit; \
243ade3f08fSEduard Zingerman " :
244ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
245ade3f08fSEduard Zingerman : __clobber_all);
246ade3f08fSEduard Zingerman }
247ade3f08fSEduard Zingerman
248ade3f08fSEduard Zingerman SEC("socket")
249ade3f08fSEduard Zingerman __description("masking, test in bounds 1")
250ade3f08fSEduard Zingerman __success __success_unpriv __retval(4)
masking_test_in_bounds_1(void)251ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_1(void)
252ade3f08fSEduard Zingerman {
253ade3f08fSEduard Zingerman asm volatile (" \
254ade3f08fSEduard Zingerman w1 = 4; \
255ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
256ade3f08fSEduard Zingerman r2 -= r1; \
257ade3f08fSEduard Zingerman r2 |= r1; \
258ade3f08fSEduard Zingerman r2 = -r2; \
259ade3f08fSEduard Zingerman r2 s>>= 63; \
260ade3f08fSEduard Zingerman r1 &= r2; \
261ade3f08fSEduard Zingerman r0 = r1; \
262ade3f08fSEduard Zingerman exit; \
263ade3f08fSEduard Zingerman " :
264ade3f08fSEduard Zingerman : __imm_const(__imm_0, 5 - 1)
265ade3f08fSEduard Zingerman : __clobber_all);
266ade3f08fSEduard Zingerman }
267ade3f08fSEduard Zingerman
268ade3f08fSEduard Zingerman SEC("socket")
269ade3f08fSEduard Zingerman __description("masking, test in bounds 2")
270ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
masking_test_in_bounds_2(void)271ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_2(void)
272ade3f08fSEduard Zingerman {
273ade3f08fSEduard Zingerman asm volatile (" \
274ade3f08fSEduard Zingerman w1 = 0; \
275ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
276ade3f08fSEduard Zingerman r2 -= r1; \
277ade3f08fSEduard Zingerman r2 |= r1; \
278ade3f08fSEduard Zingerman r2 = -r2; \
279ade3f08fSEduard Zingerman r2 s>>= 63; \
280ade3f08fSEduard Zingerman r1 &= r2; \
281ade3f08fSEduard Zingerman r0 = r1; \
282ade3f08fSEduard Zingerman exit; \
283ade3f08fSEduard Zingerman " :
284ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
285ade3f08fSEduard Zingerman : __clobber_all);
286ade3f08fSEduard Zingerman }
287ade3f08fSEduard Zingerman
288ade3f08fSEduard Zingerman SEC("socket")
289ade3f08fSEduard Zingerman __description("masking, test in bounds 3")
290ade3f08fSEduard Zingerman __success __success_unpriv __retval(0xfffffffe)
masking_test_in_bounds_3(void)291ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_3(void)
292ade3f08fSEduard Zingerman {
293ade3f08fSEduard Zingerman asm volatile (" \
294ade3f08fSEduard Zingerman w1 = 0xfffffffe; \
295ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
296ade3f08fSEduard Zingerman r2 -= r1; \
297ade3f08fSEduard Zingerman r2 |= r1; \
298ade3f08fSEduard Zingerman r2 = -r2; \
299ade3f08fSEduard Zingerman r2 s>>= 63; \
300ade3f08fSEduard Zingerman r1 &= r2; \
301ade3f08fSEduard Zingerman r0 = r1; \
302ade3f08fSEduard Zingerman exit; \
303ade3f08fSEduard Zingerman " :
304ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xffffffff - 1)
305ade3f08fSEduard Zingerman : __clobber_all);
306ade3f08fSEduard Zingerman }
307ade3f08fSEduard Zingerman
308ade3f08fSEduard Zingerman SEC("socket")
309ade3f08fSEduard Zingerman __description("masking, test in bounds 4")
310ade3f08fSEduard Zingerman __success __success_unpriv __retval(0xabcde)
masking_test_in_bounds_4(void)311ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_4(void)
312ade3f08fSEduard Zingerman {
313ade3f08fSEduard Zingerman asm volatile (" \
314ade3f08fSEduard Zingerman w1 = 0xabcde; \
315ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
316ade3f08fSEduard Zingerman r2 -= r1; \
317ade3f08fSEduard Zingerman r2 |= r1; \
318ade3f08fSEduard Zingerman r2 = -r2; \
319ade3f08fSEduard Zingerman r2 s>>= 63; \
320ade3f08fSEduard Zingerman r1 &= r2; \
321ade3f08fSEduard Zingerman r0 = r1; \
322ade3f08fSEduard Zingerman exit; \
323ade3f08fSEduard Zingerman " :
324ade3f08fSEduard Zingerman : __imm_const(__imm_0, 0xabcdef - 1)
325ade3f08fSEduard Zingerman : __clobber_all);
326ade3f08fSEduard Zingerman }
327ade3f08fSEduard Zingerman
328ade3f08fSEduard Zingerman SEC("socket")
329ade3f08fSEduard Zingerman __description("masking, test in bounds 5")
330ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
masking_test_in_bounds_5(void)331ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_5(void)
332ade3f08fSEduard Zingerman {
333ade3f08fSEduard Zingerman asm volatile (" \
334ade3f08fSEduard Zingerman w1 = 0; \
335ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
336ade3f08fSEduard Zingerman r2 -= r1; \
337ade3f08fSEduard Zingerman r2 |= r1; \
338ade3f08fSEduard Zingerman r2 = -r2; \
339ade3f08fSEduard Zingerman r2 s>>= 63; \
340ade3f08fSEduard Zingerman r1 &= r2; \
341ade3f08fSEduard Zingerman r0 = r1; \
342ade3f08fSEduard Zingerman exit; \
343ade3f08fSEduard Zingerman " :
344ade3f08fSEduard Zingerman : __imm_const(__imm_0, 1 - 1)
345ade3f08fSEduard Zingerman : __clobber_all);
346ade3f08fSEduard Zingerman }
347ade3f08fSEduard Zingerman
348ade3f08fSEduard Zingerman SEC("socket")
349ade3f08fSEduard Zingerman __description("masking, test in bounds 6")
350ade3f08fSEduard Zingerman __success __success_unpriv __retval(46)
masking_test_in_bounds_6(void)351ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_6(void)
352ade3f08fSEduard Zingerman {
353ade3f08fSEduard Zingerman asm volatile (" \
354ade3f08fSEduard Zingerman w1 = 46; \
355ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
356ade3f08fSEduard Zingerman r2 -= r1; \
357ade3f08fSEduard Zingerman r2 |= r1; \
358ade3f08fSEduard Zingerman r2 = -r2; \
359ade3f08fSEduard Zingerman r2 s>>= 63; \
360ade3f08fSEduard Zingerman r1 &= r2; \
361ade3f08fSEduard Zingerman r0 = r1; \
362ade3f08fSEduard Zingerman exit; \
363ade3f08fSEduard Zingerman " :
364ade3f08fSEduard Zingerman : __imm_const(__imm_0, 47 - 1)
365ade3f08fSEduard Zingerman : __clobber_all);
366ade3f08fSEduard Zingerman }
367ade3f08fSEduard Zingerman
368ade3f08fSEduard Zingerman SEC("socket")
369ade3f08fSEduard Zingerman __description("masking, test in bounds 7")
370ade3f08fSEduard Zingerman __success __success_unpriv __retval(46)
masking_test_in_bounds_7(void)371ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_7(void)
372ade3f08fSEduard Zingerman {
373ade3f08fSEduard Zingerman asm volatile (" \
374ade3f08fSEduard Zingerman r3 = -46; \
375ade3f08fSEduard Zingerman r3 *= -1; \
376ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
377ade3f08fSEduard Zingerman r2 -= r3; \
378ade3f08fSEduard Zingerman r2 |= r3; \
379ade3f08fSEduard Zingerman r2 = -r2; \
380ade3f08fSEduard Zingerman r2 s>>= 63; \
381ade3f08fSEduard Zingerman r3 &= r2; \
382ade3f08fSEduard Zingerman r0 = r3; \
383ade3f08fSEduard Zingerman exit; \
384ade3f08fSEduard Zingerman " :
385ade3f08fSEduard Zingerman : __imm_const(__imm_0, 47 - 1)
386ade3f08fSEduard Zingerman : __clobber_all);
387ade3f08fSEduard Zingerman }
388ade3f08fSEduard Zingerman
389ade3f08fSEduard Zingerman SEC("socket")
390ade3f08fSEduard Zingerman __description("masking, test in bounds 8")
391ade3f08fSEduard Zingerman __success __success_unpriv __retval(0)
masking_test_in_bounds_8(void)392ade3f08fSEduard Zingerman __naked void masking_test_in_bounds_8(void)
393ade3f08fSEduard Zingerman {
394ade3f08fSEduard Zingerman asm volatile (" \
395ade3f08fSEduard Zingerman r3 = -47; \
396ade3f08fSEduard Zingerman r3 *= -1; \
397ade3f08fSEduard Zingerman w2 = %[__imm_0]; \
398ade3f08fSEduard Zingerman r2 -= r3; \
399ade3f08fSEduard Zingerman r2 |= r3; \
400ade3f08fSEduard Zingerman r2 = -r2; \
401ade3f08fSEduard Zingerman r2 s>>= 63; \
402ade3f08fSEduard Zingerman r3 &= r2; \
403ade3f08fSEduard Zingerman r0 = r3; \
404ade3f08fSEduard Zingerman exit; \
405ade3f08fSEduard Zingerman " :
406ade3f08fSEduard Zingerman : __imm_const(__imm_0, 47 - 1)
407ade3f08fSEduard Zingerman : __clobber_all);
408ade3f08fSEduard Zingerman }
409ade3f08fSEduard Zingerman
410ade3f08fSEduard Zingerman char _license[] SEC("license") = "GPL";
411