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