diff options
Diffstat (limited to 'libgomp/testsuite/libgomp.c/atomic-2.c')
-rw-r--r-- | libgomp/testsuite/libgomp.c/atomic-2.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/libgomp/testsuite/libgomp.c/atomic-2.c b/libgomp/testsuite/libgomp.c/atomic-2.c new file mode 100644 index 00000000000..6f4939256b7 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/atomic-2.c @@ -0,0 +1,35 @@ +/* { dg-do run } */ +/* { dg-options "-O2 -fopenmp" } */ +/* { dg-options "-O2 -fopenmp -march=nocona" { target i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -fopenmp" { target ilp32 } } */ + +double d = 1.5; +long double ld = 3; +extern void abort (void); + +void +test (void) +{ +#pragma omp atomic + d *= 1.25; +#pragma omp atomic + ld /= 0.75; + if (d != 1.875 || ld != 4.0L) + abort (); +} + +int +main (void) +{ +#ifdef __x86_64__ +# define bit_SSE3 (1 << 0) +# define bit_CX16 (1 << 13) + unsigned int ax, bx, cx, dx; + __asm__ ("cpuid" : "=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) + : "0" (1) : "cc"); + if ((cx & (bit_SSE3 | bit_CX16)) != (bit_SSE3 | bit_CX16)) + return 0; +#endif + test (); + return 0; +} |