1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-23 12:16:04 +02:00

cksum: use pclmul hardware instruction for CRC32 calculation

Use cpuid to detect CPU support for hardware instruction.
Fall back to slice by 8 algorithm if not supported.
A 500MiB file improves from 1.40s to 0.67s on an i3-2310M

* configure.ac [USE_PCLMUL_CRC32]: A new conditional,
set when __get_cpuid() and clmul compiler intrinsics are supported.
* src/cksum.c (pclmul_supported): A new function using __get_cpuid()
to determine if pclmul instructions are supported.
(cksum): A new function refactored from cksum_slice8(),
which calls pclmul_supported() and then cksum_slice8()
or cksum_pclmul() as appropriate.
* src/cksum.h: Export the crctab array for use in the new module.
* src/cksum_pclmul.c: A new module to implement using pclmul intrinsics.
* po/POTFILES.in: Reference the new cksum_pclmul module.
* src/local.mk: Likewise.  Note we build it as a separate library
so that it can be portably built with separate -mavx etc. flags.
* tests/misc/cksum.sh: Add new test modes for pertinent buffer sizes.
This commit is contained in:
Kristoffer Brånemyr
2021-02-03 10:35:22 +01:00
committed by Pádraig Brady
parent 90c4ef1f7d
commit 4b9118cdb3
7 changed files with 381 additions and 27 deletions

View File

@@ -44,6 +44,7 @@ src/chown-core.c
src/chown.c
src/chroot.c
src/cksum.c
src/cksum_pclmul.c
src/comm.c
src/copy.c
src/coreutils.c