|
@@ -66,6 +66,9 @@ crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
|
|
|
# endif
|
|
|
const u32 *b;
|
|
|
size_t rem_len;
|
|
|
+# ifdef CONFIG_X86
|
|
|
+ size_t i;
|
|
|
+# endif
|
|
|
const u32 *t0=tab[0], *t1=tab[1], *t2=tab[2], *t3=tab[3];
|
|
|
const u32 *t4 = tab[4], *t5 = tab[5], *t6 = tab[6], *t7 = tab[7];
|
|
|
u32 q;
|
|
@@ -86,7 +89,12 @@ crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
|
|
|
# endif
|
|
|
|
|
|
b = (const u32 *)buf;
|
|
|
+# ifdef CONFIG_X86
|
|
|
+ --b;
|
|
|
+ for (i = 0; i < len; i++) {
|
|
|
+# else
|
|
|
for (--b; len; --len) {
|
|
|
+# endif
|
|
|
q = crc ^ *++b; /* use pre increment for speed */
|
|
|
# if CRC_LE_BITS == 32
|
|
|
crc = DO_CRC4;
|
|
@@ -100,9 +108,14 @@ crc32_body(u32 crc, unsigned char const *buf, size_t len, const u32 (*tab)[256])
|
|
|
/* And the last few bytes */
|
|
|
if (len) {
|
|
|
u8 *p = (u8 *)(b + 1) - 1;
|
|
|
+# ifdef CONFIG_X86
|
|
|
+ for (i = 0; i < len; i++)
|
|
|
+ DO_CRC(*++p); /* use pre increment for speed */
|
|
|
+# else
|
|
|
do {
|
|
|
DO_CRC(*++p); /* use pre increment for speed */
|
|
|
} while (--len);
|
|
|
+# endif
|
|
|
}
|
|
|
return crc;
|
|
|
#undef DO_CRC
|