summaryrefslogtreecommitdiff
path: root/libgomp/testsuite/libgomp.c/atomic-10.c
blob: 58edeed6c36e7a3c6a0b641e2580f084eea1ac44 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/* { dg-do run } */

extern void abort (void);
int x1, x2, x3, x4, x5;
volatile int y6 = 9, y2, y3, y4, y5;
volatile unsigned char z1, z2, z3, z4, z5;
float a1, a2, a3, a4;

void
f1 (void)
{
  #pragma omp atomic
    x1++;
  #pragma omp atomic
    x2--;
  #pragma omp atomic
    ++x3;
  #pragma omp atomic
    --x4;
  #pragma omp atomic
    x5 += 1;
  #pragma omp atomic
    x1 -= y6;
  #pragma omp atomic
    x2 |= 1;
  #pragma omp atomic
    x3 &= 1;
  #pragma omp atomic
    x4 ^= 1;
  #pragma omp atomic
    x5 *= 3;
  #pragma omp atomic
    x1 /= 3;
  #pragma omp atomic
    x2 /= 3;
  #pragma omp atomic
    x3 <<= 3;
  #pragma omp atomic
    x4 >>= 3;
}

void
f2 (void)
{
  #pragma omp atomic
    y6++;
  #pragma omp atomic
    y2--;
  #pragma omp atomic
    ++y3;
  #pragma omp atomic
    --y4;
  #pragma omp atomic
    y5 += 1;
  #pragma omp atomic
    y6 -= x1;
  #pragma omp atomic
    y2 |= 1;
  #pragma omp atomic
    y3 &= 1;
  #pragma omp atomic
    y4 ^= 1;
  #pragma omp atomic
    y5 *= 3;
  #pragma omp atomic
    y6 /= 3;
  #pragma omp atomic
    y2 /= 3;
  #pragma omp atomic
    y3 <<= 3;
  #pragma omp atomic
    y4 >>= 3;
}

void
f3 (void)
{
  #pragma omp atomic
    z1++;
  #pragma omp atomic
    z2--;
  #pragma omp atomic
    ++z3;
  #pragma omp atomic
    --z4;
  #pragma omp atomic
    z5 += 1;
  #pragma omp atomic
    z1 |= 1;
  #pragma omp atomic
    z2 &= 1;
  #pragma omp atomic
    z3 ^= 1;
  #pragma omp atomic
    z4 *= 3;
  #pragma omp atomic
    z5 /= 3;
  #pragma omp atomic
    z1 /= 3;
  #pragma omp atomic
    z2 <<= 3;
  #pragma omp atomic
    z3 >>= 3;
}

void
f4 (void)
{
  #pragma omp atomic
    a1 += 8.0;
  #pragma omp atomic
    a2 *= 3.5;
  #pragma omp atomic
    a3 -= a1 + a2;
  #pragma omp atomic
    a4 /= 2.0;
}

int
main (void)
{
  f1 ();
  if (x1 != -2 || x2 != 0 || x3 != 8 || x4 != -1 || x5 != 3)
    abort ();
  f2 ();
  if (y6 != 4 || y2 != 0 || y3 != 8 || y4 != -1 || y5 != 3)
    abort ();
  f3 ();
  if (z1 != 0 || z2 != 8 || z3 != 0 || z4 != 253 || z5 != 0)
    abort ();
  a1 = 7;
  a2 = 10;
  a3 = 11;
  a4 = 13;
  f4 ();
  if (a1 != 15.0 || a2 != 35.0 || a3 != -39.0 || a4 != 6.5)
    abort ();
  return 0;
}