added external cpuid code to solve -fPIC and gcc unclear constraints problems

Originally committed as revision 25 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Fabrice Bellard 2001-07-30 23:51:20 +00:00
parent 0725406c94
commit 96f4e5135c
2 changed files with 33 additions and 12 deletions

31
libavcodec/i386/cpuid.s Normal file
View File

@ -0,0 +1,31 @@
.file "cpuid.s"
.version "01.01"
gcc2_compiled.:
.text
.align 4
.globl cpuid
.type cpuid,@function
cpuid:
pushl %ebp
movl %esp,%ebp
pushl %edi
pushl %esi
pushl %ebx
movl 8(%ebp),%eax
movl 12(%ebp),%edi
movl 24(%ebp),%esi
cpuid
movl %eax,(%edi)
movl 16(%ebp),%eax
movl %ebx,(%eax)
movl 20(%ebp),%eax
movl %ecx,(%eax)
movl %edx,(%esi)
popl %ebx
popl %esi
popl %edi
leave
ret
.Lfe1:
.size cpuid,.Lfe1-cpuid
.align 4

View File

@ -4,18 +4,8 @@
#include <stdlib.h>
#include "../dsputil.h"
/* ebx saving is necessary for PIC. gcc seems unable to see it alone */
static inline void cpuid(int index, int *eax, int *ebx, int *ecx, int *edx)
{
asm ("pushl %%ebx\n\t"
"cpuid\n\t"
"movl %%ebx, %1\n\t"
"popl %%ebx\n\t"
: "=a" (*eax), "=m" (*ebx),
"=c" (*ecx), "=d" (*edx)
: "a" (index)
: "cc");
}
/* need this external function to solve -fPIC ebx issues ! */
extern void cpuid(int index, int *eax, int *ebx, int *ecx, int *edx);
/* Function to test if multimedia instructions are supported... */
int mm_support(void)