added external cpuid code to solve -fPIC and gcc unclear constraints problems
authorFabrice Bellard <fabrice@bellard.org>
Mon, 30 Jul 2001 23:51:20 +0000 (23:51 +0000)
committerFabrice Bellard <fabrice@bellard.org>
Mon, 30 Jul 2001 23:51:20 +0000 (23:51 +0000)
Originally committed as revision 25 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/i386/cpuid.s [new file with mode: 0644]
libavcodec/i386/cputest.c

diff --git a/libavcodec/i386/cpuid.s b/libavcodec/i386/cpuid.s
new file mode 100644 (file)
index 0000000..c25367e
--- /dev/null
@@ -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
index 78f3644..3de21a7 100644 (file)
@@ -4,18 +4,8 @@
 #include <stdlib.h>
 #include "../dsputil.h"
 
 #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)
 
 /* Function to test if multimedia instructions are supported...  */
 int mm_support(void)