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