Sync cpuid detection code with libavcodec: assume it is always available on x86_64

git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29069 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
reimar 2009-03-27 18:48:47 +00:00
parent 0e70761fd9
commit 7fcdc66fd1
1 changed files with 7 additions and 13 deletions

View File

@ -44,20 +44,15 @@ static void check_os_katmai_support( void );
// return TRUE if cpuid supported // return TRUE if cpuid supported
static int has_cpuid(void) static int has_cpuid(void)
{ {
long a, c;
// code from libavcodec: // code from libavcodec:
#if ARCH_X86_64 #if ARCH_X86_64
#define PUSHF "pushfq\n\t" return 1;
#define POPF "popfq\n\t"
#else #else
#define PUSHF "pushfl\n\t" long a, c;
#define POPF "popfl\n\t"
#endif
__asm__ volatile ( __asm__ volatile (
/* See if CPUID instruction is supported ... */ /* See if CPUID instruction is supported ... */
/* ... Get copies of EFLAGS into eax and ecx */ /* ... Get copies of EFLAGS into eax and ecx */
PUSHF "pushfl\n\t"
"pop %0\n\t" "pop %0\n\t"
"mov %0, %1\n\t" "mov %0, %1\n\t"
@ -65,19 +60,18 @@ static int has_cpuid(void)
/* to the EFLAGS reg */ /* to the EFLAGS reg */
"xor $0x200000, %0\n\t" "xor $0x200000, %0\n\t"
"push %0\n\t" "push %0\n\t"
POPF "popfl\n\t"
/* ... Get the (hopefully modified) EFLAGS */ /* ... Get the (hopefully modified) EFLAGS */
PUSHF "pushfl\n\t"
"pop %0\n\t" "pop %0\n\t"
: "=a" (a), "=c" (c) : "=a" (a), "=c" (c)
: :
: "cc" : "cc"
); );
#undef PUSHF
#undef POPF
return a != c; return a != c;
#endif
} }
static void static void
@ -277,7 +271,7 @@ static void sigill_handler_sse( int signal, struct sigcontext sc )
} }
#endif /* __linux__ && _POSIX_SOURCE */ #endif /* __linux__ && _POSIX_SOURCE */
#if defined(__MINGW32__) || defined(__CYGWIN__) #if (defined(__MINGW32__) || defined(__CYGWIN__)) && !ARCH_X86_64
LONG CALLBACK win32_sig_handler_sse(EXCEPTION_POINTERS* ep) LONG CALLBACK win32_sig_handler_sse(EXCEPTION_POINTERS* ep)
{ {
if(ep->ExceptionRecord->ExceptionCode==EXCEPTION_ILLEGAL_INSTRUCTION){ if(ep->ExceptionRecord->ExceptionCode==EXCEPTION_ILLEGAL_INSTRUCTION){