Mercurial > mplayer.hg
changeset 26061:6ede4d6afa41
Enable SSE detection on OS/2.
patch by KO Myung-Hun, komh chollian net
author | diego |
---|---|
date | Sun, 24 Feb 2008 18:09:28 +0000 |
parents | fd7888eb149b |
children | f012754e267c |
files | cpudetect.c |
diffstat | 1 files changed, 35 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/cpudetect.c Sun Feb 24 18:04:34 2008 +0000 +++ b/cpudetect.c Sun Feb 24 18:09:28 2008 +0000 @@ -33,6 +33,11 @@ #include <windows.h> #endif +#ifdef __OS2__ +#define INCL_DOS +#include <os2.h> +#endif + #ifdef __AMIGAOS4__ #include <proto/exec.h> #endif @@ -183,7 +188,8 @@ /* FIXME: Does SSE2 need more OS support, too? */ #if defined(__linux__) || defined(__FreeBSD__) || defined(__FreeBSD_kernel__) \ || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) \ - || defined(__APPLE__) || defined(__CYGWIN__) || defined(__MINGW32__) + || defined(__APPLE__) || defined(__CYGWIN__) || defined(__MINGW32__) \ + || defined(__OS2__) if (caps->hasSSE) check_os_katmai_support(); if (!caps->hasSSE) @@ -321,6 +327,24 @@ } #endif /* WIN32 */ +#ifdef __OS2__ +ULONG _System os2_sig_handler_sse( PEXCEPTIONREPORTRECORD p1, + PEXCEPTIONREGISTRATIONRECORD p2, + PCONTEXTRECORD p3, + PVOID p4 ) +{ + if(p1->ExceptionNum == XCPT_ILLEGAL_INSTRUCTION){ + mp_msg(MSGT_CPUDETECT, MSGL_V, "SIGILL, "); + + p3->ctx_RegEip += 3; + gCpuCaps.hasSSE = 0; + + return XCPT_CONTINUE_EXECUTION; + } + return XCPT_CONTINUE_SEARCH; +} +#endif + /* If we're running on a processor that can do SSE, let's see if we * are allowed to or not. This will catch 2.4.0 or later kernels that * haven't been configured for a Pentium III but are running on one, @@ -391,6 +415,16 @@ if ( gCpuCaps.hasSSE ) mp_msg(MSGT_CPUDETECT,MSGL_V, "yes.\n" ); else mp_msg(MSGT_CPUDETECT,MSGL_V, "no!\n" ); } +#elif defined(__OS2__) + EXCEPTIONREGISTRATIONRECORD RegRec = { 0, &os2_sig_handler_sse }; + if ( gCpuCaps.hasSSE ) { + mp_msg(MSGT_CPUDETECT,MSGL_V, "Testing OS support for SSE... " ); + DosSetExceptionHandler( &RegRec ); + __asm __volatile ("xorps %xmm0, %xmm0"); + DosUnsetExceptionHandler( &RegRec ); + if ( gCpuCaps.hasSSE ) mp_msg(MSGT_CPUDETECT,MSGL_V, "yes.\n" ); + else mp_msg(MSGT_CPUDETECT,MSGL_V, "no!\n" ); + } #elif defined(__linux__) #if defined(_POSIX_SOURCE) struct sigaction saved_sigill;