Browse Source

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

Originally committed as revision 25 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Fabrice Bellard 24 years ago
parent
commit
96f4e5135c
2 changed files with 33 additions and 12 deletions
  1. +31
    -0
      libavcodec/i386/cpuid.s
  2. +2
    -12
      libavcodec/i386/cputest.c

+ 31
- 0
libavcodec/i386/cpuid.s 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

+ 2
- 12
libavcodec/i386/cputest.c View File

@@ -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 */
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... */ /* Function to test if multimedia instructions are supported... */
int mm_support(void) int mm_support(void)


Loading…
Cancel
Save