gmp 4.3.0 tests fail on Mac OS X 10.5

Torbjorn Granlund tg at gmplib.org
Wed May 6 18:50:07 CEST 2009


Mark Rodenkirch <mgrogue at wi.rr.com> writes:

  This should be no surprise, but I suspect it to be a compiler bug.  In
  looking at the snippet of code from the files provided:
  
  0000003c	addl	(%esp),%eax
  0000003f	ret
  .Lend:
  00000040	sbbl	%eax,%eax
  00000042	negl	%eax
  00000044	popl	%ebx
  00000045	popl	%esi
  00000046	popl	%edi
  00000047	ret
  00000048	nopl	0x00000000(%eax,%eax)
  .Loop:
  00000050	jcxz	0x00000040
  
Funny, jecxz displays as jcxz, which is not right.  (But it dislays
incorrectly also with my older Xcode tools, for known-good objecct code,
so I suspect it is just a disassembler bug.)

  The jcxz instruction (offset 50) is actually jumping to offset 3f, not
  offset 40.  It is returning from the routine without restoring
  registers.

Zany.
  
Either the hardware is wrong, or *both* the assembler and disassembler
are broken and get the offset wrong.  I don't know if there is a better
disassembler available; otool makes it difficult to check if the offset
is wrong (which I strongly suspect).

I got a crazy idea: Perhaps the .Lfoo labels confuses Apple's programs.
(We really should use L(foo) in the GMP assembly, to make the labels
more short-lived.)

Please try this patch:

diff -r bcf4178f4ccc mpn/x86/p6/aors_n.asm
--- a/mpn/x86/p6/aors_n.asm	Wed May 06 14:13:24 2009 +0200
+++ b/mpn/x86/p6/aors_n.asm	Wed May 06 18:44:18 2009 +0200
@@ -90,7 +90,7 @@
 	ret_internal
 ')
 
-.Lend:
+L(end):
 	sbb	%eax, %eax
 	neg	%eax
 	pop	%ebx
@@ -99,8 +99,8 @@
 	ret
 
 	ALIGN(16)
-.Loop:
-	jecxz	.Lend
+L(top):
+	jecxz	L(end)
 L(ent):
 Zdisp(	mov,	0,(up,n,4), %eax)
 Zdisp(	ADCSBB,	0,(vp,n,4), %eax)
@@ -135,7 +135,7 @@
 	mov	%edx, 28(rp,n,4)
 
 	lea	8(n), n
-	jmp	.Loop
+	jmp	L(top)
 
 EPILOGUE()
 

-- 
Torbjörn


More information about the gmp-bugs mailing list