提交 5742332d 编写于 作者: J Joakim Tjernlund 提交者: Linus Torvalds

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: NJoakim 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: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 bfcb2cc7
...@@ -51,20 +51,21 @@ static inline u32 ...@@ -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)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册