Ticket #1107: patch-poly

File patch-poly, 1.9 KB (added by leimy@…, 20 years ago)

New patchfile fixing the inline assembly in poly.h

Line 
1--- fpu/poly.h  Fri Oct  5 22:53:46 2001
2+++ fpu/poly_monkey.h   Sun Nov  2 23:23:20 2003
3@@ -114,10 +114,10 @@
4     }
5   dest->msw += x2->msw;
6 #else
7-  asm volatile ("movl %1,%%edi; movl %2,%%esi;
8-                 movl (%%esi),%%eax; addl %%eax,(%%edi);
9-                 movl 4(%%esi),%%eax; adcl %%eax,4(%%edi);
10-                 movl 8(%%esi),%%eax; adcl %%eax,8(%%edi);"
11+  asm volatile ("movl %1,%%edi; movl %2,%%esi;"
12+                "movl (%%esi),%%eax; addl %%eax,(%%edi);"
13+                "movl 4(%%esi),%%eax; adcl %%eax,4(%%edi);"
14+                "movl 8(%%esi),%%eax; adcl %%eax,8(%%edi);"
15                  :"=g" (*dest):"g" (dest), "g" (x2)
16                  :"ax","si","di");
17 #endif
18@@ -168,16 +168,16 @@
19 /* Note: the constraints in the asm statement didn't always work properly
20    with gcc 2.5.8.  Changing from using edi to using ecx got around the
21    problem, but keep fingers crossed! */
22-  asm volatile ("movl %2,%%ecx; movl %3,%%esi;
23-                 movl (%%esi),%%eax; addl %%eax,(%%ecx);
24-                 movl 4(%%esi),%%eax; adcl %%eax,4(%%ecx);
25-                 movl 8(%%esi),%%eax; adcl %%eax,8(%%ecx);
26-                 jnc 0f;
27-                rcrl 8(%%ecx); rcrl 4(%%ecx); rcrl (%%ecx)
28-                 movl %4,%%ecx; incl (%%ecx)
29-                 movl $1,%%eax; jmp 1f;
30-                 0: xorl %%eax,%%eax;
31-                 1:"
32+  asm volatile ("movl %2,%%ecx; movl %3,%%esi;"
33+                "movl (%%esi),%%eax; addl %%eax,(%%ecx);"
34+                "movl 4(%%esi),%%eax; adcl %%eax,4(%%ecx);"
35+                "movl 8(%%esi),%%eax; adcl %%eax,8(%%ecx);"
36+                " jnc 0f;"
37+                "rcrl 8(%%ecx); rcrl 4(%%ecx); rcrl (%%ecx)"
38+                ": movl %4,%%ecx; incl (%%ecx)"
39+                 "movl $1,%%eax; jmp 1f;"
40+                 "0: xorl %%eax,%%eax;"
41+                 1:
42                :"=g" (*exp), "=g" (*dest)
43                :"g" (dest), "g" (x2), "g" (exp)
44                :"cx","si","ax");