OSDN Git Service

crypto: arm64/crct10dif - implement non-Crypto Extensions alternative
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Mon, 27 Aug 2018 15:38:12 +0000 (17:38 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 4 Sep 2018 03:37:04 +0000 (11:37 +0800)
commit2fffee536c6875bdf546cee0045fed8faa5ea51f
tree6d98c7294ece7fbcb26770da27c236f179c12f05
parent6c1b0da13e521fa5cb4a3541b991efb100aced35
crypto: arm64/crct10dif - implement non-Crypto Extensions alternative

The arm64 implementation of the CRC-T10DIF algorithm uses the 64x64 bit
polynomial multiplication instructions, which are optional in the
architecture, and if these instructions are not available, we fall back
to the C routine which is slow and inefficient.

So let's reuse the 64x64 bit PMULL alternative from the GHASH driver that
uses a sequence of ~40 instructions involving 8x8 bit PMULL and some
shifting and masking. This is a lot slower than the original, but it is
still twice as fast as the current [unoptimized] C code on Cortex-A53,
and it is time invariant and much easier on the D-cache.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
arch/arm64/crypto/crct10dif-ce-core.S
arch/arm64/crypto/crct10dif-ce-glue.c