$NetBSD: patch-ae,v 1.4 2006/07/04 06:27:40 wiz Exp $ --- include/allegro/platform/al386gcc.h.orig 2005-03-09 13:49:46.000000000 -0800 +++ include/allegro/platform/al386gcc.h 2006-07-01 05:39:49.000000000 -0700 @@ -208,29 +208,29 @@ */ AL_INLINE(fixed, fixmul, (fixed x, fixed y), { - fixed edx __attribute__ ((__unused__)); + long edx; fixed result; __PRECALCULATE_CONSTANTS(x / 65536.0 * y) { __asm__ ( - " movl %2, %%eax ; " - " imull %3 ; " /* do the multiply */ - " shrdl $16, %%edx, %%eax ; " + " movl %1, %%eax ; " + " imull %2 ; " /* do the multiply */ + " shrdl $16, %5, %%eax ; " - " sarl $15, %%edx ; " /* check for overflow */ + " sarl $15, %5 ; " /* check for overflow */ " jz 0f ; " - " cmpl $-1, %%edx ; " + " cmpl $-1, %5 ; " " 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,13 +238,13 @@ " 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) + "m" (allegro_errno), + "d" (edx) : "%cc", "memory" /* clobbers flags and errno */ );