X-Git-Url: https://git.videolan.org/gitweb.cgi/vlc.git/?p=vlc.git;p=vlc.git;a=blobdiff_plain;f=src%2Fmisc%2Fcpu.c;h=c77b2ec24ee3364166b0caff9f833acf1d5a94e3;hp=bfaf139ed4ffdfcaa7566681e30bb3acb84da0b4;hb=c14e42d7cf8e5b1944888472f750b91e1766ac8c;hpb=c051e6729843bbb6edf6b3ce88d38a02b4724563 diff --git a/src/misc/cpu.c b/src/misc/cpu.c index bfaf139ed4..c77b2ec24e 100644 --- a/src/misc/cpu.c +++ b/src/misc/cpu.c @@ -64,20 +64,7 @@ uint32_t CPUCapabilities( void ) { volatile uint32_t i_capabilities = CPU_CAPABILITY_NONE; -#if defined(__APPLE__) && (defined(__ppc__) || defined(__ppc64__)) - int selectors[2] = { CTL_HW, HW_VECTORUNIT }; - int i_has_altivec = 0; - size_t i_length = sizeof( i_has_altivec ); - int i_error = sysctl( selectors, 2, &i_has_altivec, &i_length, NULL, 0); - - i_capabilities |= CPU_CAPABILITY_FPU; - - if( i_error == 0 && i_has_altivec != 0 ) - i_capabilities |= CPU_CAPABILITY_ALTIVEC; - - return i_capabilities; - -#elif defined( __i386__ ) || defined( __x86_64__ ) +#if defined( __i386__ ) || defined( __x86_64__ ) volatile unsigned int i_eax, i_ebx, i_ecx, i_edx; volatile bool b_amd; @@ -131,12 +118,7 @@ uint32_t CPUCapabilities( void ) : "cc" ); if( i_eax == i_ebx ) - { -# if defined( CAN_COMPILE_SSE ) || defined ( CAN_COMPILE_3DNOW ) - signal( SIGILL, pf_sigill ); -# endif - return i_capabilities; - } + goto out; # else /* x86_64 supports cpuid instruction, so we dont need to check it */ # endif @@ -147,12 +129,7 @@ uint32_t CPUCapabilities( void ) cpuid( 0x00000000 ); if( !i_eax ) - { -# if defined( CAN_COMPILE_SSE ) || defined ( CAN_COMPILE_3DNOW ) - signal( SIGILL, pf_sigill ); -# endif - return i_capabilities; - } + goto out; /* FIXME: this isn't correct, since some 486s have cpuid */ i_capabilities |= CPU_CAPABILITY_586; @@ -165,12 +142,7 @@ uint32_t CPUCapabilities( void ) cpuid( 0x00000001 ); if( ! (i_edx & 0x00800000) ) - { -# if defined( CAN_COMPILE_SSE ) || defined ( CAN_COMPILE_3DNOW ) - signal( SIGILL, pf_sigill ); -# endif - return i_capabilities; - } + goto out; i_capabilities |= CPU_CAPABILITY_MMX; @@ -220,12 +192,7 @@ uint32_t CPUCapabilities( void ) cpuid( 0x80000000 ); if( i_eax < 0x80000001 ) - { -# if defined( CAN_COMPILE_SSE ) || defined ( CAN_COMPILE_3DNOW ) - signal( SIGILL, pf_sigill ); -# endif - return i_capabilities; - } + goto out; /* list these additional capabilities */ cpuid( 0x80000001 ); @@ -254,18 +221,27 @@ uint32_t CPUCapabilities( void ) i_capabilities |= CPU_CAPABILITY_MMXEXT; } +out: # if defined( CAN_COMPILE_SSE ) || defined ( CAN_COMPILE_3DNOW ) signal( SIGILL, pf_sigill ); # endif - return i_capabilities; #elif defined( __powerpc__ ) || defined( __ppc__ ) || defined( __ppc64__ ) -# ifdef CAN_COMPILE_ALTIVEC - void (*pf_sigill) (int) = signal( SIGILL, SigHandler ); - i_capabilities |= CPU_CAPABILITY_FPU; +# if defined(__APPLE__) + int selectors[2] = { CTL_HW, HW_VECTORUNIT }; + int i_has_altivec = 0; + size_t i_length = sizeof( i_has_altivec ); + int i_error = sysctl( selectors, 2, &i_has_altivec, &i_length, NULL, 0); + + if( i_error == 0 && i_has_altivec != 0 ) + i_capabilities |= CPU_CAPABILITY_ALTIVEC; + +# elif defined( CAN_COMPILE_ALTIVEC ) + void (*pf_sigill) (int) = signal( SIGILL, SigHandler ); + i_illegal = 0; if( setjmp( env ) == 0 ) @@ -277,31 +253,21 @@ uint32_t CPUCapabilities( void ) } if( i_illegal == 0 ) - { i_capabilities |= CPU_CAPABILITY_ALTIVEC; - } signal( SIGILL, pf_sigill ); # else (void)SigHandler; /* Don't complain about dead code here */ # endif - return i_capabilities; - #elif defined( __sparc__ ) - i_capabilities |= CPU_CAPABILITY_FPU; - return i_capabilities; #elif defined( _MSC_VER ) && !defined( UNDER_CE ) i_capabilities |= CPU_CAPABILITY_FPU; - return i_capabilities; - -#else - /* default behaviour */ - return i_capabilities; #endif + return i_capabilities; } /*****************************************************************************