Imported Upstream version 4.8.1
[platform/upstream/gcc48.git] / libgomp / testsuite / libgomp.c / atomic-10.c
1 /* { dg-do run } */
2
3 extern void abort (void);
4 int x1, x2, x3, x4, x5;
5 volatile int y6 = 9, y2, y3, y4, y5;
6 volatile unsigned char z1, z2, z3, z4, z5;
7 float a1, a2, a3, a4;
8
9 void
10 f1 (void)
11 {
12   #pragma omp atomic
13     x1++;
14   #pragma omp atomic
15     x2--;
16   #pragma omp atomic
17     ++x3;
18   #pragma omp atomic
19     --x4;
20   #pragma omp atomic
21     x5 += 1;
22   #pragma omp atomic
23     x1 -= y6;
24   #pragma omp atomic
25     x2 |= 1;
26   #pragma omp atomic
27     x3 &= 1;
28   #pragma omp atomic
29     x4 ^= 1;
30   #pragma omp atomic
31     x5 *= 3;
32   #pragma omp atomic
33     x1 /= 3;
34   #pragma omp atomic
35     x2 /= 3;
36   #pragma omp atomic
37     x3 <<= 3;
38   #pragma omp atomic
39     x4 >>= 3;
40 }
41
42 void
43 f2 (void)
44 {
45   #pragma omp atomic
46     y6++;
47   #pragma omp atomic
48     y2--;
49   #pragma omp atomic
50     ++y3;
51   #pragma omp atomic
52     --y4;
53   #pragma omp atomic
54     y5 += 1;
55   #pragma omp atomic
56     y6 -= x1;
57   #pragma omp atomic
58     y2 |= 1;
59   #pragma omp atomic
60     y3 &= 1;
61   #pragma omp atomic
62     y4 ^= 1;
63   #pragma omp atomic
64     y5 *= 3;
65   #pragma omp atomic
66     y6 /= 3;
67   #pragma omp atomic
68     y2 /= 3;
69   #pragma omp atomic
70     y3 <<= 3;
71   #pragma omp atomic
72     y4 >>= 3;
73 }
74
75 void
76 f3 (void)
77 {
78   #pragma omp atomic
79     z1++;
80   #pragma omp atomic
81     z2--;
82   #pragma omp atomic
83     ++z3;
84   #pragma omp atomic
85     --z4;
86   #pragma omp atomic
87     z5 += 1;
88   #pragma omp atomic
89     z1 |= 1;
90   #pragma omp atomic
91     z2 &= 1;
92   #pragma omp atomic
93     z3 ^= 1;
94   #pragma omp atomic
95     z4 *= 3;
96   #pragma omp atomic
97     z5 /= 3;
98   #pragma omp atomic
99     z1 /= 3;
100   #pragma omp atomic
101     z2 <<= 3;
102   #pragma omp atomic
103     z3 >>= 3;
104 }
105
106 void
107 f4 (void)
108 {
109   #pragma omp atomic
110     a1 += 8.0;
111   #pragma omp atomic
112     a2 *= 3.5;
113   #pragma omp atomic
114     a3 -= a1 + a2;
115   #pragma omp atomic
116     a4 /= 2.0;
117 }
118
119 int
120 main (void)
121 {
122   f1 ();
123   if (x1 != -2 || x2 != 0 || x3 != 8 || x4 != -1 || x5 != 3)
124     abort ();
125   f2 ();
126   if (y6 != 4 || y2 != 0 || y3 != 8 || y4 != -1 || y5 != 3)
127     abort ();
128   f3 ();
129   if (z1 != 0 || z2 != 8 || z3 != 0 || z4 != 253 || z5 != 0)
130     abort ();
131   a1 = 7;
132   a2 = 10;
133   a3 = 11;
134   a4 = 13;
135   f4 ();
136   if (a1 != 15.0 || a2 != 35.0 || a3 != -39.0 || a4 != 6.5)
137     abort ();
138   return 0;
139 }