freebsd-dev/sys/libkern
Conrad Meyer 6be2ff7d3e calculate_crc32c: Add SSE4.2 implementation on x86
Derived from an implementation by Mark Adler.

The fast loop performs three simultaneous CRCs over subsets of the data
before composing them.  This takes advantage of certain properties of
the CRC32 implementation in Intel hardware.  (The CRC instruction takes 1
cycle but has 2-3 cycles of latency.)

The CRC32 instruction does not manipulate FPU state.

i386 does not have the crc32q instruction, so avoid it there.  Otherwise
the implementation is identical to amd64.

Add basic userland tests to verify correctness on a variety of inputs.

PR:		216467
Reported by:	Ben RUBSON <ben.rubson at gmail.com>
Reviewed by:	kib@, markj@ (earlier version)
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D9342
2017-01-31 03:26:32 +00:00
..
arm Add the __aeabi_memclr8 symbol, clang 3.7 uses this. 2015-09-21 18:35:32 +00:00
x86 calculate_crc32c: Add SSE4.2 implementation on x86 2017-01-31 03:26:32 +00:00
arc4random.c Update r309143 to prevent false sharing. 2016-11-25 17:20:23 +00:00
ashldi3.c
ashrdi3.c
asprintf.c Implement asprintf in libkern 2015-03-01 00:22:16 +00:00
bcd.c Use time_t for intermediate values to avoid overflow in clock_ts_to_ct 2017-01-24 18:05:29 +00:00
bcmp.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
bsearch.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
cmpdi2.c
crc32.c calculate_crc32c: Add SSE4.2 implementation on x86 2017-01-31 03:26:32 +00:00
divdi3.c
explicit_bzero.c Remove duplicated code. 2014-10-16 22:04:07 +00:00
ffs.c libkern: ffs, fls: s/4/3/ the 3rd BSD clause 2015-10-22 21:04:47 +00:00
ffsl.c libkern: ffs, fls: s/4/3/ the 3rd BSD clause 2015-10-22 21:04:47 +00:00
ffsll.c libkern: ffs, fls: s/4/3/ the 3rd BSD clause 2015-10-22 21:04:47 +00:00
fls.c libkern: ffs, fls: s/4/3/ the 3rd BSD clause 2015-10-22 21:04:47 +00:00
flsl.c libkern: ffs, fls: s/4/3/ the 3rd BSD clause 2015-10-22 21:04:47 +00:00
flsll.c libkern: ffs, fls: s/4/3/ the 3rd BSD clause 2015-10-22 21:04:47 +00:00
fnmatch.c
iconv_converter_if.m
iconv_ucs.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
iconv_xlat16.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
iconv_xlat.c
iconv.c
inet_aton.c
inet_ntoa.c
inet_ntop.c
inet_pton.c
jenkins_hash.c
lshrdi3.c
mcount.c
memcchr.c
memchr.c
memcmp.c
memmem.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
memmove.c
memset.c
moddi3.c
murmur3_32.c Add a complete implementation of MurmurHash3. Tweak both implementations 2014-10-18 22:15:11 +00:00
qdivrem.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
qsort_r.c
qsort.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
quad.h
random.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
scanc.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
strcasecmp.c
strcat.c
strchr.c
strcmp.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
strcpy.c
strcspn.c
strdup.c
strlcat.c
strlcpy.c
strlen.c
strncat.c Merge ACPICA 20160422. 2016-04-27 19:09:21 +00:00
strncmp.c Sync with userland variant. 2014-11-17 21:01:35 +00:00
strncpy.c libkern: Remove obsolete 'register' keyword 2017-01-12 17:02:29 +00:00
strndup.c
strnlen.c
strrchr.c
strsep.c
strspn.c
strstr.c
strtol.c kern: for pointers replace 0 with NULL. 2016-04-15 16:10:11 +00:00
strtoq.c kern: for pointers replace 0 with NULL. 2016-04-15 16:10:11 +00:00
strtoul.c kern: for pointers replace 0 with NULL. 2016-04-15 16:10:11 +00:00
strtouq.c kern: for pointers replace 0 with NULL. 2016-04-15 16:10:11 +00:00
strvalid.c
timingsafe_bcmp.c Add some new modes to OpenCrypto. These modes are AES-ICM (can be used 2014-12-12 19:56:36 +00:00
ucmpdi2.c
udivdi3.c
umoddi3.c
zlib.c Move zlib.c from net to libkern. 2015-04-22 14:38:58 +00:00