diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2001-07-30 23:51:20 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2001-07-30 23:51:20 +0000 |
commit | 96f4e5135c8fa1361c8e54dfcab4d4132bd68efd (patch) | |
tree | 73f0309c11045570183c82c4e8c8b765041e2932 | |
parent | 0725406c94732dc2ff34fbac26808f76cc9b30d1 (diff) | |
download | ffmpeg-96f4e5135c8fa1361c8e54dfcab4d4132bd68efd.tar.gz |
added external cpuid code to solve -fPIC and gcc unclear constraints problems
Originally committed as revision 25 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/i386/cpuid.s | 31 | ||||
-rw-r--r-- | libavcodec/i386/cputest.c | 14 |
2 files changed, 33 insertions, 12 deletions
diff --git a/libavcodec/i386/cpuid.s b/libavcodec/i386/cpuid.s new file mode 100644 index 0000000000..c25367e0d5 --- /dev/null +++ b/libavcodec/i386/cpuid.s @@ -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 diff --git a/libavcodec/i386/cputest.c b/libavcodec/i386/cputest.c index 78f36440f1..3de21a708b 100644 --- a/libavcodec/i386/cputest.c +++ b/libavcodec/i386/cputest.c @@ -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) |