fix EIGEN_CPUID for i386 & PIC, still remains to fix the MSVC version

This commit is contained in:
Gael Guennebaud 2010-06-24 09:29:43 +02:00
parent 98fec45d3c
commit 8beb60bf63

View File

@ -589,14 +589,15 @@ public:
#if defined(__GNUC__) #if defined(__GNUC__)
# if defined(__PIC__) && defined(__i386__) # if defined(__PIC__) && defined(__i386__)
# define EIGEN_CPUID(abcd,func) \ # define EIGEN_CPUID(abcd,func,id) \
__asm__ __volatile__ ("xchgl %%ebx, %%esi;cpuid; xchgl %%ebx,%%esi": "=a" (abcd[0]), "=S" (abcd[1]), "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func)); __asm__ __volatile__ ("xchgl %%ebx, %%esi;cpuid; xchgl %%ebx,%%esi": "=a" (abcd[0]), "=S" (abcd[1]), "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func), "c" (id));
# else # else
# define EIGEN_CPUID(abcd,func,id) \ # define EIGEN_CPUID(abcd,func,id) \
__asm__ __volatile__ ("cpuid": "=a" (abcd[0]), "=b" (abcd[1]), "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func), "c" (id) ); __asm__ __volatile__ ("cpuid": "=a" (abcd[0]), "=b" (abcd[1]), "=c" (abcd[2]), "=d" (abcd[3]) : "a" (func), "c" (id) );
# endif # endif
#elif defined(_MSC_VER) // TODO fix MSVC cpuid
# define EIGEN_CPUID(abcd,func) __cpuid((int*)abcd,func) // #elif defined(_MSC_VER)
// # define EIGEN_CPUID(abcd,func) __cpuid((int*)abcd,func)
#endif #endif
inline bool ei_cpuid_is_vendor(int abcd[4], const char* vendor) inline bool ei_cpuid_is_vendor(int abcd[4], const char* vendor)