mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			41 lines
		
	
	
		
			635 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			635 B
		
	
	
	
		
			C
		
	
	
	
| /* PR middle-end/36106 */
 | |
| /* { dg-additional-options "-mcx16" { target { { i?86-*-* x86_64-*-* } && lp64 } } } */
 | |
| 
 | |
| #ifdef __x86_64__
 | |
| # include "cpuid.h"
 | |
| #endif
 | |
| 
 | |
| extern void abort (void);
 | |
| 
 | |
| int __attribute__((noinline))
 | |
| do_test (void)
 | |
| {
 | |
|   long double d = .0L;
 | |
|   int i;
 | |
|   #pragma omp parallel for shared (d)
 | |
|     for (i = 0; i < 10; i++)
 | |
|       #pragma omp atomic
 | |
| 	d += 1.0L;
 | |
|   if (d != 10.0L)
 | |
|     abort ();
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| int
 | |
| main (void)
 | |
| {
 | |
| #ifdef __x86_64__
 | |
|   unsigned int eax, ebx, ecx, edx;
 | |
| 
 | |
|   if (!__get_cpuid (1, &eax, &ebx, &ecx, &edx))
 | |
|     return 0;
 | |
| 
 | |
|   if (!(ecx & bit_CMPXCHG16B))
 | |
|     return 0;
 | |
| #endif
 | |
| 
 | |
|   do_test ();
 | |
| 
 | |
|   return 0;
 | |
| }
 |