xref: /OK3568_Linux_fs/kernel/tools/build/feature/test-sync-compare-and-swap.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun #include <stdint.h>
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun volatile uint64_t x;
5*4882a593Smuzhiyun 
main(int argc,char * argv[])6*4882a593Smuzhiyun int main(int argc, char *argv[])
7*4882a593Smuzhiyun {
8*4882a593Smuzhiyun 	uint64_t old, new = argc;
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun 	(void)argv;
11*4882a593Smuzhiyun 	do {
12*4882a593Smuzhiyun 		old = __sync_val_compare_and_swap(&x, 0, 0);
13*4882a593Smuzhiyun 	} while (!__sync_bool_compare_and_swap(&x, old, new));
14*4882a593Smuzhiyun 	return old == new;
15*4882a593Smuzhiyun }
16