mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-04 04:02:26 +00:00
crc32: optimize inner loop
Taking a pointer reference to each row in the crc table matrix, one can reduce the inner loop with a few insn's Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund@transmode.se> Cc: Bob Pearson <rpearson@systemfabricworks.com> Cc: Frank Zago <fzago@systemfabricworks.com> Cc: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
bfcb2cc798
commit
5742332dea
21
lib/crc32.c
21
lib/crc32.c
@ -51,20 +51,21 @@ static inline u32
|
|||||||
crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
|
crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
|
||||||
{
|
{
|
||||||
# ifdef __LITTLE_ENDIAN
|
# ifdef __LITTLE_ENDIAN
|
||||||
# define DO_CRC(x) crc = tab[0][(crc ^ (x)) & 255] ^ (crc >> 8)
|
# define DO_CRC(x) crc = t0[(crc ^ (x)) & 255] ^ (crc >> 8)
|
||||||
# define DO_CRC4 crc = tab[3][(crc) & 255] ^ \
|
# define DO_CRC4 crc = t3[(crc) & 255] ^ \
|
||||||
tab[2][(crc >> 8) & 255] ^ \
|
t2[(crc >> 8) & 255] ^ \
|
||||||
tab[1][(crc >> 16) & 255] ^ \
|
t1[(crc >> 16) & 255] ^ \
|
||||||
tab[0][(crc >> 24) & 255]
|
t0[(crc >> 24) & 255]
|
||||||
# else
|
# else
|
||||||
# define DO_CRC(x) crc = tab[0][((crc >> 24) ^ (x)) & 255] ^ (crc << 8)
|
# define DO_CRC(x) crc = t0[((crc >> 24) ^ (x)) & 255] ^ (crc << 8)
|
||||||
# define DO_CRC4 crc = tab[0][(crc) & 255] ^ \
|
# define DO_CRC4 crc = t0[(crc) & 255] ^ \
|
||||||
tab[1][(crc >> 8) & 255] ^ \
|
t1[(crc >> 8) & 255] ^ \
|
||||||
tab[2][(crc >> 16) & 255] ^ \
|
t2[(crc >> 16) & 255] ^ \
|
||||||
tab[3][(crc >> 24) & 255]
|
t3[(crc >> 24) & 255]
|
||||||
# endif
|
# endif
|
||||||
const u32 *b;
|
const u32 *b;
|
||||||
size_t rem_len;
|
size_t rem_len;
|
||||||
|
const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
|
||||||
|
|
||||||
/* Align it */
|
/* Align it */
|
||||||
if (unlikely((long)buf & 3 && len)) {
|
if (unlikely((long)buf & 3 && len)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user