gmp failures on Solaris/x86

Darrel Hankerson hankedr at
Mon Jun 19 19:28:55 CEST 2006

Torbjorn Granlund <tege at> writes:

     	movd	%mm7, %eax
   That's wrong, the fact that you make the assembler accept the
   syntax isn't a sufficient criteria for correctness...

Sorry, I stupidly assumed Sun's assembler was correct without looking
at context.  I'm new to amd64, and didn't realize movd is used for
both 32-bit and 64-bit register moves.

   What syntax does the pesky Sun assembler want for the 64-bit move
   from a mmx register to a general register?
   We don't want the instruction coded 0f 7e c0 but the instruction
   coded 48 0f 7e c0.
I think you meant to write "48 0f 7e f8" but I understand your point.
It appears that only "movdq" (or .byte) is accepted by Sun's as (Sun
Compiler Common 10 s10_73 11/23/2004).  This seems wrong to me from
the AMD docs, but it generates the correct code.  Unfortunately gas
2.15 (delivered with Solaris 10) complains:

   Error: suffix or operands invalid for `movd'

Concerning jmpq:

     2. tests/amd64call.asm has
     	jmpq	*G(calling_conventions_function)
     which is not accepted. I think this should be
     	jmp	*G(calling_conventions_function)
   I suppose we could make that change, if it helps on Sun.

jmp passes Sun's assembler; jmpq does not.

   Are you saying that "configure ABI=32 ..." does not work?

I regret to have to admit doing "make clean" rather than "make distclean"
after testing 64-bit builds.  The ABI=32 report is my stupidity.

With changes as described above, "make check" passes with Sun's compiler
on Solaris/x86 with both 64- and 32-bit builds.


--Darrel Hankerson hankedr at

More information about the gmp-bugs mailing list