]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
libiberty, ld: Use x86 HW optimized sha1
authorJakub Jelinek <jakub@redhat.com>
Tue, 28 Nov 2023 12:29:58 +0000 (13:29 +0100)
committerJakub Jelinek <jakub@redhat.com>
Tue, 28 Nov 2023 12:29:58 +0000 (13:29 +0100)
commit4a50820ee8f153265ec8ffd068618607d4be3a26
tree680392257eafcb9160a66e62070f802374d2eda6
parente5f1ee1832ff9e970833fa5773f46c3e0b93bc04
libiberty, ld: Use x86 HW optimized sha1

The following patch attempts to use x86 SHA ISA if available to speed
up in my testing about 2.5x sha1 build-id processing (in my case on
AMD Ryzen 5 3600) while producing the same result.
I believe AArch64 has similar HW acceleration for SHA1, perhaps it
could be added similarly.

Note, seems lld uses BLAKE3 rather than md5/sha1.  I think it would be
a bad idea to lie to users, if they choose --buildid=sha1, we should
be using SHA1, not some other checksum, but perhaps we could add some other
--buildid= styles and perhaps make one of the new the default.

Tested on x86_64-linux, both on Intel i9-7960X (which doesn't have
sha_ni ISA support) without/with the patch and on AMD Ryzen 5 3600
(which does have it) without/with the patch.

2023-11-28  Jakub Jelinek  <jakub@redhat.com>

include/
* sha1.h (sha1_process_bytes_fn): New typedef.
(sha1_choose_process_bytes): Declare.
libiberty/
* configure.ac (HAVE_X86_SHA1_HW_SUPPORT): New check.
* sha1.c: If HAVE_X86_SHA1_HW_SUPPORT is defined, include x86intrin.h
and cpuid.h.
(sha1_hw_process_bytes, sha1_hw_process_block,
sha1_choose_process_bytes): New functions.
* config.in: Regenerated.
* configure: Regenerated.
ld/
* ldbuildid.c (generate_build_id): Use sha1_choose_process_bytes ()
instead of &sha1_process_bytes.
include/ChangeLog
include/sha1.h
ld/ChangeLog
ld/ldbuildid.c
libiberty/ChangeLog
libiberty/config.in
libiberty/configure
libiberty/configure.ac
libiberty/sha1.c