1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /* { dg-do run } */
- /* { dg-additional-options "-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;
- }
|