atomic-6.c 656 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. /* PR middle-end/36106 */
  2. /* { dg-options "-O2" } */
  3. /* { dg-options "-O2 -mieee" { target alpha*-*-* } } */
  4. /* { dg-options "-O2 -march=i586" { target { { i?86-*-* x86_64-*-* } && ia32 } } } */
  5. #ifdef __i386__
  6. # include "cpuid.h"
  7. #endif
  8. extern void abort (void);
  9. union { unsigned long long l; double d; } u = { .l = 0x7ff0000000072301ULL };
  10. int __attribute__((noinline))
  11. do_test (void)
  12. {
  13. #pragma omp atomic
  14. u.d += 1.0L;
  15. return 0;
  16. }
  17. int
  18. main (void)
  19. {
  20. #ifdef __i386__
  21. unsigned int eax, ebx, ecx, edx;
  22. if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
  23. return 0;
  24. if (!(edx & bit_CMPXCHG8B))
  25. return 0;
  26. #endif
  27. do_test ();
  28. return 0;
  29. }