gmp failures on Solaris/x86
Darrel Hankerson
hankedr at auburn.edu
Mon Jun 19 19:28:55 CEST 2006
Torbjorn Granlund <tege at swox.com> 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.
Thanks.
--
--Darrel Hankerson hankedr at auburn.edu
More information about the gmp-bugs
mailing list