#ifndef WIN32
#include <unistd.h>
#include <sys/wait.h>
+#include <signal.h>
#else
#include <errno.h>
#endif
#if defined( __i386__ ) || defined( __x86_64__ ) || defined( __powerpc__ ) \
|| defined( __ppc__ ) || defined( __ppc64__ ) || defined( __powerpc64__ )
+# ifndef WIN32
static bool check_OS_capability( const char *psz_capability, pid_t pid )
{
-#ifndef WIN32
int status;
if( pid == -1 )
fprintf( stderr, " some optimizations will be disabled unless "
"you upgrade your OS\n" );
return false;
-#else
-# warning FIXME!
-# define fork() (errno = ENOSYS, -1)
- (void)pid;
- (void)psz_capability;
- return true;
-#endif
}
+
+# define check_capability(name, flag, code) \
+ do { \
+ pid_t pid = fork(); \
+ if( pid == 0 ) \
+ { \
+ signal(SIGILL, SIG_DFL); \
+ __asm__ __volatile__ ( code : : ); \
+ _exit(0); \
+ } \
+ if( check_OS_capability((name), pid )) \
+ i_capabilities |= (flag); \
+ } while(0)
+
+# else /* WIN32 */
+# define check_capability(name, flag, code) \
+ i_capabilities |= (flag);
+# endif
#endif
/*****************************************************************************
: "cc" );
# endif
/* Check if the OS really supports the requested instructions */
-# define check_capability(name, flag, code) \
- do { \
- pid_t pid = fork(); \
- if( pid == 0 ) \
- { \
- __asm__ __volatile__ ( code : : ); \
- _exit(0); \
- } \
- if( check_OS_capability((name), pid )) \
- i_capabilities |= (flag); \
- } while(0)
-
# if defined (__i386__) && !defined (__i486__) && !defined (__i586__) \
&& !defined (__i686__) && !defined (__pentium4__) \
&& !defined (__k6__) && !defined (__athlon__) && !defined (__k8__)
pid_t pid = fork();
if( pid == 0 )
{
+ signal(SIGILL, SIG_DFL);
asm volatile ("mtspr 256, %0\n\t"
"vand %%v0, %%v0, %%v0"
:
{ CPU_CAPABILITY_SSE, "sse" },
#endif
#if defined (__ppc__) || defined (__ppc64__) || defined (__powerpc__)
- { CPU_CAPABILITY_ALTIVEC, "altivec" },
+ { CPU_CAPABILITY_ALTIVEC, "altivec" },
#endif
#if defined (__arm__)
{ CPU_CAPABILITY_NEON, "arm_neon" },