mirror of https://github.com/mpv-player/mpv
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:
parent
0e70761fd9
commit
7fcdc66fd1
20
cpudetect.c
20
cpudetect.c
|
@ -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){
|
||||||
|
|
Loading…
Reference in New Issue