comparison gcc/testsuite/gcc.dg/atomic-exchange-2.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
comparison
equal deleted inserted replaced
68:561a7518be6b 111:04ced10e8804
1 /* Test __atomic routines for existence and proper execution on 2 byte
2 values with each valid memory model. */
3 /* { dg-do run } */
4 /* { dg-require-effective-target sync_char_short } */
5
6 /* Test the execution of the __atomic_X builtin for a short. */
7
8 extern void abort(void);
9
10 short v, count, ret;
11
12 int
13 main ()
14 {
15 v = 0;
16 count = 0;
17
18 if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELAXED) != count)
19 abort ();
20 count++;
21
22 if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQUIRE) != count)
23 abort ();
24 count++;
25
26 if (__atomic_exchange_n (&v, count + 1, __ATOMIC_RELEASE) != count)
27 abort ();
28 count++;
29
30 if (__atomic_exchange_n (&v, count + 1, __ATOMIC_ACQ_REL) != count)
31 abort ();
32 count++;
33
34 if (__atomic_exchange_n (&v, count + 1, __ATOMIC_SEQ_CST) != count)
35 abort ();
36 count++;
37
38 /* Now test the generic version. */
39
40 count++;
41
42 __atomic_exchange (&v, &count, &ret, __ATOMIC_RELAXED);
43 if (ret != count - 1 || v != count)
44 abort ();
45 count++;
46
47 __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQUIRE);
48 if (ret != count - 1 || v != count)
49 abort ();
50 count++;
51
52 __atomic_exchange (&v, &count, &ret, __ATOMIC_RELEASE);
53 if (ret != count - 1 || v != count)
54 abort ();
55 count++;
56
57 __atomic_exchange (&v, &count, &ret, __ATOMIC_ACQ_REL);
58 if (ret != count - 1 || v != count)
59 abort ();
60 count++;
61
62 __atomic_exchange (&v, &count, &ret, __ATOMIC_SEQ_CST);
63 if (ret != count - 1 || v != count)
64 abort ();
65 count++;
66
67 return 0;
68 }