Re: [PATCH 11/16] x86: probe assembler capabilities via kconfig instead of makefile
From: Nick Desaulniers <ndesaulniers@google.com>
Date: 2020-03-24 17:01:58
Also in:
linux-kbuild, lkml
Can 11 just be rebased with 8 dropped? On Tue, Mar 24, 2020 at 1:49 AM Masahiro Yamada [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: "Jason A. Donenfeld" <Jason@zx2c4.com> Doing this probing inside of the Makefiles means we have a maze of ifdefs inside the source code and child Makefiles that need to make proper decisions on this too. Instead, we do it at Kconfig time, like many other compiler and assembler options, which allows us to set up the dependencies normally for full compilation units. In the process, the ADX test changes to use %eax instead of %r10 so that it's valid in both 32-bit and 64-bit mode. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- arch/x86/Kconfig | 2 ++ arch/x86/Kconfig.assembler | 22 ++++++++++++++++++++++ arch/x86/Makefile | 15 --------------- 3 files changed, 24 insertions(+), 15 deletions(-) create mode 100644 arch/x86/Kconfig.assemblerdiff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index beea77046f9b..707673227837 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig@@ -2935,3 +2935,5 @@ config HAVE_ATOMIC_IOMAP source "drivers/firmware/Kconfig" source "arch/x86/kvm/Kconfig" + +source "arch/x86/Kconfig.assembler"diff --git a/arch/x86/Kconfig.assembler b/arch/x86/Kconfig.assembler new file mode 100644 index 000000000000..46868ec7b723 --- /dev/null +++ b/arch/x86/Kconfig.assembler@@ -0,0 +1,22 @@ +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. + +# binutils >= 2.22 +config AS_AVX2 + def_bool $(as-instr,vpbroadcastb %xmm0$(comma)%ymm1) + +# binutils >= 2.25 +config AS_AVX512 + def_bool $(as-instr,vpmovm2b %k1$(comma)%zmm5) + +# binutils >= 2.24 +config AS_SHA1_NI + def_bool $(as-instr,sha1msg1 %xmm0$(comma)%xmm1) + +# binutils >= 2.24 +config AS_SHA256_NI + def_bool $(as-instr,sha256msg1 %xmm0$(comma)%xmm1) + +# binutils >= 2.23 +config AS_ADX + def_bool $(as-instr,adox %eax$(comma)%eax)diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 4c57cb3018fb..b65ec63c7db7 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile@@ -177,21 +177,6 @@ ifeq ($(ACCUMULATE_OUTGOING_ARGS), 1) KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args,) endif -# does binutils support specific instructions? -# binutils >= 2.22 -avx2_instr :=$(call as-instr,vpbroadcastb %xmm0$(comma)%ymm1,-DCONFIG_AS_AVX2=1) -# binutils >= 2.25 -avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1) -# binutils >= 2.24 -sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1) -# binutils >= 2.24 -sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1) -# binutils >= 2.23 -adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1) - -KBUILD_AFLAGS += $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) -KBUILD_CFLAGS += $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr) - KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE) # --2.17.1 -- You received this message because you are subscribed to the Google Groups "Clang Built Linux" group. To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/20200324084821.29944-12-masahiroy%40kernel.org.
-- Thanks, ~Nick Desaulniers