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