This adds a scalar implementation of AES, based on the precomputed tables that are exposed by the generic AES code. Since rotates are cheap on arm64, this implementation only uses the 4 core tables (of 1 KB each), and avoids the prerotated ones, reducing the D-cache footprint by 75%. On Cortex-A57, this code manages 13.0 cycles per byte, which is ~34% faster than the generic C code. (Note that this is still >13x slower than the code that uses the optional ARMv8 Crypto Extensions, which manages <1 cycles per byte.) Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
64 lines
1.9 KiB
Makefile
64 lines
1.9 KiB
Makefile
#
|
|
# linux/arch/arm64/crypto/Makefile
|
|
#
|
|
# Copyright (C) 2014 Linaro Ltd <ard.biesheuvel@linaro.org>
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License version 2 as
|
|
# published by the Free Software Foundation.
|
|
#
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA1_ARM64_CE) += sha1-ce.o
|
|
sha1-ce-y := sha1-ce-glue.o sha1-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA2_ARM64_CE) += sha2-ce.o
|
|
sha2-ce-y := sha2-ce-glue.o sha2-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_GHASH_ARM64_CE) += ghash-ce.o
|
|
ghash-ce-y := ghash-ce-glue.o ghash-ce-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_CE) += aes-ce-cipher.o
|
|
aes-ce-cipher-y := aes-ce-cipher-glue.o aes-ce-cipher-core.o
|
|
CFLAGS_aes-ce-cipher-core.o += -march=armv8-a+crypto -Wa,-march=armv8-a+crypto $(DISABLE_LTO)
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_CE_CCM) += aes-ce-ccm.o
|
|
aes-ce-ccm-y := aes-ce-ccm-glue.o aes-ce-ccm-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_CE_BLK) += aes-ce-blk.o
|
|
aes-ce-blk-y := aes-glue-ce.o aes-ce.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o
|
|
aes-neon-blk-y := aes-glue-neon.o aes-neon.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA256_ARM64) += sha256-arm64.o
|
|
sha256-arm64-y := sha256-glue.o sha256-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_SHA512_ARM64) += sha512-arm64.o
|
|
sha512-arm64-y := sha512-glue.o sha512-core.o
|
|
|
|
obj-$(CONFIG_CRYPTO_AES_ARM64) += aes-arm64.o
|
|
aes-arm64-y := aes-cipher-core.o aes-cipher-glue.o
|
|
|
|
AFLAGS_aes-ce.o := -DINTERLEAVE=4
|
|
AFLAGS_aes-neon.o := -DINTERLEAVE=4
|
|
|
|
CFLAGS_aes-glue-ce.o := -DUSE_V8_CRYPTO_EXTENSIONS
|
|
|
|
obj-$(CONFIG_CRYPTO_CRC32_ARM64) += crc32-arm64.o
|
|
|
|
CFLAGS_crc32-arm64.o := -mcpu=generic+crc
|
|
|
|
$(obj)/aes-glue-%.o: $(src)/aes-glue.c FORCE
|
|
$(call if_changed_rule,cc_o_c)
|
|
|
|
quiet_cmd_perlasm = PERLASM $@
|
|
cmd_perlasm = $(PERL) $(<) void $(@)
|
|
|
|
$(obj)/sha256-core.S: $(src)/sha512-armv8.pl
|
|
$(call cmd,perlasm)
|
|
|
|
$(obj)/sha512-core.S: $(src)/sha512-armv8.pl
|
|
$(call cmd,perlasm)
|
|
|
|
.PRECIOUS: $(obj)/sha256-core.S $(obj)/sha512-core.S
|