X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fmisc%2Fcpu.c;h=3b0d278999938d58f9901aa9a9afba9181d3140c;hb=7e6c2325f169cfe06a8562b55a0832c26580c503;hp=d1b93249027eff250c47d2c03ce57aa45b552ef1;hpb=52943ce6dcaa19e2924846d2225176375f49b2c8;p=vlc diff --git a/src/misc/cpu.c b/src/misc/cpu.c index d1b9324902..3b0d278999 100644 --- a/src/misc/cpu.c +++ b/src/misc/cpu.c @@ -37,6 +37,9 @@ #ifndef WIN32 #include #include +#include +#else +#include #endif #include "libvlc.h" @@ -47,9 +50,9 @@ #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 ) @@ -65,14 +68,25 @@ static bool check_OS_capability( const char *psz_capability, pid_t pid ) 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 /***************************************************************************** @@ -113,18 +127,6 @@ uint32_t CPUCapabilities( void ) : "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__) @@ -269,6 +271,7 @@ out: pid_t pid = fork(); if( pid == 0 ) { + signal(SIGILL, SIG_DFL); asm volatile ("mtspr 256, %0\n\t" "vand %%v0, %%v0, %%v0" : @@ -308,7 +311,7 @@ const struct { 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" },