Re: [PATCH] crypto: arm64/crc32 - detect crc32 support in assembler
flat view
From: Ard Biesheuvel <hidden>
Date: 2017-01-27 10:45:36
Also in:
linux-arm-kernel, lkml
Hi Mathias, On 27 January 2017 at 10:40, Matthias Brugger [off-list ref] wrote:
Older compilers may not be able to detect the crc32 extended cpu type.
What do you mean 'detect'? Could you describe the failure in more detail please?
quoted hunk
Anyway only inline assembler code is used, which gets passed to the assembler. This patch moves the crc detection to the assembler. Suggested-by: Alexander Graf <redacted> Signed-off-by: Matthias Brugger <mbrugger@suse.com> --- arch/arm64/crypto/Makefile | 2 -- arch/arm64/crypto/crc32-arm64.c | 3 +++ 2 files changed, 3 insertions(+), 2 deletions(-)diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile index aa8888d7b744..0d779dac75cd 100644 --- a/arch/arm64/crypto/Makefile +++ b/arch/arm64/crypto/Makefile@@ -48,8 +48,6 @@ 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)diff --git a/arch/arm64/crypto/crc32-arm64.c b/arch/arm64/crypto/crc32-arm64.c index 6a37c3c6b11d..10f5dd075323 100644 --- a/arch/arm64/crypto/crc32-arm64.c +++ b/arch/arm64/crypto/crc32-arm64.c@@ -29,6 +29,9 @@ MODULE_AUTHOR("Yazen Ghannam <yazen.ghannam@linaro.org>"); MODULE_DESCRIPTION("CRC32 and CRC32C using optional ARMv8 instructions"); MODULE_LICENSE("GPL v2"); +/* Request crc extension capabilities from the assembler */ +asm(".arch_extension crc"); +
Will should confirm, but I think this is a recent feature in GAS for AArch64, so this may break older toolchains as well.
#define CRC32X(crc, value) __asm__("crc32x %w[c], %w[c], %x[v]":[c]"+r"(crc):[v]"r"(value))
#define CRC32W(crc, value) __asm__("crc32w %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(value))
#define CRC32H(crc, value) __asm__("crc32h %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(value))
--
2.11.0