123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /* { dg-do run } */
- /* { dg-options "-O2 -march=pentium" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
- #ifdef __i386__
- #include "cpuid.h"
- #endif
- extern void abort (void);
- double d;
- struct
- {
- int i;
- double e;
- int j;
- } x;
- void
- f1 (void)
- {
- #pragma omp atomic
- d += 7.5;
- #pragma omp atomic
- d *= 2.5;
- #pragma omp atomic
- d /= 0.25;
- }
- void
- f2 (void)
- {
- #pragma omp atomic
- x.e += 7.5;
- #pragma omp atomic
- x.e *= 2.5;
- #pragma omp atomic
- x.e /= 0.25;
- }
- int
- main (void)
- {
- #ifdef __i386__
- unsigned int eax, ebx, ecx, edx;
- if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
- return 0;
- if (!(edx & bit_CMPXCHG8B))
- return 0;
- #endif
- d = 1.0;
- f1 ();
- if (d != 85.0)
- abort ();
- x.e = 1.0;
- f2 ();
- if (x.i != 0 || x.e != 85.0 || x.j != 0)
- abort ();
- return 0;
- }
|