Re: [PATCH][Arm] Enable CLI for Armv8.6-a: armv8.6-a, i8mm and bf16
Hi Kyrill, On 20/12/2019 15:30, Kyrill Tkachov wrote: > Hi Dennis, > > On 12/12/19 5:30 PM, Dennis Zhang wrote: >> Hi all, >> >> On 22/11/2019 14:33, Dennis Zhang wrote: >> > Hi all, >> > >> > This patch is part of a series adding support for Armv8.6-A features. >> > It enables options including -march=armv8.6-a, +i8mm and +bf16. >> > The +i8mm and +bf16 features are optional for Armv8.2-a and onward. >> > Documents are at https://developer.arm.com/docs/ddi0596/latest >> > >> > Regtested for arm-none-linux-gnueabi-armv8-a. >> > >> >> This is an update to rebase the patch to the top. >> Some issues are fixed according to the recent CLI patch for AArch64. >> ChangeLog is updated as following: >> >> gcc/ChangeLog: >> >> 2019-12-12 Dennis Zhang >> >> * config/arm/arm-c.c (arm_cpu_builtins): Define >> __ARM_FEATURE_MATMUL_INT8, __ARM_FEATURE_BF16_VECTOR_ARITHMETIC, >> __ARM_FEATURE_BF16_SCALAR_ARITHMETIC, and >> __ARM_BF16_FORMAT_ALTERNATIVE when enabled. >> * config/arm/arm-cpus.in (armv8_6, i8mm, bf16): New features. >> * config/arm/arm-tables.opt: Regenerated. >> * config/arm/arm.c (arm_option_reconfigure_globals): Initialize >> arm_arch_i8mm and arm_arch_bf16 when enabled. >> * config/arm/arm.h (TARGET_I8MM): New macro. >> (TARGET_BF16_FP, TARGET_BF16_SIMD): Likewise. >> * config/arm/t-aprofile: Add matching rules for -march=armv8.6-a. >> * config/arm/t-arm-elf (all_v8_archs): Add armv8.6-a. >> * config/arm/t-multilib: Add matching rules for -march=armv8.6-a. >> (v8_6_a_simd_variants): New. >> (v8_*_a_simd_variants): Add i8mm and bf16. >> * doc/invoke.texi (armv8.6-a, i8mm, bf16): Document new options. >> >> gcc/testsuite/ChangeLog: >> >> 2019-12-12 Dennis Zhang >> >> * gcc.target/arm/multilib.exp: Add combination tests for >> armv8.6-a. >> >> Is it OK for trunk? > > > This is ok for trunk. > > Please follow the steps at https://gcc.gnu.org/svnwrite.html to get > write permission to the repo (listing me as approver). > > You can then commit it yourself :) Thanks for the sponsorship. I have done with the write permission. The patch is committed as r279839. Cheers Dennis
Re: [PATCH][Arm] Enable CLI for Armv8.6-a: armv8.6-a, i8mm and bf16
Hi Dennis, On 12/12/19 5:30 PM, Dennis Zhang wrote: Hi all, On 22/11/2019 14:33, Dennis Zhang wrote: > Hi all, > > This patch is part of a series adding support for Armv8.6-A features. > It enables options including -march=armv8.6-a, +i8mm and +bf16. > The +i8mm and +bf16 features are optional for Armv8.2-a and onward. > Documents are at https://developer.arm.com/docs/ddi0596/latest > > Regtested for arm-none-linux-gnueabi-armv8-a. > This is an update to rebase the patch to the top. Some issues are fixed according to the recent CLI patch for AArch64. ChangeLog is updated as following: gcc/ChangeLog: 2019-12-12 Dennis Zhang * config/arm/arm-c.c (arm_cpu_builtins): Define __ARM_FEATURE_MATMUL_INT8, __ARM_FEATURE_BF16_VECTOR_ARITHMETIC, __ARM_FEATURE_BF16_SCALAR_ARITHMETIC, and __ARM_BF16_FORMAT_ALTERNATIVE when enabled. * config/arm/arm-cpus.in (armv8_6, i8mm, bf16): New features. * config/arm/arm-tables.opt: Regenerated. * config/arm/arm.c (arm_option_reconfigure_globals): Initialize arm_arch_i8mm and arm_arch_bf16 when enabled. * config/arm/arm.h (TARGET_I8MM): New macro. (TARGET_BF16_FP, TARGET_BF16_SIMD): Likewise. * config/arm/t-aprofile: Add matching rules for -march=armv8.6-a. * config/arm/t-arm-elf (all_v8_archs): Add armv8.6-a. * config/arm/t-multilib: Add matching rules for -march=armv8.6-a. (v8_6_a_simd_variants): New. (v8_*_a_simd_variants): Add i8mm and bf16. * doc/invoke.texi (armv8.6-a, i8mm, bf16): Document new options. gcc/testsuite/ChangeLog: 2019-12-12 Dennis Zhang * gcc.target/arm/multilib.exp: Add combination tests for armv8.6-a. Is it OK for trunk? This is ok for trunk. Please follow the steps at https://gcc.gnu.org/svnwrite.html to get write permission to the repo (listing me as approver). You can then commit it yourself :) Thanks, Kyrill Many thanks! Dennis
Re: [PATCH][Arm] Enable CLI for Armv8.6-a: armv8.6-a, i8mm and bf16
Hi all, On 22/11/2019 14:33, Dennis Zhang wrote: > Hi all, > > This patch is part of a series adding support for Armv8.6-A features. > It enables options including -march=armv8.6-a, +i8mm and +bf16. > The +i8mm and +bf16 features are optional for Armv8.2-a and onward. > Documents are at https://developer.arm.com/docs/ddi0596/latest > > Regtested for arm-none-linux-gnueabi-armv8-a. > This is an update to rebase the patch to the top. Some issues are fixed according to the recent CLI patch for AArch64. ChangeLog is updated as following: gcc/ChangeLog: 2019-12-12 Dennis Zhang * config/arm/arm-c.c (arm_cpu_builtins): Define __ARM_FEATURE_MATMUL_INT8, __ARM_FEATURE_BF16_VECTOR_ARITHMETIC, __ARM_FEATURE_BF16_SCALAR_ARITHMETIC, and __ARM_BF16_FORMAT_ALTERNATIVE when enabled. * config/arm/arm-cpus.in (armv8_6, i8mm, bf16): New features. * config/arm/arm-tables.opt: Regenerated. * config/arm/arm.c (arm_option_reconfigure_globals): Initialize arm_arch_i8mm and arm_arch_bf16 when enabled. * config/arm/arm.h (TARGET_I8MM): New macro. (TARGET_BF16_FP, TARGET_BF16_SIMD): Likewise. * config/arm/t-aprofile: Add matching rules for -march=armv8.6-a. * config/arm/t-arm-elf (all_v8_archs): Add armv8.6-a. * config/arm/t-multilib: Add matching rules for -march=armv8.6-a. (v8_6_a_simd_variants): New. (v8_*_a_simd_variants): Add i8mm and bf16. * doc/invoke.texi (armv8.6-a, i8mm, bf16): Document new options. gcc/testsuite/ChangeLog: 2019-12-12 Dennis Zhang * gcc.target/arm/multilib.exp: Add combination tests for armv8.6-a. Is it OK for trunk? Many thanks! Dennis diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c index 546b35a5cbd..9cd1c5bdcba 100644 --- a/gcc/config/arm/arm-c.c +++ b/gcc/config/arm/arm-c.c @@ -226,6 +226,14 @@ arm_cpu_builtins (struct cpp_reader* pfile) builtin_define_with_int_value ("__ARM_FEATURE_COPROC", coproc_level); } + + def_or_undef_macro (pfile, "__ARM_FEATURE_MATMUL_INT8", TARGET_I8MM); + def_or_undef_macro (pfile, "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC", + TARGET_BF16_FP); + def_or_undef_macro (pfile, "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC", + TARGET_BF16_SIMD); + def_or_undef_macro (pfile, "__ARM_BF16_FORMAT_ALTERNATIVE", + TARGET_BF16_FP || TARGET_BF16_SIMD); } void diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in index 7090775aa7e..a2f6ce00af4 100644 --- a/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in @@ -123,6 +123,9 @@ define feature armv8_4 # Architecture rel 8.5. define feature armv8_5 +# Architecture rel 8.6. +define feature armv8_6 + # M-Profile security extensions. define feature cmse @@ -191,6 +194,12 @@ define feature sb # v8-A architectures, added by default from v8.5-A define feature predres +# 8-bit Integer Matrix Multiply extension. Optional from v8.2-A. +define feature i8mm + +# Brain half-precision floating-point extension. Optional from v8.2-A. +define feature bf16 + # Feature groups. Conventionally all (or mostly) upper case. # ALL_FPU lists all the feature bits associated with the floating-point # unit; these will all be removed if the floating-point unit is disabled @@ -213,7 +222,7 @@ define fgroup ALL_CRYPTO crypto # strip off 32 D-registers, but does not remove support for # double-precision FP. define fgroup ALL_SIMD_INTERNAL fp_d32 neon ALL_CRYPTO -define fgroup ALL_SIMD_EXTERNAL dotprod fp16fml +define fgroup ALL_SIMD_EXTERNAL dotprod fp16fml i8mm define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL # List of all FPU bits to strip out if -mfpu is used to override the @@ -221,7 +230,7 @@ define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL # Similarly, but including fp16 and other extensions that aren't part of # -mfpu support. -define fgroup ALL_FPU_EXTERNAL fp16 +define fgroup ALL_FPU_EXTERNAL fp16 bf16 # Everything related to the FPU extensions (FP or SIMD). define fgroup ALL_FP ALL_FPU_EXTERNAL ALL_FPU_INTERNAL ALL_SIMD @@ -256,6 +265,7 @@ define fgroup ARMv8_2aARMv8_1a armv8_2 define fgroup ARMv8_3aARMv8_2a armv8_3 define fgroup ARMv8_4aARMv8_3a armv8_4 define fgroup ARMv8_5aARMv8_4a armv8_5 sb predres +define fgroup ARMv8_6aARMv8_5a armv8_6 define fgroup ARMv8m_base ARMv6m armv8 cmse tdiv define fgroup ARMv8m_main ARMv7m armv8 cmse define fgroup ARMv8r ARMv8a @@ -563,6 +573,8 @@ begin arch armv8.2-a option dotprod add FP_ARMv8 DOTPROD option sb add sb option predres add predres + option i8mm add i8mm FP_ARMv8 NEON + option bf16 add bf16 FP_ARMv8 NEON end arch armv8.2-a begin arch armv8.3-a @@ -580,6 +592,8 @@ begin arch armv8.3-a option dotprod add FP_ARMv8 DOTPROD option sb add sb option predres add predres + option i8mm add i8mm FP_ARMv8 NEON + option bf16 add
[PATCH][Arm] Enable CLI for Armv8.6-a: armv8.6-a, i8mm and bf16
Hi all, This patch is part of a series adding support for Armv8.6-A features. It enables options including -march=armv8.6-a, +i8mm and +bf16. The +i8mm and +bf16 features are optional for Armv8.2-a and onward. Documents are at https://developer.arm.com/docs/ddi0596/latest Regtested for arm-none-linux-gnueabi-armv8-a. Please help to check if ready for trunk. Many thanks! Dennis gcc/ChangeLog: 2019-11-15 Dennis Zhang * config/arm/arm-c.c (arm_cpu_builtins): Define __ARM_FEATURE_MATMUL_INT8, __ARM_FEATURE_BF16_VECTOR_ARITHMETIC, __ARM_FEATURE_BF16_SCALAR_ARITHMETIC, and __ARM_BF16_FORMAT_ALTERNATIVE when enabled. * config/arm/arm-cpus.in (armv8_6, i8mm, bf16): New features. * config/arm/arm-tables.opt: Regenerated. * config/arm/arm.c (arm_option_reconfigure_globals): Init arm_arch_i8mm and arm_arch_bf16 to enable features. * config/arm/arm.h (TARGET_I8MM): New macro. (TARGET_BF16_FP, TARGET_BF16_SIMD): Likewise. * config/arm/t-aprofile: Add matching rules for -march=armv8.6-a. * config/arm/t-arm-elf (all_v8_archs): Add armv8.6-a. * config/arm/t-multilib: Add matching rules for -march=armv8.6-a. (v8_6_a_simd_variants): New. (v8_*_a_simd_variants): Add i8mm and bf16. * doc/invoke.texi (armv8.6-a, i8mm, bf16): Document new options. gcc/testsuite/ChangeLog: 2019-11-15 Dennis Zhang * gcc.target/arm/multilib.exp: Add combination tests for armv8.6-a. diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c index c4485ce7af1..b47e64c2151 100644 --- a/gcc/config/arm/arm-c.c +++ b/gcc/config/arm/arm-c.c @@ -225,6 +225,14 @@ arm_cpu_builtins (struct cpp_reader* pfile) builtin_define_with_int_value ("__ARM_FEATURE_COPROC", coproc_level); } + + def_or_undef_macro (pfile, "__ARM_FEATURE_MATMUL_INT8", TARGET_I8MM); + def_or_undef_macro (pfile, "__ARM_FEATURE_BF16_SCALAR_ARITHMETIC", + TARGET_BF16_FP); + def_or_undef_macro (pfile, "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC", + TARGET_BF16_SIMD); + def_or_undef_macro (pfile, "__ARM_BF16_FORMAT_ALTERNATIVE", + TARGET_BF16_FP || TARGET_BF16_SIMD); } void diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in index 50379a0a10a..d373406649c 100644 --- a/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in @@ -123,6 +123,9 @@ define feature armv8_4 # Architecture rel 8.5. define feature armv8_5 +# Architecture rel 8.6. +define feature armv8_6 + # M-Profile security extensions. define feature cmse @@ -191,6 +194,12 @@ define feature sb # v8-A architectures, added by default from v8.5-A define feature predres +# 8-bit Integer Matrix Multiply extension. Optional from v8.2-A. +define feature i8mm + +# Brain half-precision floating-point extension. Optional from v8.2-A. +define feature bf16 + # Feature groups. Conventionally all (or mostly) upper case. # ALL_FPU lists all the feature bits associated with the floating-point # unit; these will all be removed if the floating-point unit is disabled @@ -213,7 +222,7 @@ define fgroup ALL_CRYPTO crypto # strip off 32 D-registers, but does not remove support for # double-precision FP. define fgroup ALL_SIMD_INTERNAL fp_d32 neon ALL_CRYPTO -define fgroup ALL_SIMD ALL_SIMD_INTERNAL dotprod fp16fml +define fgroup ALL_SIMD ALL_SIMD_INTERNAL dotprod fp16fml i8mm # List of all FPU bits to strip out if -mfpu is used to override the # default. fp16 is deliberately missing from this list. @@ -253,6 +262,7 @@ define fgroup ARMv8_2aARMv8_1a armv8_2 define fgroup ARMv8_3aARMv8_2a armv8_3 define fgroup ARMv8_4aARMv8_3a armv8_4 define fgroup ARMv8_5aARMv8_4a armv8_5 sb predres +define fgroup ARMv8_6aARMv8_5a armv8_6 define fgroup ARMv8m_base ARMv6m armv8 cmse tdiv define fgroup ARMv8m_main ARMv7m armv8 cmse define fgroup ARMv8r ARMv8a @@ -560,6 +570,8 @@ begin arch armv8.2-a option dotprod add FP_ARMv8 DOTPROD option sb add sb option predres add predres + option i8mm add i8mm FP_ARMv8 NEON + option bf16 add bf16 FP_ARMv8 NEON end arch armv8.2-a begin arch armv8.3-a @@ -577,6 +589,8 @@ begin arch armv8.3-a option dotprod add FP_ARMv8 DOTPROD option sb add sb option predres add predres + option i8mm add i8mm FP_ARMv8 NEON + option bf16 add bf16 FP_ARMv8 NEON end arch armv8.3-a begin arch armv8.4-a @@ -592,6 +606,8 @@ begin arch armv8.4-a option nofp remove ALL_FP option sb add sb option predres add predres + option i8mm add i8mm FP_ARMv8 NEON + option bf16 add bf16 FP_ARMv8 NEON end arch armv8.4-a begin arch armv8.5-a @@ -605,8 +621,25 @@ begin arch armv8.5-a option crypto add FP_ARMv8 CRYPTO DOTPROD option nocrypto remove ALL_CRYPTO option nofp remove ALL_FP + option i8mm add i8mm FP_ARMv8 NEON + option bf16 add bf16 FP_ARMv8 NEON end arch armv8.5-a +begin arch armv8.6-a + tune for cortex-a53 + tune flags CO_PROC + base 8A + profile A + isa ARMv8_6a +