gmp 4.3.0 tests fail on Mac OS X 10.5

Mark Rodenkirch mgrogue at wi.rr.com
Wed May 6 20:18:43 CEST 2009


Success!  No other errors cropped up, in other words, make check  
passed all tests with ABI=32.

Thanks for your help.  I don't understand how a label could affect  
software in this way, but as long as it works, I'm okay with it.

--Mark

On May 6, 2009, at 11:50 AM, Torbjorn Granlund wrote:

> 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