]> git.baikalelectronics.ru Git - kernel.git/commit
crypto: crc32c-pclmul - Shrink K_table to 32-bit words
authorGeorge Spelvin <linux@horizon.com>
Sat, 7 Jun 2014 03:08:58 +0000 (23:08 -0400)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 20 Jun 2014 13:27:57 +0000 (21:27 +0800)
commit7f20df6a05edb68eb7afbf3047ba200c87b04cd0
treed3d8cf86e95ebb7aaea477b5551aaebcf0f7a162
parent6457c7ccb32ee6461e5003e8f5835a31f977d665
crypto: crc32c-pclmul - Shrink K_table to 32-bit words

There's no need for the K_table to be made of 64-bit words.  For some
reason, the original authors didn't fully reduce the values modulo the
CRC32C polynomial, and so had some 33-bit values in there.  They can
all be reduced to 32 bits.

Doing that cuts the table size in half.  Since the code depends on both
pclmulq and crc32, SSE 4.1 is obviously present, so we can use pmovzxdq
to fetch it in the correct format.

This adds (measured on Ivy Bridge) 1 cycle per main loop iteration
(CRC of up to 3K bytes), less than 0.2%.  The hope is that the reduced
D-cache footprint will make up the loss in other code.

Two other related fixes:
* K_table is read-only, so belongs in .rodata, and
* There's no need for more than 8-byte alignment

Acked-by: Tim Chen <tim.c.chen@linux.intel.com>
Signed-off-by: George Spelvin <linux@horizon.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/x86/crypto/crc32c-pcl-intel-asm_64.S