1*404b540aSrobert /* { dg-do run } */ 2*404b540aSrobert /* { dg-options "-O2 -fopenmp" } */ 3*404b540aSrobert /* { dg-options "-O2 -fopenmp -march=nocona" { target i?86-*-* x86_64-*-* } } */ 4*404b540aSrobert /* { dg-options "-O2 -fopenmp" { target ilp32 } } */ 5*404b540aSrobert 6*404b540aSrobert double d = 1.5; 7*404b540aSrobert long double ld = 3; 8*404b540aSrobert extern void abort (void); 9*404b540aSrobert 10*404b540aSrobert void test(void)11*404b540aSroberttest (void) 12*404b540aSrobert { 13*404b540aSrobert #pragma omp atomic 14*404b540aSrobert d *= 1.25; 15*404b540aSrobert #pragma omp atomic 16*404b540aSrobert ld /= 0.75; 17*404b540aSrobert if (d != 1.875 || ld != 4.0L) 18*404b540aSrobert abort (); 19*404b540aSrobert } 20*404b540aSrobert 21*404b540aSrobert int main(void)22*404b540aSrobertmain (void) 23*404b540aSrobert { 24*404b540aSrobert #ifdef __x86_64__ 25*404b540aSrobert # define bit_SSE3 (1 << 0) 26*404b540aSrobert # define bit_CX16 (1 << 13) 27*404b540aSrobert unsigned int ax, bx, cx, dx; 28*404b540aSrobert __asm__ ("cpuid" : "=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) 29*404b540aSrobert : "0" (1) : "cc"); 30*404b540aSrobert if ((cx & (bit_SSE3 | bit_CX16)) != (bit_SSE3 | bit_CX16)) 31*404b540aSrobert return 0; 32*404b540aSrobert #endif 33*404b540aSrobert test (); 34*404b540aSrobert return 0; 35*404b540aSrobert } 36