|  | /* PR middle-end/36106 */ | 
|  | /* { dg-additional-options "-mieee" { target alpha*-*-* } } */ | 
|  | /* { dg-additional-options "-march=i586" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */ | 
|  |  | 
|  | #ifdef __i386__ | 
|  | # include "cpuid.h" | 
|  | #endif | 
|  |  | 
|  | extern void abort (void); | 
|  |  | 
|  | union { unsigned long long l; double d; } u = { .l = 0x7ff0000000072301ULL }; | 
|  |  | 
|  | int __attribute__((noinline)) | 
|  | do_test (void) | 
|  | { | 
|  | #pragma omp atomic | 
|  | u.d += 1.0L; | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | main (void) | 
|  | { | 
|  | #ifdef __i386__ | 
|  | unsigned int eax, ebx, ecx, edx; | 
|  |  | 
|  | if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx)) | 
|  | return 0; | 
|  |  | 
|  | if (!(edx & bit_CMPXCHG8B)) | 
|  | return 0; | 
|  | #endif | 
|  |  | 
|  | do_test (); | 
|  |  | 
|  | return 0; | 
|  | } |