gst/gstcpu.c: Add workaround for gcc-3.2 generating bad code around the cpu detection...
authorDavid Schleef <ds@schleef.org>
Thu, 15 Apr 2004 03:20:23 +0000 (03:20 +0000)
committerDavid Schleef <ds@schleef.org>
Thu, 15 Apr 2004 03:20:23 +0000 (03:20 +0000)
Original commit message from CVS:
* gst/gstcpu.c: (gst_cpuid_i386): Add workaround for gcc-3.2
generating bad code around the cpu detection asm code.

ChangeLog
gst/gstcpu.c

index 81d1336..2e35ba6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-04-14  David Schleef  <ds@schleef.org>
+
+       * gst/gstcpu.c: (gst_cpuid_i386): Add workaround for gcc-3.2
+       generating bad code around the cpu detection asm code.
+
 2004-04-14  Thomas Vander Stichele  <thomas at apestaart dot org>
 
        * tools/gst-inspect.c: (print_element_info):
index 10d3e2f..279fd28 100644 (file)
@@ -69,7 +69,10 @@ gst_cpuid_i386 (int x, unsigned long *eax, unsigned long *ebx,
 {
   unsigned long regs[4];
 
-asm ("  cpuid\n" "  movl %%eax, %0\n" "  movl %%ebx, %1\n" "  movl %%ecx, %2\n" "  movl %%edx, %3\n":"=o" (regs[0]),
+  asm (
+      /* GCC-3.2 (and possibly others) don't clobber ebx properly,
+       * so we save/restore it directly. */
+"  pushl %%ebx\n" "  cpuid\n" "  movl %%eax, %0\n" "  movl %%ebx, %1\n" "  movl %%ecx, %2\n" "  movl %%edx, %3\n" "  popl %%ebx\n":"=o" (regs[0]),
       "=o" (regs[1]),
       "=o" (regs[2]), "=o" (regs[3])
 :    "a" (x)