[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#335881: numerix: FTBFS: Segfaults in tests



Florian Weimer a écrit :

You must also byte-code the final movl instruction, I'm afraid:
Sorry. Attached is the new diff file (with respect to the original 0.21 source).

--
Michel Quercia
23 rue de Montchapet, 21000 Dijon
http://michel.quercia.free.fr (maths)
http://pauillac.inria.fr/~quercia (informatique)
mailto:michel.quercia@prepas.org

diff -b -C 2 kernel/n/x86/add.S ../numerix-0.22/kernel/n/x86/add.S
*** kernel/n/x86/add.S	2005-03-18 17:31:38.000000000 +0100
--- ../numerix-0.22/kernel/n/x86/add.S	2005-12-06 23:28:13.000000000 +0100
***************
*** 985,993 ****
  #define BODY(x,y,z) \
            adcl  x(%ebx,%ecx,4), %eax; \
!           movl  y(%esi,%ecx,4), %edx; \
            movl  %eax, x(%edi,%ecx,4); \
!           adcl  y(%ebx,%ecx,4), %edx; \
            movl  z(%esi,%ecx,4), %eax; \
!           movl  %edx, y(%edi,%ecx,4)
  
          # boucle d addition déroulée pour 16 chiffres
--- 985,993 ----
  #define BODY(x,y,z) \
            adcl  x(%ebx,%ecx,4), %eax; \
!        /* movl  y(%esi,%ecx,4), %edx */ .byte 0x8B, 0x54, 0x8E, y; \
            movl  %eax, x(%edi,%ecx,4); \
!        /* adcl  y(%ebx,%ecx,4), %edx */ .byte 0x13, 0x54, 0x8B, y; \
            movl  z(%esi,%ecx,4), %eax; \
!        /* movl  %edx, y(%edi,%ecx,4) */ .byte 0x89, 0x54, 0x8f, y
  
          # boucle d addition déroulée pour 16 chiffres
***************
*** 1197,1205 ****
  #define BODY(x,y,z) \
            sbbl  x(%ebx,%ecx,4), %eax; \
!           movl  y(%esi,%ecx,4), %edx; \
            movl  %eax, x(%edi,%ecx,4); \
!           sbbl  y(%ebx,%ecx,4), %edx; \
            movl  z(%esi,%ecx,4), %eax; \
!           movl  %edx, y(%edi,%ecx,4)
  
          # boucle de soustraction déroulée pour 16 chiffres
--- 1197,1205 ----
  #define BODY(x,y,z) \
            sbbl  x(%ebx,%ecx,4), %eax; \
!       /*  movl  y(%esi,%ecx,4), %edx */ .byte 0x8B, 0x54, 0x8E, y; \
            movl  %eax, x(%edi,%ecx,4); \
!       /*  sbbl  y(%ebx,%ecx,4), %edx */ .byte 0x1B, 0x54, 0x8B, y; \
            movl  z(%esi,%ecx,4), %eax; \
!        /* movl  %edx, y(%edi,%ecx,4) */ .byte 0x89, 0x54, 0x8f, y
  
          # boucle de soustraction déroulée pour 16 chiffres
***************
*** 1342,1350 ****
  #define BODY(x,y,z) \
            adcl  x(%esi,%ecx,4), %eax; \
!           movl  y(%ebx,%ecx,4), %edx; \
            movl  %eax, x(%esi,%ecx,4); \
!           adcl  y(%esi,%ecx,4), %edx; \
            movl  z(%ebx,%ecx,4), %eax; \
!           movl  %edx, y(%esi,%ecx,4)
  
          # boucle d addition déroulée pour 16 chiffres
--- 1342,1350 ----
  #define BODY(x,y,z) \
            adcl  x(%esi,%ecx,4), %eax; \
!        /* movl  y(%ebx,%ecx,4), %edx */ .byte 0x8B, 0x54, 0x8B, y ; \
            movl  %eax, x(%esi,%ecx,4); \
!        /* adcl  y(%esi,%ecx,4), %edx */ .byte 0x13, 0x54, 0x8E, y; \
            movl  z(%ebx,%ecx,4), %eax; \
!        /* movl  %edx, y(%esi,%ecx,4) */ .byte 0x89, 0x54, 0x8e, y
  
          # boucle d addition déroulée pour 16 chiffres
***************
*** 1477,1485 ****
  #define BODY(x,y,z) \
            sbbl  x(%ebx,%ecx,4), %eax; \
!           movl  y(%esi,%ecx,4), %edx; \
            movl  %eax, x(%esi,%ecx,4); \
!           sbbl  y(%ebx,%ecx,4), %edx; \
            movl  z(%esi,%ecx,4), %eax; \
!           movl  %edx, y(%esi,%ecx,4)
  
          # boucle de soustraction déroulée pour 16 chiffres
--- 1477,1485 ----
  #define BODY(x,y,z) \
            sbbl  x(%ebx,%ecx,4), %eax; \
!        /* movl  y(%esi,%ecx,4), %edx */ .byte 0x8B, 0x54, 0x8E, y; \
            movl  %eax, x(%esi,%ecx,4); \
!        /* sbbl  y(%ebx,%ecx,4), %edx */ .byte 0x1B, 0x54, 0x8B, y; \
            movl  z(%esi,%ecx,4), %eax; \
!        /* movl  %edx, y(%esi,%ecx,4) */ .byte 0x89, 0x54, 0x8e, y
  	
          # boucle de soustraction déroulée pour 16 chiffres
diff -b -C 2 kernel/n/x86/div_n2.S ../numerix-0.22/kernel/n/x86/div_n2.S
*** kernel/n/x86/div_n2.S	2005-03-18 17:31:10.000000000 +0100
--- ../numerix-0.22/kernel/n/x86/div_n2.S	2005-12-04 19:25:04.000000000 +0100
***************
*** 301,308 ****
  #define BODY(x,y) \
            adcl   %eax,    %edi           /* edi += pfaible courant  */;\
!           movl   x(%ebx), %eax           /* eax <- b[2i+1]          */;\
            adcl   %edx,    %ecx           /* ecx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par q         */;\
!           subl   %edi,    x(%esi)        /* a[2i] <- pfaible préc.  */;\
            movl   $0,      %edi                                        ;\
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
--- 301,310 ----
  #define BODY(x,y) \
            adcl   %eax,    %edi           /* edi += pfaible courant  */;\
!        /* movl   x(%ebx), %eax              eax <- b[2i+1]          */;\
! 	  .byte  0x8b, 0x43, x                                        ;\
            adcl   %edx,    %ecx           /* ecx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par q         */;\
!        /* subl   %edi,    x(%esi)           a[2i] <- pfaible préc.  */;\
! 	  .byte  0x29, 0x7e, x                                        ;\
            movl   $0,      %edi                                        ;\
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
diff -b -C 2 kernel/n/x86/montgomery.S ../numerix-0.22/kernel/n/x86/montgomery.S
*** kernel/n/x86/montgomery.S	2005-03-18 17:31:00.000000000 +0100
--- ../numerix-0.22/kernel/n/x86/montgomery.S	2005-12-04 19:30:04.000000000 +0100
***************
*** 174,181 ****
  #define BODY(x,y) \
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
!           movl   x(%edi), %eax           /* eax <- c[2i+1]          */;\
            adcl   %edx,    %ebx           /* ebx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par m         */;\
!           addl   %ecx,    x(%esi)        /* a[2i+j] <- pfaible préc.*/;\
            movl   $0,      %ecx                                        ;\
            adcl   %eax,    %ebx           /* ebx += pfaible courant  */;\
--- 174,183 ----
  #define BODY(x,y) \
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
!        /* movl   x(%edi), %eax              eax <- c[2i+1]          */;\
! 	  .byte  0x8b, 0x47, x                                        ;\
            adcl   %edx,    %ebx           /* ebx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par m         */;\
!        /* addl   %ecx,    x(%esi)           a[2i+j] <- pfaible préc.*/;\
! 	  .byte  0x01, 0x4e, x                                        ;\
            movl   $0,      %ecx                                        ;\
            adcl   %eax,    %ebx           /* ebx += pfaible courant  */;\
diff -b -C 2 kernel/n/x86/mul_n2.S ../numerix-0.22/kernel/n/x86/mul_n2.S
*** kernel/n/x86/mul_n2.S	2005-03-18 17:31:17.000000000 +0100
--- ../numerix-0.22/kernel/n/x86/mul_n2.S	2005-12-04 19:21:43.000000000 +0100
***************
*** 279,286 ****
  #define BODY(x,y) \
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
!           movl   x(%esi), %eax           /* eax <- a[2i+1]          */;\
            adcl   %edx,    %ebx           /* ebx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par b[j]      */;\
!           addl   %ecx,    x(%edi)        /* c[2i+j] <- pfaible préc.*/;\
            movl   $0,      %ecx                                        ;\
            adcl   %eax,    %ebx           /* ebx += pfaible courant  */;\
--- 279,288 ----
  #define BODY(x,y) \
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
!        /* movl   x(%esi), %eax              eax <- a[2i+1]          */;\
!           .byte 0x8b, 0x46, x                                         ;\
            adcl   %edx,    %ebx           /* ebx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par b[j]      */;\
!        /* addl   %ecx,    x(%edi)           c[2i+j] <- pfaible préc.*/;\
!           .byte 0x01, 0x4f, x                                         ;\
            movl   $0,      %ecx                                        ;\
            adcl   %eax,    %ebx           /* ebx += pfaible courant  */;\
***************
*** 583,590 ****
  #define BODY(x,y) \
            adcl   %eax,    %ebx           /* ebx += pfaible courant  */;\
!           movl   x(%esi), %eax           /* eax <- a[2j]            */;\
            adcl   %edx,    %ecx           /* ecx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par 2a[i]     */;\
!           addl   %ebx,    x(%edi)        /* c[2j] <- pfaible préc.  */;\
            movl   $0,      %ebx                                        ;\
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
--- 585,594 ----
  #define BODY(x,y) \
            adcl   %eax,    %ebx           /* ebx += pfaible courant  */;\
!        /* movl   x(%esi), %eax              eax <- a[2j]            */;\
! 	  .byte  0x8b, 0x46, x                                        ;\
            adcl   %edx,    %ecx           /* ecx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par 2a[i]     */;\
!        /* addl   %ebx,    x(%edi)           c[2j] <- pfaible préc.  */;\
! 	  .byte  0x01, 0x5f, x                                        ;\
            movl   $0,      %ebx                                        ;\
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
diff -b -C 2 kernel/n/x86/sqrt_n2.S ../numerix-0.22/kernel/n/x86/sqrt_n2.S
*** kernel/n/x86/sqrt_n2.S	2005-03-18 17:30:54.000000000 +0100
--- ../numerix-0.22/kernel/n/x86/sqrt_n2.S	2005-12-04 19:27:30.000000000 +0100
***************
*** 250,257 ****
  #define BODY(x,y) \
            adcl   %eax,    %ebx           /* ebx += pfaible courant  */;\
!           movl   x(%edi), %eax           /* eax <- b[2j]            */;\
            adcl   %edx,    %ecx           /* ecx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par v         */;\
!           subl   %ebx,    x(%esi)        /* a[2j] <- pfaible préc.  */;\
            movl   $0,      %ebx                                        ;\
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\
--- 250,259 ----
  #define BODY(x,y) \
            adcl   %eax,    %ebx           /* ebx += pfaible courant  */;\
!        /* movl   x(%edi), %eax              eax <- b[2j]            */;\
! 	  .byte  0x8b, 0x47, x                                        ;\
            adcl   %edx,    %ecx           /* ecx <- pfort courant    */;\
            mull   %ebp                    /* multiplie par v         */;\
!        /* subl   %ebx,    x(%esi)           a[2j] <- pfaible préc.  */;\
! 	  .byte  0x29, 0x5e, x                                        ;\
            movl   $0,      %ebx                                        ;\
            adcl   %eax,    %ecx           /* ecx += pfaible courant  */;\

Reply to: