Commit f942343d authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Improve x86 cpuid

There is no need for hoops around EBX for non-PIC code.
parent 35a45488
......@@ -105,28 +105,21 @@ void vlc_CPU_init (void)
bool b_amd;
/* Needed for x86 CPU capabilities detection */
# if defined( __x86_64__ )
# define cpuid( reg ) \
asm volatile ( "cpuid\n\t" \
: "=a" ( i_eax ), \
"=b" ( i_ebx ), \
"=c" ( i_ecx ), \
"=d" ( i_edx ) \
: "a" ( reg ) \
: "cc" );
# else
# define cpuid( reg ) \
asm volatile ( "push %%ebx\n\t" \
"cpuid\n\t" \
"movl %%ebx,%1\n\t" \
"pop %%ebx\n\t" \
: "=a" ( i_eax ), \
"=r" ( i_ebx ), \
"=c" ( i_ecx ), \
"=d" ( i_edx ) \
: "a" ( reg ) \
: "cc" );
# endif
# if defined (__i386__) && defined (__PIC__)
# define cpuid(reg) \
asm volatile ("xchgl %%ebx,%1\n\t" \
"cpuid\n\t" \
"xchgl %%ebx,%1\n\t" \
: "=a" (i_eax), "=r" (i_ebx), "=c" (i_ecx), "=d" (i_edx) \
: "a" (reg) \
: "cc");
# else
# define cpuid(reg) \
asm volatile ("cpuid\n\t" \
: "=a" (i_eax), "=b" (i_ebx), "=c" (i_ecx), "=d" (i_edx) \
: "a" (reg) \
: "cc");
# endif
/* Check if the OS really supports the requested instructions */
# if defined (__i386__) && !defined (__i486__) && !defined (__i586__) \
&& !defined (__i686__) && !defined (__pentium4__) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment