testsuite/libgomp.c/atomic-1.c

Go to the documentation of this file.
00001 /* { dg-do run } */
00002 /* { dg-options "-O2 -march=pentium" { target { { i?86-*-* x86_64-*-* } && ilp32 } } } */
00003 
00004 #ifdef __i386__
00005 #include "cpuid.h"
00006 #endif
00007 
00008 extern void abort (void);
00009 double d;
00010 struct
00011 {
00012   int i;
00013   double e;
00014   int j;
00015 } x;
00016 
00017 void
00018 f1 (void)
00019 {
00020   #pragma omp atomic
00021     d += 7.5;
00022   #pragma omp atomic
00023     d *= 2.5;
00024   #pragma omp atomic
00025     d /= 0.25;
00026 }
00027 
00028 void
00029 f2 (void)
00030 {
00031   #pragma omp atomic
00032     x.e += 7.5;
00033   #pragma omp atomic
00034     x.e *= 2.5;
00035   #pragma omp atomic
00036     x.e /= 0.25;
00037 }
00038 
00039 int
00040 main (void)
00041 {
00042 #ifdef __i386__
00043   unsigned int eax, ebx, ecx, edx;
00044 
00045   if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
00046     return 0;
00047 
00048   if (!(edx & bit_CMPXCHG8B))
00049     return 0;
00050 #endif
00051 
00052   d = 1.0;
00053   f1 ();
00054   if (d != 85.0)
00055     abort ();
00056 
00057   x.e = 1.0;
00058   f2 ();
00059   if (x.i != 0 || x.e != 85.0 || x.j != 0)
00060     abort ();
00061   return 0;
00062 }

Generated on Fri Apr 5 05:38:10 2013 for Libgomp by  doxygen 1.4.7