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:
31
libavcodec/i386/cpuid.s
Normal file
31
libavcodec/i386/cpuid.s
Normal 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
|
@@ -4,18 +4,8 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "../dsputil.h"
|
#include "../dsputil.h"
|
||||||
|
|
||||||
/* ebx saving is necessary for PIC. gcc seems unable to see it alone */
|
/* need this external function to solve -fPIC ebx issues ! */
|
||||||
static inline void cpuid(int index, int *eax, int *ebx, int *ecx, int *edx)
|
extern 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");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Function to test if multimedia instructions are supported... */
|
/* Function to test if multimedia instructions are supported... */
|
||||||
int mm_support(void)
|
int mm_support(void)
|
||||||
|
Reference in New Issue
Block a user