162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci/* Converted from tools/testing/selftests/bpf/verifier/masking.c */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#include <linux/bpf.h>
562306a36Sopenharmony_ci#include <bpf/bpf_helpers.h>
662306a36Sopenharmony_ci#include "bpf_misc.h"
762306a36Sopenharmony_ci
862306a36Sopenharmony_ciSEC("socket")
962306a36Sopenharmony_ci__description("masking, test out of bounds 1")
1062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
1162306a36Sopenharmony_ci__naked void test_out_of_bounds_1(void)
1262306a36Sopenharmony_ci{
1362306a36Sopenharmony_ci	asm volatile ("					\
1462306a36Sopenharmony_ci	w1 = 5;						\
1562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
1662306a36Sopenharmony_ci	r2 -= r1;					\
1762306a36Sopenharmony_ci	r2 |= r1;					\
1862306a36Sopenharmony_ci	r2 = -r2;					\
1962306a36Sopenharmony_ci	r2 s>>= 63;					\
2062306a36Sopenharmony_ci	r1 &= r2;					\
2162306a36Sopenharmony_ci	r0 = r1;					\
2262306a36Sopenharmony_ci	exit;						\
2362306a36Sopenharmony_ci"	:
2462306a36Sopenharmony_ci	: __imm_const(__imm_0, 5 - 1)
2562306a36Sopenharmony_ci	: __clobber_all);
2662306a36Sopenharmony_ci}
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciSEC("socket")
2962306a36Sopenharmony_ci__description("masking, test out of bounds 2")
3062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
3162306a36Sopenharmony_ci__naked void test_out_of_bounds_2(void)
3262306a36Sopenharmony_ci{
3362306a36Sopenharmony_ci	asm volatile ("					\
3462306a36Sopenharmony_ci	w1 = 1;						\
3562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
3662306a36Sopenharmony_ci	r2 -= r1;					\
3762306a36Sopenharmony_ci	r2 |= r1;					\
3862306a36Sopenharmony_ci	r2 = -r2;					\
3962306a36Sopenharmony_ci	r2 s>>= 63;					\
4062306a36Sopenharmony_ci	r1 &= r2;					\
4162306a36Sopenharmony_ci	r0 = r1;					\
4262306a36Sopenharmony_ci	exit;						\
4362306a36Sopenharmony_ci"	:
4462306a36Sopenharmony_ci	: __imm_const(__imm_0, 1 - 1)
4562306a36Sopenharmony_ci	: __clobber_all);
4662306a36Sopenharmony_ci}
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ciSEC("socket")
4962306a36Sopenharmony_ci__description("masking, test out of bounds 3")
5062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
5162306a36Sopenharmony_ci__naked void test_out_of_bounds_3(void)
5262306a36Sopenharmony_ci{
5362306a36Sopenharmony_ci	asm volatile ("					\
5462306a36Sopenharmony_ci	w1 = 0xffffffff;				\
5562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
5662306a36Sopenharmony_ci	r2 -= r1;					\
5762306a36Sopenharmony_ci	r2 |= r1;					\
5862306a36Sopenharmony_ci	r2 = -r2;					\
5962306a36Sopenharmony_ci	r2 s>>= 63;					\
6062306a36Sopenharmony_ci	r1 &= r2;					\
6162306a36Sopenharmony_ci	r0 = r1;					\
6262306a36Sopenharmony_ci	exit;						\
6362306a36Sopenharmony_ci"	:
6462306a36Sopenharmony_ci	: __imm_const(__imm_0, 0xffffffff - 1)
6562306a36Sopenharmony_ci	: __clobber_all);
6662306a36Sopenharmony_ci}
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ciSEC("socket")
6962306a36Sopenharmony_ci__description("masking, test out of bounds 4")
7062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
7162306a36Sopenharmony_ci__naked void test_out_of_bounds_4(void)
7262306a36Sopenharmony_ci{
7362306a36Sopenharmony_ci	asm volatile ("					\
7462306a36Sopenharmony_ci	w1 = 0xffffffff;				\
7562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
7662306a36Sopenharmony_ci	r2 -= r1;					\
7762306a36Sopenharmony_ci	r2 |= r1;					\
7862306a36Sopenharmony_ci	r2 = -r2;					\
7962306a36Sopenharmony_ci	r2 s>>= 63;					\
8062306a36Sopenharmony_ci	r1 &= r2;					\
8162306a36Sopenharmony_ci	r0 = r1;					\
8262306a36Sopenharmony_ci	exit;						\
8362306a36Sopenharmony_ci"	:
8462306a36Sopenharmony_ci	: __imm_const(__imm_0, 1 - 1)
8562306a36Sopenharmony_ci	: __clobber_all);
8662306a36Sopenharmony_ci}
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ciSEC("socket")
8962306a36Sopenharmony_ci__description("masking, test out of bounds 5")
9062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
9162306a36Sopenharmony_ci__naked void test_out_of_bounds_5(void)
9262306a36Sopenharmony_ci{
9362306a36Sopenharmony_ci	asm volatile ("					\
9462306a36Sopenharmony_ci	w1 = -1;					\
9562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
9662306a36Sopenharmony_ci	r2 -= r1;					\
9762306a36Sopenharmony_ci	r2 |= r1;					\
9862306a36Sopenharmony_ci	r2 = -r2;					\
9962306a36Sopenharmony_ci	r2 s>>= 63;					\
10062306a36Sopenharmony_ci	r1 &= r2;					\
10162306a36Sopenharmony_ci	r0 = r1;					\
10262306a36Sopenharmony_ci	exit;						\
10362306a36Sopenharmony_ci"	:
10462306a36Sopenharmony_ci	: __imm_const(__imm_0, 1 - 1)
10562306a36Sopenharmony_ci	: __clobber_all);
10662306a36Sopenharmony_ci}
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ciSEC("socket")
10962306a36Sopenharmony_ci__description("masking, test out of bounds 6")
11062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
11162306a36Sopenharmony_ci__naked void test_out_of_bounds_6(void)
11262306a36Sopenharmony_ci{
11362306a36Sopenharmony_ci	asm volatile ("					\
11462306a36Sopenharmony_ci	w1 = -1;					\
11562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
11662306a36Sopenharmony_ci	r2 -= r1;					\
11762306a36Sopenharmony_ci	r2 |= r1;					\
11862306a36Sopenharmony_ci	r2 = -r2;					\
11962306a36Sopenharmony_ci	r2 s>>= 63;					\
12062306a36Sopenharmony_ci	r1 &= r2;					\
12162306a36Sopenharmony_ci	r0 = r1;					\
12262306a36Sopenharmony_ci	exit;						\
12362306a36Sopenharmony_ci"	:
12462306a36Sopenharmony_ci	: __imm_const(__imm_0, 0xffffffff - 1)
12562306a36Sopenharmony_ci	: __clobber_all);
12662306a36Sopenharmony_ci}
12762306a36Sopenharmony_ci
12862306a36Sopenharmony_ciSEC("socket")
12962306a36Sopenharmony_ci__description("masking, test out of bounds 7")
13062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
13162306a36Sopenharmony_ci__naked void test_out_of_bounds_7(void)
13262306a36Sopenharmony_ci{
13362306a36Sopenharmony_ci	asm volatile ("					\
13462306a36Sopenharmony_ci	r1 = 5;						\
13562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
13662306a36Sopenharmony_ci	r2 -= r1;					\
13762306a36Sopenharmony_ci	r2 |= r1;					\
13862306a36Sopenharmony_ci	r2 = -r2;					\
13962306a36Sopenharmony_ci	r2 s>>= 63;					\
14062306a36Sopenharmony_ci	r1 &= r2;					\
14162306a36Sopenharmony_ci	r0 = r1;					\
14262306a36Sopenharmony_ci	exit;						\
14362306a36Sopenharmony_ci"	:
14462306a36Sopenharmony_ci	: __imm_const(__imm_0, 5 - 1)
14562306a36Sopenharmony_ci	: __clobber_all);
14662306a36Sopenharmony_ci}
14762306a36Sopenharmony_ci
14862306a36Sopenharmony_ciSEC("socket")
14962306a36Sopenharmony_ci__description("masking, test out of bounds 8")
15062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
15162306a36Sopenharmony_ci__naked void test_out_of_bounds_8(void)
15262306a36Sopenharmony_ci{
15362306a36Sopenharmony_ci	asm volatile ("					\
15462306a36Sopenharmony_ci	r1 = 1;						\
15562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
15662306a36Sopenharmony_ci	r2 -= r1;					\
15762306a36Sopenharmony_ci	r2 |= r1;					\
15862306a36Sopenharmony_ci	r2 = -r2;					\
15962306a36Sopenharmony_ci	r2 s>>= 63;					\
16062306a36Sopenharmony_ci	r1 &= r2;					\
16162306a36Sopenharmony_ci	r0 = r1;					\
16262306a36Sopenharmony_ci	exit;						\
16362306a36Sopenharmony_ci"	:
16462306a36Sopenharmony_ci	: __imm_const(__imm_0, 1 - 1)
16562306a36Sopenharmony_ci	: __clobber_all);
16662306a36Sopenharmony_ci}
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_ciSEC("socket")
16962306a36Sopenharmony_ci__description("masking, test out of bounds 9")
17062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
17162306a36Sopenharmony_ci__naked void test_out_of_bounds_9(void)
17262306a36Sopenharmony_ci{
17362306a36Sopenharmony_ci	asm volatile ("					\
17462306a36Sopenharmony_ci	r1 = 0xffffffff;				\
17562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
17662306a36Sopenharmony_ci	r2 -= r1;					\
17762306a36Sopenharmony_ci	r2 |= r1;					\
17862306a36Sopenharmony_ci	r2 = -r2;					\
17962306a36Sopenharmony_ci	r2 s>>= 63;					\
18062306a36Sopenharmony_ci	r1 &= r2;					\
18162306a36Sopenharmony_ci	r0 = r1;					\
18262306a36Sopenharmony_ci	exit;						\
18362306a36Sopenharmony_ci"	:
18462306a36Sopenharmony_ci	: __imm_const(__imm_0, 0xffffffff - 1)
18562306a36Sopenharmony_ci	: __clobber_all);
18662306a36Sopenharmony_ci}
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ciSEC("socket")
18962306a36Sopenharmony_ci__description("masking, test out of bounds 10")
19062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
19162306a36Sopenharmony_ci__naked void test_out_of_bounds_10(void)
19262306a36Sopenharmony_ci{
19362306a36Sopenharmony_ci	asm volatile ("					\
19462306a36Sopenharmony_ci	r1 = 0xffffffff;				\
19562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
19662306a36Sopenharmony_ci	r2 -= r1;					\
19762306a36Sopenharmony_ci	r2 |= r1;					\
19862306a36Sopenharmony_ci	r2 = -r2;					\
19962306a36Sopenharmony_ci	r2 s>>= 63;					\
20062306a36Sopenharmony_ci	r1 &= r2;					\
20162306a36Sopenharmony_ci	r0 = r1;					\
20262306a36Sopenharmony_ci	exit;						\
20362306a36Sopenharmony_ci"	:
20462306a36Sopenharmony_ci	: __imm_const(__imm_0, 1 - 1)
20562306a36Sopenharmony_ci	: __clobber_all);
20662306a36Sopenharmony_ci}
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_ciSEC("socket")
20962306a36Sopenharmony_ci__description("masking, test out of bounds 11")
21062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
21162306a36Sopenharmony_ci__naked void test_out_of_bounds_11(void)
21262306a36Sopenharmony_ci{
21362306a36Sopenharmony_ci	asm volatile ("					\
21462306a36Sopenharmony_ci	r1 = -1;					\
21562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
21662306a36Sopenharmony_ci	r2 -= r1;					\
21762306a36Sopenharmony_ci	r2 |= r1;					\
21862306a36Sopenharmony_ci	r2 = -r2;					\
21962306a36Sopenharmony_ci	r2 s>>= 63;					\
22062306a36Sopenharmony_ci	r1 &= r2;					\
22162306a36Sopenharmony_ci	r0 = r1;					\
22262306a36Sopenharmony_ci	exit;						\
22362306a36Sopenharmony_ci"	:
22462306a36Sopenharmony_ci	: __imm_const(__imm_0, 1 - 1)
22562306a36Sopenharmony_ci	: __clobber_all);
22662306a36Sopenharmony_ci}
22762306a36Sopenharmony_ci
22862306a36Sopenharmony_ciSEC("socket")
22962306a36Sopenharmony_ci__description("masking, test out of bounds 12")
23062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
23162306a36Sopenharmony_ci__naked void test_out_of_bounds_12(void)
23262306a36Sopenharmony_ci{
23362306a36Sopenharmony_ci	asm volatile ("					\
23462306a36Sopenharmony_ci	r1 = -1;					\
23562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
23662306a36Sopenharmony_ci	r2 -= r1;					\
23762306a36Sopenharmony_ci	r2 |= r1;					\
23862306a36Sopenharmony_ci	r2 = -r2;					\
23962306a36Sopenharmony_ci	r2 s>>= 63;					\
24062306a36Sopenharmony_ci	r1 &= r2;					\
24162306a36Sopenharmony_ci	r0 = r1;					\
24262306a36Sopenharmony_ci	exit;						\
24362306a36Sopenharmony_ci"	:
24462306a36Sopenharmony_ci	: __imm_const(__imm_0, 0xffffffff - 1)
24562306a36Sopenharmony_ci	: __clobber_all);
24662306a36Sopenharmony_ci}
24762306a36Sopenharmony_ci
24862306a36Sopenharmony_ciSEC("socket")
24962306a36Sopenharmony_ci__description("masking, test in bounds 1")
25062306a36Sopenharmony_ci__success __success_unpriv __retval(4)
25162306a36Sopenharmony_ci__naked void masking_test_in_bounds_1(void)
25262306a36Sopenharmony_ci{
25362306a36Sopenharmony_ci	asm volatile ("					\
25462306a36Sopenharmony_ci	w1 = 4;						\
25562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
25662306a36Sopenharmony_ci	r2 -= r1;					\
25762306a36Sopenharmony_ci	r2 |= r1;					\
25862306a36Sopenharmony_ci	r2 = -r2;					\
25962306a36Sopenharmony_ci	r2 s>>= 63;					\
26062306a36Sopenharmony_ci	r1 &= r2;					\
26162306a36Sopenharmony_ci	r0 = r1;					\
26262306a36Sopenharmony_ci	exit;						\
26362306a36Sopenharmony_ci"	:
26462306a36Sopenharmony_ci	: __imm_const(__imm_0, 5 - 1)
26562306a36Sopenharmony_ci	: __clobber_all);
26662306a36Sopenharmony_ci}
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_ciSEC("socket")
26962306a36Sopenharmony_ci__description("masking, test in bounds 2")
27062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
27162306a36Sopenharmony_ci__naked void masking_test_in_bounds_2(void)
27262306a36Sopenharmony_ci{
27362306a36Sopenharmony_ci	asm volatile ("					\
27462306a36Sopenharmony_ci	w1 = 0;						\
27562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
27662306a36Sopenharmony_ci	r2 -= r1;					\
27762306a36Sopenharmony_ci	r2 |= r1;					\
27862306a36Sopenharmony_ci	r2 = -r2;					\
27962306a36Sopenharmony_ci	r2 s>>= 63;					\
28062306a36Sopenharmony_ci	r1 &= r2;					\
28162306a36Sopenharmony_ci	r0 = r1;					\
28262306a36Sopenharmony_ci	exit;						\
28362306a36Sopenharmony_ci"	:
28462306a36Sopenharmony_ci	: __imm_const(__imm_0, 0xffffffff - 1)
28562306a36Sopenharmony_ci	: __clobber_all);
28662306a36Sopenharmony_ci}
28762306a36Sopenharmony_ci
28862306a36Sopenharmony_ciSEC("socket")
28962306a36Sopenharmony_ci__description("masking, test in bounds 3")
29062306a36Sopenharmony_ci__success __success_unpriv __retval(0xfffffffe)
29162306a36Sopenharmony_ci__naked void masking_test_in_bounds_3(void)
29262306a36Sopenharmony_ci{
29362306a36Sopenharmony_ci	asm volatile ("					\
29462306a36Sopenharmony_ci	w1 = 0xfffffffe;				\
29562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
29662306a36Sopenharmony_ci	r2 -= r1;					\
29762306a36Sopenharmony_ci	r2 |= r1;					\
29862306a36Sopenharmony_ci	r2 = -r2;					\
29962306a36Sopenharmony_ci	r2 s>>= 63;					\
30062306a36Sopenharmony_ci	r1 &= r2;					\
30162306a36Sopenharmony_ci	r0 = r1;					\
30262306a36Sopenharmony_ci	exit;						\
30362306a36Sopenharmony_ci"	:
30462306a36Sopenharmony_ci	: __imm_const(__imm_0, 0xffffffff - 1)
30562306a36Sopenharmony_ci	: __clobber_all);
30662306a36Sopenharmony_ci}
30762306a36Sopenharmony_ci
30862306a36Sopenharmony_ciSEC("socket")
30962306a36Sopenharmony_ci__description("masking, test in bounds 4")
31062306a36Sopenharmony_ci__success __success_unpriv __retval(0xabcde)
31162306a36Sopenharmony_ci__naked void masking_test_in_bounds_4(void)
31262306a36Sopenharmony_ci{
31362306a36Sopenharmony_ci	asm volatile ("					\
31462306a36Sopenharmony_ci	w1 = 0xabcde;					\
31562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
31662306a36Sopenharmony_ci	r2 -= r1;					\
31762306a36Sopenharmony_ci	r2 |= r1;					\
31862306a36Sopenharmony_ci	r2 = -r2;					\
31962306a36Sopenharmony_ci	r2 s>>= 63;					\
32062306a36Sopenharmony_ci	r1 &= r2;					\
32162306a36Sopenharmony_ci	r0 = r1;					\
32262306a36Sopenharmony_ci	exit;						\
32362306a36Sopenharmony_ci"	:
32462306a36Sopenharmony_ci	: __imm_const(__imm_0, 0xabcdef - 1)
32562306a36Sopenharmony_ci	: __clobber_all);
32662306a36Sopenharmony_ci}
32762306a36Sopenharmony_ci
32862306a36Sopenharmony_ciSEC("socket")
32962306a36Sopenharmony_ci__description("masking, test in bounds 5")
33062306a36Sopenharmony_ci__success __success_unpriv __retval(0)
33162306a36Sopenharmony_ci__naked void masking_test_in_bounds_5(void)
33262306a36Sopenharmony_ci{
33362306a36Sopenharmony_ci	asm volatile ("					\
33462306a36Sopenharmony_ci	w1 = 0;						\
33562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
33662306a36Sopenharmony_ci	r2 -= r1;					\
33762306a36Sopenharmony_ci	r2 |= r1;					\
33862306a36Sopenharmony_ci	r2 = -r2;					\
33962306a36Sopenharmony_ci	r2 s>>= 63;					\
34062306a36Sopenharmony_ci	r1 &= r2;					\
34162306a36Sopenharmony_ci	r0 = r1;					\
34262306a36Sopenharmony_ci	exit;						\
34362306a36Sopenharmony_ci"	:
34462306a36Sopenharmony_ci	: __imm_const(__imm_0, 1 - 1)
34562306a36Sopenharmony_ci	: __clobber_all);
34662306a36Sopenharmony_ci}
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_ciSEC("socket")
34962306a36Sopenharmony_ci__description("masking, test in bounds 6")
35062306a36Sopenharmony_ci__success __success_unpriv __retval(46)
35162306a36Sopenharmony_ci__naked void masking_test_in_bounds_6(void)
35262306a36Sopenharmony_ci{
35362306a36Sopenharmony_ci	asm volatile ("					\
35462306a36Sopenharmony_ci	w1 = 46;					\
35562306a36Sopenharmony_ci	w2 = %[__imm_0];				\
35662306a36Sopenharmony_ci	r2 -= r1;					\
35762306a36Sopenharmony_ci	r2 |= r1;					\
35862306a36Sopenharmony_ci	r2 = -r2;					\
35962306a36Sopenharmony_ci	r2 s>>= 63;					\
36062306a36Sopenharmony_ci	r1 &= r2;					\
36162306a36Sopenharmony_ci	r0 = r1;					\
36262306a36Sopenharmony_ci	exit;						\
36362306a36Sopenharmony_ci"	:
36462306a36Sopenharmony_ci	: __imm_const(__imm_0, 47 - 1)
36562306a36Sopenharmony_ci	: __clobber_all);
36662306a36Sopenharmony_ci}
36762306a36Sopenharmony_ci
36862306a36Sopenharmony_ciSEC("socket")
36962306a36Sopenharmony_ci__description("masking, test in bounds 7")
37062306a36Sopenharmony_ci__success __success_unpriv __retval(46)
37162306a36Sopenharmony_ci__naked void masking_test_in_bounds_7(void)
37262306a36Sopenharmony_ci{
37362306a36Sopenharmony_ci	asm volatile ("					\
37462306a36Sopenharmony_ci	r3 = -46;					\
37562306a36Sopenharmony_ci	r3 *= -1;					\
37662306a36Sopenharmony_ci	w2 = %[__imm_0];				\
37762306a36Sopenharmony_ci	r2 -= r3;					\
37862306a36Sopenharmony_ci	r2 |= r3;					\
37962306a36Sopenharmony_ci	r2 = -r2;					\
38062306a36Sopenharmony_ci	r2 s>>= 63;					\
38162306a36Sopenharmony_ci	r3 &= r2;					\
38262306a36Sopenharmony_ci	r0 = r3;					\
38362306a36Sopenharmony_ci	exit;						\
38462306a36Sopenharmony_ci"	:
38562306a36Sopenharmony_ci	: __imm_const(__imm_0, 47 - 1)
38662306a36Sopenharmony_ci	: __clobber_all);
38762306a36Sopenharmony_ci}
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_ciSEC("socket")
39062306a36Sopenharmony_ci__description("masking, test in bounds 8")
39162306a36Sopenharmony_ci__success __success_unpriv __retval(0)
39262306a36Sopenharmony_ci__naked void masking_test_in_bounds_8(void)
39362306a36Sopenharmony_ci{
39462306a36Sopenharmony_ci	asm volatile ("					\
39562306a36Sopenharmony_ci	r3 = -47;					\
39662306a36Sopenharmony_ci	r3 *= -1;					\
39762306a36Sopenharmony_ci	w2 = %[__imm_0];				\
39862306a36Sopenharmony_ci	r2 -= r3;					\
39962306a36Sopenharmony_ci	r2 |= r3;					\
40062306a36Sopenharmony_ci	r2 = -r2;					\
40162306a36Sopenharmony_ci	r2 s>>= 63;					\
40262306a36Sopenharmony_ci	r3 &= r2;					\
40362306a36Sopenharmony_ci	r0 = r3;					\
40462306a36Sopenharmony_ci	exit;						\
40562306a36Sopenharmony_ci"	:
40662306a36Sopenharmony_ci	: __imm_const(__imm_0, 47 - 1)
40762306a36Sopenharmony_ci	: __clobber_all);
40862306a36Sopenharmony_ci}
40962306a36Sopenharmony_ci
41062306a36Sopenharmony_cichar _license[] SEC("license") = "GPL";
411