In my project I need to determine what SIMD instruction set the CPU supports. The problem is that when I try to do a test compile I get a series of errors that repeat several times like the compiler is parsing the code multiple times. The reason for determining supported SIMD instructions is because I'm trying to adapt John the Ripper's DES bitslice implementation for use on a GPGPU (in particular CUDA) for both Windows & Linux.
So, here's where my error occurs on line 37
// File Name: Arch.h
// Purpose: Determine CPU architecture (x86 or x86-64) and to determine instruction set supported by
// the CPU (MMX, SSE2 or neither)
//
// Authors: Daniel Beard and Michael Campbell
//If CPU is x86-64 then use x86-64 include
#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64)
#include "x86-64.h"
#endif
//Determine if CPU architecture is 32-bit, then determine which compiler is being used, finally determine if GCC (GNUC) or MS Visual C++ compiler is being used
#if defined(i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86)
#if defined(__GNUC__)
#define cpuid(func,ax,bx,cx,dx)\
__asm__ __volatile__ ("cpuid":\
"=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) : "a" (func));
int a,b,c,d;
cpuid(0x1,a,b,c,d);
if ((d & 0x17)== 1)
{
#include "x86-mmx.h"
}
else if (d & 0x1A) == 1)
{
#include "x86-sse.h"
}
else if((d & 0x17) != 1 || (d & 0x1A) != 1)
{
#include "x86-any.h"
}
#endif
#if defined(_MSC_VER)
#include<intrin.h>
int CPUInfo[4] = {0};
__cpuid( CPUInfo, 1 );
if( (CPUInfo[3] & 0x1A) == 1 )
{
#include "x86-sse.h"
}
else if( (CPUInfo[3] & 0x17) == 1 )
{
#include "x86-mmx.h"
}
else if( (CPUInfo[3] & 0x17) != 1 || (CPUInfo[3] & 0x1A) != 1 )
{
#include "x86-any.h"
}
#endif
#endif
Here are the errors I get (there's 86 of them but they repeat same series of errors/line numbers all the way down):
Error 1 error C2059: syntax error : ',' line 37
Error 2 error C2143: syntax error : missing ')' before 'constant' line 37
Error 3 error C2143: syntax error : missing '{' before 'constant' line 37
Error 4 error C2059: syntax error : '<Unknown>' line 37
Error 5 error C2059: syntax error : ')' line 37
Error 6 error C2059: syntax error : 'if' line 38
Error 7 error C2059: syntax error : 'else' line 42
Error 8 error C2059: syntax error : 'else' line 46
Error 9 error C2374: 'CPUInfo' : redefinition; multiple initialization line 36