ref: 7734f55bc535c6d3d0fbb27c55e38f52ba6b7764
parent: 242694a4c8e03523c976ddb749988abb7749460c
author: Andreas Schlick <[email protected]>
date: Thu Sep 13 15:44:50 EDT 2012
Fix compilation on non-Windows x86-32 w/ -msse. cpusupport.h used __cpuid() from the Windows specific header file intrin.h which is not available under gcc. But we can use __get_cpuid() from cpuid.h instead.
--- a/src/cpusupport.h
+++ b/src/cpusupport.h
@@ -32,7 +32,9 @@
# if !defined(__SSE__) || defined(_M_X64) || defined(__amd64__)
# define query_cpu_support() 0
#else
-# include <intrin.h>
+
+#if defined WIN32 || defined _WIN32
+#include <intrin.h>
static inline int query_cpu_support(void)
{
int buffer[4];
@@ -43,5 +45,19 @@
# endif
;
}
+#else
+#include <cpuid.h>
+static inline int query_cpu_support(void)
+{
+ unsigned int eax, ebx, ecx, edx=0;
+ __get_cpuid(1, &eax, &ebx, &ecx, &edx);
+ return ((edx & 1<<25) == 0) /*SSE*/
+#ifdef __SSE2__
+ + ((edx & 1<<26) == 0) /*SSE2*/
+#endif
+ ;
+}
+#endif
+
# endif
#endif