Re: [PATCH] fix 2.4.22-pre broken x86 math-emu

Marcelo Tosatti (marcelo@conectiva.com.br)
Wed, 2 Jul 2003 10:52:02 -0300 (BRT)


I'm no GCC nor asm guru, so, Alan?

On Tue, 1 Jul 2003, Erik Andersen wrote:

> As of today's "fix up gcc 3.3 bits" patch [1], x86 math emulation
> is now even more broken, since this latest patch has added some
> mismatched quotes while still failing to address the actual
> problems preventing this code from compiling with gcc 3.3.
>
> This patch, first sent to you on Jun 21st, fixes the missing
> semicolons and missing quotes in the x86 math-emu code, allowing
> it to compile with gcc 3.3. I have updated things to also fix
> the mismatched quotes that were added today. Unlike the patch
> you applied earlier today, my patch is actually tested...
>
> Please apply,
>
> -Erik
>
> [1] /pub/linux/kernel/v2.4/testing/cset/cset-alan@lxorguk.ukuu.org.uk|ChangeSet|20030701183359|14011.txt">http://www.kernel.org/diff/diffview.cgi?file=/pub/linux/kernel/v2.4/testing/cset/cset-alan@lxorguk.ukuu.org.uk|ChangeSet|20030701183359|14011.txt
>
> --
> Erik B. Andersen http://codepoet-consulting.com/
> --This message was written using 73% post-consumer electrons--
>
>
> --- linux/arch/i386/math-emu/poly.h.orig 2003-07-01 20:39:49.000000000 -0600
> +++ linux/arch/i386/math-emu/poly.h 2003-07-01 20:39:57.000000000 -0600
> @@ -64,7 +64,7 @@
> const unsigned long arg2)
> {
> int retval;
> - asm volatile ("mull %2; movl %%edx,%%eax" \
> + asm volatile ("mull %2; movl %%edx,%%eax; " \
> :"=a" (retval) \
> :"0" (arg1), "g" (arg2) \
> :"dx");
> @@ -75,11 +75,11 @@
> /* Add the 12 byte Xsig x2 to Xsig dest, with no checks for overflow. */
> static inline void add_Xsig_Xsig(Xsig *dest, const Xsig *x2)
> {
> - asm volatile ("movl %1,%%edi; movl %2,%%esi;" \
> - movl (%%esi),%%eax; addl %%eax,(%%edi);" \
> - movl 4(%%esi),%%eax; adcl %%eax,4(%%edi);" \
> - movl 8(%%esi),%%eax; adcl %%eax,8(%%edi);"
> - :"=g" (*dest):"g" (dest), "g" (x2)
> + asm volatile ("movl %1,%%edi; movl %2,%%esi; " \
> + "movl (%%esi),%%eax; addl %%eax,(%%edi); " \
> + "movl 4(%%esi),%%eax; adcl %%eax,4(%%edi); " \
> + "movl 8(%%esi),%%eax; adcl %%eax,8(%%edi); " \
> + :"=g" (*dest):"g" (dest), "g" (x2) \
> :"ax","si","di");
> }
>
> @@ -90,19 +90,19 @@
> problem, but keep fingers crossed! */
> static inline void add_two_Xsig(Xsig *dest, const Xsig *x2, long int *exp)
> {
> - asm volatile ("movl %2,%%ecx; movl %3,%%esi;
> - movl (%%esi),%%eax; addl %%eax,(%%ecx);
> - movl 4(%%esi),%%eax; adcl %%eax,4(%%ecx);
> - movl 8(%%esi),%%eax; adcl %%eax,8(%%ecx);
> - jnc 0f;
> - rcrl 8(%%ecx); rcrl 4(%%ecx); rcrl (%%ecx)
> - movl %4,%%ecx; incl (%%ecx)
> - movl $1,%%eax; jmp 1f;
> - 0: xorl %%eax,%%eax;
> - 1:"
> - :"=g" (*exp), "=g" (*dest)
> - :"g" (dest), "g" (x2), "g" (exp)
> - :"cx","si","ax");
> + asm volatile ("movl %2,%%ecx; movl %3,%%esi; " \
> + "movl (%%esi),%%eax; addl %%eax,(%%ecx); " \
> + "movl 4(%%esi),%%eax; adcl %%eax,4(%%ecx); " \
> + "movl 8(%%esi),%%eax; adcl %%eax,8(%%ecx); " \
> + "jnc 0f; " \
> + "rcrl 8(%%ecx); rcrl 4(%%ecx); rcrl (%%ecx); " \
> + "movl %4,%%ecx; incl (%%ecx); " \
> + "movl $1,%%eax; jmp 1f; " \
> + "0: xorl %%eax,%%eax; " \
> + "1: " \
> + :"=g" (*exp), "=g" (*dest) \
> + :"g" (dest), "g" (x2), "g" (exp) \
> + :"cx","si","ax");
> }
>
>
> @@ -110,11 +110,11 @@
> /* This is faster in a loop on my 386 than using the "neg" instruction. */
> static inline void negate_Xsig(Xsig *x)
> {
> - asm volatile("movl %1,%%esi; "
> - "xorl %%ecx,%%ecx; "
> - "movl %%ecx,%%eax; subl (%%esi),%%eax; movl %%eax,(%%esi); "
> - "movl %%ecx,%%eax; sbbl 4(%%esi),%%eax; movl %%eax,4(%%esi); "
> - "movl %%ecx,%%eax; sbbl 8(%%esi),%%eax; movl %%eax,8(%%esi); "
> + asm volatile("movl %1,%%esi; " \
> + "xorl %%ecx,%%ecx; " \
> + "movl %%ecx,%%eax; subl (%%esi),%%eax; movl %%eax,(%%esi); " \
> + "movl %%ecx,%%eax; sbbl 4(%%esi),%%eax; movl %%eax,4(%%esi); " \
> + "movl %%ecx,%%eax; sbbl 8(%%esi),%%eax; movl %%eax,8(%%esi); " \
> :"=g" (*x):"g" (x):"si","ax","cx");
> }
>
>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/