From 4a50820ee8f153265ec8ffd068618607d4be3a26 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 28 Nov 2023 13:29:58 +0100 Subject: 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 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. --- libiberty/ChangeLog | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'libiberty/ChangeLog') diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index 3424fef..a8fdc1b 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,13 @@ +2023-11-28 Jakub Jelinek + + * 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. + 2023-06-15 Marek Polacek * configure.ac: Also set shared when enable_host_pie. -- cgit v1.1