Update of /cvsroot/mplayer/main In directory mail:/var/tmp.root/cvs-serv9120 Modified Files: cpudetect.c Log Message: Ok, here is a better patch, which even adds a fix to compile it on older NetBSD systems, there was a ; missing. patch by Bernd Ernesti <mplayer@lists.veego.de> Index: cpudetect.c =================================================================== RCS file: /cvsroot/mplayer/main/cpudetect.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- cpudetect.c 7 Dec 2002 21:04:54 -0000 1.22 +++ cpudetect.c 23 Dec 2002 01:24:42 -0000 1.23 @@ -16,7 +16,8 @@ #ifdef __NetBSD__ #include <sys/param.h> -#include <setjmp.h> +#include <sys/sysctl.h> +#include <machine/cpu.h> #endif #ifdef __FreeBSD__ @@ -242,15 +243,6 @@ #undef CPUID_STEPPING -#ifdef __NetBSD__ -jmp_buf sseCheckEnv; - -void sseCheckHandler(int i) -{ - longjmp(sseCheckEnv, 1); -} -#endif - #if defined(__linux__) && defined(_POSIX_SOURCE) && defined(X86_FXSR_MAGIC) static void sigill_handler_sse( int signal, struct sigcontext sc ) { @@ -308,33 +300,37 @@ gCpuCaps.hasSSE=0; #elif defined(__NetBSD__) -#if __NetBSD_Version__ >= 105260000 - if ( gCpuCaps.hasSSE ) { - void (*oldHandler)(int); - - mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " ); - - oldHandler = signal(SIGILL, sseCheckHandler); - if (setjmp(sseCheckEnv)) { - gCpuCaps.hasSSE = 0; - } else { - __asm__ __volatile__ ( - "subl $0x10, %esp \n" - "movups %xmm0, (%esp) \n" - "emms \n" - "addl $0x10, %esp \n" - ); - } - signal(SIGILL, oldHandler); - - if ( gCpuCaps.hasSSE ) { - mp_msg(MSGT_CPUDETECT,MSGL_V, "no!\n" ); - } else { - mp_msg(MSGT_CPUDETECT,MSGL_V, "yes!\n" ); - } +#if __NetBSD_Version__ >= 105250000 + int has_sse, has_sse2, ret, mib[2]; + size_t varlen; + + mib[0] = CTL_MACHDEP; + mib[1] = CPU_SSE; + varlen = sizeof(has_sse); + + mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " ); + ret = sysctl(mib, 2, &has_sse, &varlen, NULL, 0); + if (ret < 0 || !has_sse) { + gCpuCaps.hasSSE=0; + mp_msg(MSGT_CPUDETECT,MSGL_V, "no!\n" ); + } else { + gCpuCaps.hasSSE=1; + mp_msg(MSGT_CPUDETECT,MSGL_V, "yes!\n" ); + } + + mib[1] = CPU_SSE2; + varlen = sizeof(has_sse2); + mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE2... " ); + ret = sysctl(mib, 2, &has_sse2, &varlen, NULL, 0); + if (ret < 0 || !has_sse2) { + gCpuCaps.hasSSE2=0; + mp_msg(MSGT_CPUDETECT,MSGL_V, "no!\n" ); + } else { + gCpuCaps.hasSSE2=1; + mp_msg(MSGT_CPUDETECT,MSGL_V, "yes!\n" ); } #else - gCpuCaps.hasSSE = 0 + gCpuCaps.hasSSE = 0; mp_msg(MSGT_CPUDETECT,MSGL_WARN, "No OS support for SSE, disabling to be safe.\n" ); #endif #elif defined(__linux__)