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