Blob Blame History Raw
diff -up allegro-4.2.2/include/allegro/platform/al386gcc.h~ allegro-4.2.2/include/allegro/platform/al386gcc.h
--- allegro-4.2.2/include/allegro/platform/al386gcc.h~	2008-01-21 19:18:34.000000000 +0100
+++ allegro-4.2.2/include/allegro/platform/al386gcc.h	2008-01-21 19:18:34.000000000 +0100
@@ -208,14 +208,13 @@ AL_INLINE(fixed, fixsub, (fixed x, fixed
  */
 AL_INLINE(fixed, fixmul, (fixed x, fixed y),
 {
-   fixed edx __attribute__ ((__unused__));
    fixed result;
 
    __PRECALCULATE_CONSTANTS(x / 65536.0 * y)
    {
       __asm__ (
-	 "  movl %2, %%eax ; "
-	 "  imull %3 ; "                  /* do the multiply */
+	 "  movl %1, %%eax ; "
+	 "  imull %2 ; "                  /* do the multiply */
 	 "  shrdl $16, %%edx, %%eax ; "
 
 	 "  sarl $15, %%edx ; "           /* check for overflow */
@@ -223,14 +222,14 @@ AL_INLINE(fixed, fixmul, (fixed x, fixed
 	 "  cmpl $-1, %%edx ; "
 	 "  je 0f ; "
 
-	 "  movl %5, %%eax ; "            /* on overflow, set errno */
-	 "  movl %4, (%%eax) ; "
+	 "  movl %4, %%eax ; "            /* on overflow, set errno */
+	 "  movl %3, (%%eax) ; "
 	 "  movl $0x7FFFFFFF, %%eax ; "   /* and return MAXINT */
-	 "  cmpl $0, %2 ; "
+	 "  cmpl $0, %1 ; "
 	 "  jge 1f ; "
 	 "  negl %%eax ; "
 	 " 1: "
-	 "  cmpl $0, %3 ; "
+	 "  cmpl $0, %2 ; "
 	 "  jge 0f ; "
 	 "  negl %%eax ; "
 
@@ -238,15 +237,14 @@ AL_INLINE(fixed, fixmul, (fixed x, fixed
 
 	 " 0: "                           /* finished */
 
-      : "=&a" (result),                   /* the result has to go in eax */
-	"=&d" (edx)                       /* reliably reserve edx */
+      : "=&a" (result)                    /* the result has to go in eax */
 
       : "mr" (x),                         /* x and y can be regs or mem */
 	"mr" (y),
 	"i" (ERANGE),
 	"m" (allegro_errno)
 
-      : "%cc", "memory"                   /* clobbers flags and errno */
+      : "%cc", "memory", "edx"            /* clobbers flags, errno and edx */
       );
 
       return result;