fix 2.4.22-pre broken x86 math-emu
PATCH 1/1 fix 2.4.22-pre broken x86 math-emu
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
--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--
arch/i386/math-emu/poly.h renamed from arch/i386/math-emu/poly.h.orig +24 -24
@@ -64,7 +64,7 @@ const unsigned long arg2) {int retval; - asmvolatile ("mull %2; movl %%edx,%%eax" \ + asmvolatile ("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) { - asmvolatile ("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) + asmvolatile ("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) { - asmvolatile ("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" ); + asmvolatile ("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) { - asmvolatile ("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); " + asmvolatile ("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" ); }
I'm no GCC nor asm guru, so, Alan?
Quoted 101 lines · Erik Andersen
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
--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--arch/i386/math-emu/poly.h renamed from arch/i386/math-emu/poly.h.orig +24
-24@@ -64,7 +64,7 @@ const unsigned long arg2) {int retval; - asmvolatile ("mull %2; movl %%edx,%%eax" \ + asmvolatile ("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) { - asmvolatile ("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) + asmvolatile ("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) { - asmvolatile ("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" ); + asmvolatile ("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) { - asmvolatile ("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); " + asmvolatile ("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" ); }
Quoted 3 lines · Marcelo Tosatti
I'm no GCC nor asm guru, so, Alan?
This does not change even one asm instruction. This merely changes the quoting and semicolons...
-Erik
--
Erik B. Andersen http://codepoet-consulting.com/
--This message was written using 73% post-consumer electrons--
Quoted 7 lines · Erik Andersen
Quoted 3 lines · Marcelo Tosatti
I'm no GCC nor asm guru, so, Alan?
This does not change even one asm instruction. This merely changes the quoting and semicolons...
Erik is right - I sent you a buggy fix, then a correct fix, but his cleanup is nicer