1/* { dg-do run } */
2/* { dg-options "-O2 -fopenmp" } */
3/* { dg-options "-O2 -fopenmp -march=pentium" { target i?86-*-* x86_64-*-* } } */
4/* { dg-options "-O2 -fopenmp" { target lp64 } } */
5
6#ifdef __i386__
7#include "../../../gcc/testsuite/gcc.dg/i386-cpuid.h"
8#define bit_CX8 (1 << 8)
9#endif
10
11extern void abort (void);
12double d;
13struct
14{
15  int i;
16  double e;
17  int j;
18} x;
19
20void
21f1 (void)
22{
23  #pragma omp atomic
24    d += 7.5;
25  #pragma omp atomic
26    d *= 2.5;
27  #pragma omp atomic
28    d /= 0.25;
29}
30
31void
32f2 (void)
33{
34  #pragma omp atomic
35    x.e += 7.5;
36  #pragma omp atomic
37    x.e *= 2.5;
38  #pragma omp atomic
39    x.e /= 0.25;
40}
41
42int
43main (void)
44{
45#ifdef __i386__
46  unsigned long cpu_facilities;
47
48  cpu_facilities = i386_cpuid ();
49
50  if ((cpu_facilities & bit_CX8) == 0)
51    return 0;
52#endif
53
54  d = 1.0;
55  f1 ();
56  if (d != 85.0)
57    abort ();
58
59  x.e = 1.0;
60  f2 ();
61  if (x.i != 0 || x.e != 85.0 || x.j != 0)
62    abort ();
63  return 0;
64}
65