Hi All, this is the respin with the rewording as requested. Assuming still OK for trunk.
Regtested on arm-none-eabi, armeb-none-eabi, aarch64-none-elf and aarch64_be-none-elf with no issues found. Ok for trunk? gcc/ 2017-10-06 Tamar Christina <tamar.christ...@arm.com> * config/aarch64/aarch64.h (AARCH64_FL_DOTPROD): New. (AARCH64_ISA_DOTPROD, TARGET_DOTPROD): New. * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Add TARGET_DOTPROD. * config/aarch64/aarch64-option-extensions.def (dotprod): New. * config/aarch64/aarch64-cores.def (cortex-a55, cortex-a75): Enable TARGET_DOTPROD. (cortex-a75.cortex-a55): Likewise. * doc/invoke.texi (aarch64-feature-modifiers): Document dotprod. ________________________________________ From: James Greenhalgh <james.greenha...@arm.com> Sent: Monday, September 4, 2017 11:47:03 AM To: Tamar Christina Cc: gcc-patches@gcc.gnu.org; nd; Richard Earnshaw; Marcus Shawcroft Subject: Re: [PATCH][GCC][AArch64] Dot Product commandline options [Patch (4/8)] On Fri, Sep 01, 2017 at 02:20:59PM +0100, Tamar Christina wrote: > Hi All, > > This patch adds support for the +dotprod extension to AArch64. > Dot Product requires Adv.SIMD to work and so enables this option > by default when enabled. > > It is available from ARMv8.2-a and onwards and is enabled by > default on Cortex-A55 and Cortex-A75. > > Regtested and bootstrapped on aarch64-none-elf and no issues. > > Ok for trunk? Just a couple of rewordings needed, and then OK. > gcc/ > 2017-09-01 Tamar Christina <tamar.christ...@arm.com> > > * config/aarch64/aarch64.h (AARCH64_FL_DOTPROD): New. > (AARCH64_ISA_DOTPROD, TARGET_DOTPROD): New. > * config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Add > TARGET_DOTPROD. > * config/aarch64/aarch64-option-extensions.def (dotprod): New. > * config/aarch64/aarch64-cores.def (cortex-a55, cortex-a75): Enable > TARGET_DOTPROD. > (cortex-a75.cortex-a55): Likewise. > * doc/invoke.texi (aarch64-feature-modifiers): Document dotprod. > > -- > --- a/gcc/config/aarch64/aarch64.h > +++ b/gcc/config/aarch64/aarch64.h > @@ -151,7 +151,8 @@ extern unsigned aarch64_architecture_version; > #define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2-A FP16 > extensions. */ > /* ARMv8.3-A architecture extensions. */ > #define AARCH64_FL_V8_3 (1 << 10) /* Has ARMv8.3-A features. */ > -#define AARCH64_FL_RCPC (1 << 11) /* Has support for RCpc model. > */ > +#define AARCH64_FL_RCPC (1 << 11) /* Has support for RCpc model. */ > +#define AARCH64_FL_DOTPROD (1 << 12) /* Has dot product. */ Are these correctly formatted with the line above? "Has dot product" is not very decsriptive. > /* ARMv8.3-A features. */ > #define TARGET_ARMV8_3 (AARCH64_ISA_V8_3) > > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index > 4cb5836a9da22681d192c3750fc8e5a50024ac10..61fbc087f4974c0eb833c2daa131a2f7269d1b84 > 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -14271,6 +14271,9 @@ Enable FP16 extension. This also enables > floating-point instructions. > Enable the RcPc extension. This does not change code generation from GCC, > but is passed on to the assembler, enabling inline asm statements to use > instructions from the RcPc extension. > +@item dotprod > +Enable the Dot Product extension. This also enables Advanced SIMD > instructions > +and allows auto vectorization of dot products to the Dot Product > instructions. I'd drop the text from "and allows" onwards, it isn't very useful for figuring out exactly what idioms will be supported, and we don't use that text on other extensions. Thanks, James
diff --git a/gcc/config/aarch64/aarch64-c.c b/gcc/config/aarch64/aarch64-c.c index 177e638682f9dae3476b76e48a2d96c70d5acbd1..c7d866f3b567bbb55bf2c5152c9d0729fc2eff2c 100644 --- a/gcc/config/aarch64/aarch64-c.c +++ b/gcc/config/aarch64/aarch64-c.c @@ -106,6 +106,7 @@ aarch64_update_cpp_builtins (cpp_reader *pfile) aarch64_def_or_undef (TARGET_CRC32, "__ARM_FEATURE_CRC32", pfile); + aarch64_def_or_undef (TARGET_DOTPROD, "__ARM_FEATURE_DOTPROD", pfile); cpp_undef (pfile, "__AARCH64_CMODEL_TINY__"); cpp_undef (pfile, "__AARCH64_CMODEL_SMALL__"); diff --git a/gcc/config/aarch64/aarch64-cores.def b/gcc/config/aarch64/aarch64-cores.def index 10893324d3fd856ba60247fd1a48c56d0cf2fc39..16e44855872112c81db349e098f932edd52117be 100644 --- a/gcc/config/aarch64/aarch64-cores.def +++ b/gcc/config/aarch64/aarch64-cores.def @@ -83,8 +83,8 @@ AARCH64_CORE("thunderx2t99", thunderx2t99, thunderx2t99, 8_1A, AARCH64_FL_FOR /* ARMv8.2-A Architecture Processors. */ /* ARM ('A') cores. */ -AARCH64_CORE("cortex-a55", cortexa55, cortexa53, 8_2A, AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_RCPC, cortexa53, 0x41, 0xd05, -1) -AARCH64_CORE("cortex-a75", cortexa75, cortexa57, 8_2A, AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_RCPC, cortexa73, 0x41, 0xd0a, -1) +AARCH64_CORE("cortex-a55", cortexa55, cortexa53, 8_2A, AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD, cortexa53, 0x41, 0xd05, -1) +AARCH64_CORE("cortex-a75", cortexa75, cortexa57, 8_2A, AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD, cortexa73, 0x41, 0xd0a, -1) /* ARMv8-A big.LITTLE implementations. */ @@ -95,6 +95,6 @@ AARCH64_CORE("cortex-a73.cortex-a53", cortexa73cortexa53, cortexa53, 8A, AARCH /* ARM DynamIQ big.LITTLE configurations. */ -AARCH64_CORE("cortex-a75.cortex-a55", cortexa75cortexa55, cortexa53, 8_2A, AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_RCPC, cortexa73, 0x41, AARCH64_BIG_LITTLE (0xd0a, 0xd05), -1) +AARCH64_CORE("cortex-a75.cortex-a55", cortexa75cortexa55, cortexa53, 8_2A, AARCH64_FL_FOR_ARCH8_2 | AARCH64_FL_RCPC | AARCH64_FL_DOTPROD, cortexa73, 0x41, AARCH64_BIG_LITTLE (0xd0a, 0xd05), -1) #undef AARCH64_CORE diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index a989a2ec23e53f849903503b57a44c2a3e6812be..2c808f0b9ef7ca037239040d6fd0b57c664c12e1 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -43,8 +43,8 @@ AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, 0, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO | AARCH64_FL_F16, "fp") /* Enabling "simd" also enables "fp". - Disabling "simd" also disables "crypto". */ -AARCH64_OPT_EXTENSION("simd", AARCH64_FL_SIMD, AARCH64_FL_FP, AARCH64_FL_CRYPTO, "asimd") + Disabling "simd" also disables "crypto" and "dotprod". */ +AARCH64_OPT_EXTENSION("simd", AARCH64_FL_SIMD, AARCH64_FL_FP, AARCH64_FL_CRYPTO | AARCH64_FL_DOTPROD, "asimd") /* Enabling "crypto" also enables "fp", "simd". Disabling "crypto" just disables "crypto". */ @@ -67,4 +67,8 @@ AARCH64_OPT_EXTENSION("rcpc", AARCH64_FL_RCPC, 0, 0, "lrcpc") Disabling "rdma" just disables "rdma". */ AARCH64_OPT_EXTENSION("rdma", AARCH64_FL_RDMA, AARCH64_FL_FP | AARCH64_FL_SIMD, 0, "asimdrdm") +/* Enabling "dotprod" also enables "simd". + Disabling "dotprod" only disables "dotprod". */ +AARCH64_OPT_EXTENSION("dotprod", AARCH64_FL_DOTPROD, AARCH64_FL_SIMD, 0, "asimddp") + #undef AARCH64_OPT_EXTENSION diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 0786b2837196d9eb36893397fe03909628e338fa..8c7cc704828325816551d94e3bd8d73deed27ed7 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -136,14 +136,15 @@ extern unsigned aarch64_architecture_version; #define AARCH64_FL_CRC (1 << 3) /* Has CRC. */ /* ARMv8.1-A architecture extensions. */ #define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */ -#define AARCH64_FL_RDMA (1 << 5) /* Has Round Double Multiply Add. */ -#define AARCH64_FL_V8_1 (1 << 6) /* Has ARMv8.1-A extensions. */ +#define AARCH64_FL_RDMA (1 << 5) /* Has Round Double Multiply Add. */ +#define AARCH64_FL_V8_1 (1 << 6) /* Has ARMv8.1-A extensions. */ /* ARMv8.2-A architecture extensions. */ -#define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2-A features. */ +#define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2-A features. */ #define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2-A FP16 extensions. */ /* ARMv8.3-A architecture extensions. */ -#define AARCH64_FL_V8_3 (1 << 10) /* Has ARMv8.3-A features. */ -#define AARCH64_FL_RCPC (1 << 11) /* Has support for RCpc model. */ +#define AARCH64_FL_V8_3 (1 << 10) /* Has ARMv8.3-A features. */ +#define AARCH64_FL_RCPC (1 << 11) /* Has support for RCpc model. */ +#define AARCH64_FL_DOTPROD (1 << 12) /* Has ARMv8.2-A Dot Product ins. */ /* Has FP and SIMD. */ #define AARCH64_FL_FPSIMD (AARCH64_FL_FP | AARCH64_FL_SIMD) @@ -172,6 +173,7 @@ extern unsigned aarch64_architecture_version; #define AARCH64_ISA_V8_2 (aarch64_isa_flags & AARCH64_FL_V8_2) #define AARCH64_ISA_F16 (aarch64_isa_flags & AARCH64_FL_F16) #define AARCH64_ISA_V8_3 (aarch64_isa_flags & AARCH64_FL_V8_3) +#define AARCH64_ISA_DOTPROD (aarch64_isa_flags & AARCH64_FL_DOTPROD) /* Crypto is an optional extension to AdvSIMD. */ #define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO) @@ -186,6 +188,9 @@ extern unsigned aarch64_architecture_version; #define TARGET_FP_F16INST (TARGET_FLOAT && AARCH64_ISA_F16) #define TARGET_SIMD_F16INST (TARGET_SIMD && AARCH64_ISA_F16) +/* Dot Product is an optional extension to AdvSIMD enabled through +dotprod. */ +#define TARGET_DOTPROD (TARGET_SIMD && AARCH64_ISA_DOTPROD) + /* ARMv8.3-A features. */ #define TARGET_ARMV8_3 (AARCH64_ISA_V8_3) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index a69b0d59cdfecf82b97c8fad0de35fe7ac939e19..3a6acc9f607e9c07a377c452d081eb0214ddd8dd 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -14357,6 +14357,8 @@ Enable FP16 extension. This also enables floating-point instructions. Enable the RcPc extension. This does not change code generation from GCC, but is passed on to the assembler, enabling inline asm statements to use instructions from the RcPc extension. +@item dotprod +Enable the Dot Product extension. This also enables Advanced SIMD instructions. @end table