Am 02.11.2022 um 08:58 schrieb Niels Möller:
Torbjörn Granlund <t...@gmplib.org> writes:

This is not the same bug as we worked around for register-to-register
copying on x86-32 some years ago.  It is not cleer what syntax this
assembler might accept, and which also gives the right instruction (here
and on non-prolematic hosts).

For reference, in nettle x86_64 code, there are a few places where I
write "movd" instead of "movq" for 64-bit moves between general 64-bit
registers and xmm registers, to work around build problems on macos.
E.g.,

umac-nh.s:      movd    %xmm4, %rax
sha3-permute.s: movd    %xmm15, %r9

Seems to work fine everywhere I've tested it, but I've not really
understood why "movd" could ever be used as mnemonic for that operation
(I also use it in other places for 32-bit moves). I guess there are some
historic reasons.

So would be useful to try if replacement movq --> movd

Rechecked. I've changed the two occurrences of
        movq    %xmm0, %rax
https://gmplib.org/repo/gmp/file/tip/mpn/x86_64/core2/popcount.asm#l169
https://gmplib.org/repo/gmp/file/tip/mpn/x86_64/core2/hamdist.asm#l194

-       movq    %xmm0, %rax
+       movd    %xmm0, %rax

(i) solves the problem on (older) macos, and

Works like a charm, now both assembling works on x86_64 and all internal tests (and all tests in gnucobol's "make checkall" which uses GMP for arithmetic) pass!

(ii) produces identical object code on systems with more up-to-date
assemblers.

As I've understood you did exactly that before in other places.

I can't test that myself because I don't have a core2 anywhere else currently.

Regards,
/Niels

Again: big thanks for pointing this out.
Open question: can this change be applied to the repo and if yes by whom?

Simon

_______________________________________________
gmp-bugs mailing list
gmp-bugs@gmplib.org
https://gmplib.org/mailman/listinfo/gmp-bugs

Reply via email to