]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/libgomp/lib/contrib/gcc-4.3/libgomp/testsuite/libgomp.c/atomic-5.c
Inital import
[l4.git] / l4 / pkg / libgomp / lib / contrib / gcc-4.3 / libgomp / testsuite / libgomp.c / atomic-5.c
1 /* PR middle-end/36106 */
2 /* { dg-options "-O2" } */
3 /* { dg-options "-O2 -mcx16" { target { { i?86-*-* x86_64-*-* } && lp64 } } } */
4
5 #ifdef __x86_64__
6 # include "../../../gcc/config/i386/cpuid.h"
7 #endif
8
9 extern void abort (void);
10
11 int __attribute__((noinline))
12 do_test (void)
13 {
14   long double d = .0L;
15   int i;
16   #pragma omp parallel for shared (d)
17     for (i = 0; i < 10; i++)
18       #pragma omp atomic
19         d += 1.0L;
20   if (d != 10.0L)
21     abort ();
22   return 0;
23 }
24
25 int
26 main (void)
27 {
28 #ifdef __x86_64__
29   unsigned int eax, ebx, ecx, edx;
30
31   if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
32     return 0;
33
34   if (ecx & bit_CMPXCHG16B)
35     do_test ();
36 #else
37   do_test ();
38 #endif
39   return 0;
40 }