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:[EMAIL PROTECTED]
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 */;\