Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]

2017-10-09 Thread Richard Earnshaw (lists)
On 09/10/17 10:56, Tamar Christina wrote:
> Hi Richard,
> 
> Here is a respin with the requested changes.
> 
> Ok for trunk?
> 
> Thanks,
> Tamar
> 
> gcc/
> 2017-10-09  Tamar Christina  <tamar.christ...@arm.com>
> 
>   * config/arm/arm.h (TARGET_DOTPROD): New.
>   * config/arm/arm.c (arm_arch_dotprod): New.
>   (arm_option_reconfigure_globals): Add arm_arch_dotprod.
>   * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
>   * config/arm/arm-cpus.in (armv8.2-a): Enabled +dotprod.
>   (feature dotprod, group dotprod, ALL_SIMD_INTERNAL): New.
>   (ALL_FPU_INTERNAL): Use ALL_SIMD_INTERNAL.
>   * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
>   * doc/invoke.texi (armv8.2-a): Document dotprod
> 

OK.

R.

> The 10/06/2017 17:23, Richard Earnshaw (lists) wrote:
>> On 06/10/17 13:44, Tamar Christina wrote:
>>> Hi All,
>>>
>>> This is a respin of the patch with the feedback processed.
>>>
>>> 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/arm/arm.h (TARGET_DOTPROD): New.
>>> * config/arm/arm.c (arm_arch_dotprod): New.
>>> (arm_option_reconfigure_globals): Add arm_arch_dotprod.
>>> * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
>>> * config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
>>> (armv8.2-a, cortex-a75.cortex-a55): Likewise.
>>> (feature dotprod, group dotprod, ALL_SIMD_INTERNAL): New.
>>> (ALL_FPU_INTERNAL): Use ALL_SIMD_INTERNAL.
>>> * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
>>> * doc/invoke.texi (armv8.2-a): Document dotprod
>>> ________________________
>>> From: Kyrill Tkachov <kyrylo.tkac...@foss.arm.com>
>>> Sent: Wednesday, September 13, 2017 11:01:55 AM
>>> To: Tamar Christina; gcc-patches@gcc.gnu.org
>>> Cc: nd; Ramana Radhakrishnan; Richard Earnshaw; ni...@redhat.com
>>> Subject: Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]
>>>
>>> Hi Tamar,
>>>
>>> On 01/09/17 14:19, Tamar Christina wrote:
>>>> Hi All,
>>>>
>>>> This patch adds support for the +dotprod extension to ARM.
>>>> 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 arm-none-eabi and no issues.
>>>
>>> I'm assuming you mean arm-none-linux-gnueabihf :)
>>>
>>>> Ok for trunk?
>>>>
>>>> gcc/
>>>> 2017-09-01  Tamar Christina  <tamar.christ...@arm.com>
>>>>
>>>>   * config/arm/arm.h (TARGET_DOTPROD): New.
>>>>   * config/arm/arm.c (arm_arch_dotprod): New.
>>>>   (arm_option_reconfigure_globals): Add arm_arch_dotprod.
>>>>   * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
>>>>   * config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
>>>>   (armv8.2-a, cortex-a75.cortex-a55): Likewise.
>>>>   * config/arm/arm-isa.h (isa_bit_dotprod, ISA_DOTPROD): New.
>>>
>>> arm-isa.h is now autogenerated after r251799 so you'll need to rebase on
>>> top of that.
>>> That being said, that patch was temporarily reverted [1] so you'll have
>>> to apply it manually in your
>>> tree to rebase, or wait until it is reapplied.
>>>
>>> [1] https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00579.html
>>>
>>> The patch looks ok to me otherwise with a documentation nit below.
>>>
>>>>   * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
>>>>   * doc/invoke.texi (armv8.2-a): Document dotprod
>>>>
>>>
>>> --- a/gcc/doc/invoke.texi
>>> +++ b/gcc/doc/invoke.texi
>>> @@ -15492,6 +15492,10 @@ The ARMv8.1 Advanced SIMD and floating-point 
>>> instructions.
>>>   The cryptographic instructions.  This also enables the Advanced SIMD and
>>>   floating-point instructions.
>>>
>>> +@item +dotprod
>>> +Enable the Dot Product extension.  This also enables Advanced SIM

Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]

2017-10-09 Thread Tamar Christina
Hi Richard,

Here is a respin with the requested changes.

Ok for trunk?

Thanks,
Tamar

gcc/
2017-10-09  Tamar Christina  <tamar.christ...@arm.com>

* config/arm/arm.h (TARGET_DOTPROD): New.
* config/arm/arm.c (arm_arch_dotprod): New.
(arm_option_reconfigure_globals): Add arm_arch_dotprod.
* config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
* config/arm/arm-cpus.in (armv8.2-a): Enabled +dotprod.
(feature dotprod, group dotprod, ALL_SIMD_INTERNAL): New.
(ALL_FPU_INTERNAL): Use ALL_SIMD_INTERNAL.
* config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
* doc/invoke.texi (armv8.2-a): Document dotprod

The 10/06/2017 17:23, Richard Earnshaw (lists) wrote:
> On 06/10/17 13:44, Tamar Christina wrote:
> > Hi All,
> > 
> > This is a respin of the patch with the feedback processed.
> > 
> > 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/arm/arm.h (TARGET_DOTPROD): New.
> > * config/arm/arm.c (arm_arch_dotprod): New.
> > (arm_option_reconfigure_globals): Add arm_arch_dotprod.
> > * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
> > * config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
> > (armv8.2-a, cortex-a75.cortex-a55): Likewise.
> > (feature dotprod, group dotprod, ALL_SIMD_INTERNAL): New.
> > (ALL_FPU_INTERNAL): Use ALL_SIMD_INTERNAL.
> > * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
> > * doc/invoke.texi (armv8.2-a): Document dotprod
> > 
> > From: Kyrill Tkachov <kyrylo.tkac...@foss.arm.com>
> > Sent: Wednesday, September 13, 2017 11:01:55 AM
> > To: Tamar Christina; gcc-patches@gcc.gnu.org
> > Cc: nd; Ramana Radhakrishnan; Richard Earnshaw; ni...@redhat.com
> > Subject: Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]
> > 
> > Hi Tamar,
> > 
> > On 01/09/17 14:19, Tamar Christina wrote:
> >> Hi All,
> >>
> >> This patch adds support for the +dotprod extension to ARM.
> >> 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 arm-none-eabi and no issues.
> > 
> > I'm assuming you mean arm-none-linux-gnueabihf :)
> > 
> >> Ok for trunk?
> >>
> >> gcc/
> >> 2017-09-01  Tamar Christina  <tamar.christ...@arm.com>
> >>
> >>   * config/arm/arm.h (TARGET_DOTPROD): New.
> >>   * config/arm/arm.c (arm_arch_dotprod): New.
> >>   (arm_option_reconfigure_globals): Add arm_arch_dotprod.
> >>   * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
> >>   * config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
> >>   (armv8.2-a, cortex-a75.cortex-a55): Likewise.
> >>   * config/arm/arm-isa.h (isa_bit_dotprod, ISA_DOTPROD): New.
> > 
> > arm-isa.h is now autogenerated after r251799 so you'll need to rebase on
> > top of that.
> > That being said, that patch was temporarily reverted [1] so you'll have
> > to apply it manually in your
> > tree to rebase, or wait until it is reapplied.
> > 
> > [1] https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00579.html
> > 
> > The patch looks ok to me otherwise with a documentation nit below.
> > 
> >>   * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
> >>   * doc/invoke.texi (armv8.2-a): Document dotprod
> >>
> > 
> > --- a/gcc/doc/invoke.texi
> > +++ b/gcc/doc/invoke.texi
> > @@ -15492,6 +15492,10 @@ The ARMv8.1 Advanced SIMD and floating-point 
> > instructions.
> >   The cryptographic instructions.  This also enables the Advanced SIMD and
> >   floating-point instructions.
> > 
> > +@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.
> > 
> > This should be "auto-vectorization"
> > 
> > Thanks,
> > Kyrill
> > 
> > 
> > 
> 
> 
> Hmm, can you arrange to add patches as text/plain attachments, so that
> when I rep

Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]

2017-10-06 Thread Richard Earnshaw (lists)
On 06/10/17 13:44, Tamar Christina wrote:
> Hi All,
> 
> This is a respin of the patch with the feedback processed.
> 
> 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/arm/arm.h (TARGET_DOTPROD): New.
> * config/arm/arm.c (arm_arch_dotprod): New.
> (arm_option_reconfigure_globals): Add arm_arch_dotprod.
> * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
> * config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
> (armv8.2-a, cortex-a75.cortex-a55): Likewise.
> (feature dotprod, group dotprod, ALL_SIMD_INTERNAL): New.
> (ALL_FPU_INTERNAL): Use ALL_SIMD_INTERNAL.
> * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
> * doc/invoke.texi (armv8.2-a): Document dotprod
> 
> From: Kyrill Tkachov <kyrylo.tkac...@foss.arm.com>
> Sent: Wednesday, September 13, 2017 11:01:55 AM
> To: Tamar Christina; gcc-patches@gcc.gnu.org
> Cc: nd; Ramana Radhakrishnan; Richard Earnshaw; ni...@redhat.com
> Subject: Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]
> 
> Hi Tamar,
> 
> On 01/09/17 14:19, Tamar Christina wrote:
>> Hi All,
>>
>> This patch adds support for the +dotprod extension to ARM.
>> 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 arm-none-eabi and no issues.
> 
> I'm assuming you mean arm-none-linux-gnueabihf :)
> 
>> Ok for trunk?
>>
>> gcc/
>> 2017-09-01  Tamar Christina  <tamar.christ...@arm.com>
>>
>>   * config/arm/arm.h (TARGET_DOTPROD): New.
>>   * config/arm/arm.c (arm_arch_dotprod): New.
>>   (arm_option_reconfigure_globals): Add arm_arch_dotprod.
>>   * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
>>   * config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
>>   (armv8.2-a, cortex-a75.cortex-a55): Likewise.
>>   * config/arm/arm-isa.h (isa_bit_dotprod, ISA_DOTPROD): New.
> 
> arm-isa.h is now autogenerated after r251799 so you'll need to rebase on
> top of that.
> That being said, that patch was temporarily reverted [1] so you'll have
> to apply it manually in your
> tree to rebase, or wait until it is reapplied.
> 
> [1] https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00579.html
> 
> The patch looks ok to me otherwise with a documentation nit below.
> 
>>   * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
>>   * doc/invoke.texi (armv8.2-a): Document dotprod
>>
> 
> --- a/gcc/doc/invoke.texi
> +++ b/gcc/doc/invoke.texi
> @@ -15492,6 +15492,10 @@ The ARMv8.1 Advanced SIMD and floating-point 
> instructions.
>   The cryptographic instructions.  This also enables the Advanced SIMD and
>   floating-point instructions.
> 
> +@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.
> 
> This should be "auto-vectorization"
> 
> Thanks,
> Kyrill
> 
> 
> 


Hmm, can you arrange to add patches as text/plain attachments, so that
when I reply the patch is included for comments, please?

+# double-precision FP. Make sure bits that are not an FPU bit go
instructions
+# ALL_SIMD instead of ALL_SIMD_INTERNAL.

Two spaces after full stop.  The new sentence doesn't make sense.
Instead, I think you should probably put the following:

"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
(eg -mfloat-abi=soft).  ALL_FPU_INTERNAL must ONLY contain features that
form part of a named -mfpu option; it is used to map the capabilities
back to a named FPU for the benefit of the assembler.  ALL_SIMD_INTERNAL
and ALL_SIMD are similarly defined to help with the construction of
ALL_FPU and ALL_FPU_INTERNAL; they describe the SIMD extensions that are
either part of a named FPU or optional extensions respectively."

You might need to rejig the other sentence there as well to make it more
consistent.

@@ -239,6 +243,7 @@ define fgroup FP_D32FP_DBL fp_d32
 define fgroup FP_ARMv8 FPv5 FP_D32
 define fgroup NEON FP_D32 neon
 define fgroup CRYPTO   NEON crypto
+define fgroup DOTPROD   NEON dotprod

lines above have a hard tab between the group name and the features i

Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]

2017-10-06 Thread Tamar Christina
Hi All,

This is a respin of the patch with the feedback processed.

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/arm/arm.h (TARGET_DOTPROD): New.
* config/arm/arm.c (arm_arch_dotprod): New.
(arm_option_reconfigure_globals): Add arm_arch_dotprod.
* config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
* config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
(armv8.2-a, cortex-a75.cortex-a55): Likewise.
(feature dotprod, group dotprod, ALL_SIMD_INTERNAL): New.
(ALL_FPU_INTERNAL): Use ALL_SIMD_INTERNAL.
* config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
* doc/invoke.texi (armv8.2-a): Document dotprod

From: Kyrill Tkachov <kyrylo.tkac...@foss.arm.com>
Sent: Wednesday, September 13, 2017 11:01:55 AM
To: Tamar Christina; gcc-patches@gcc.gnu.org
Cc: nd; Ramana Radhakrishnan; Richard Earnshaw; ni...@redhat.com
Subject: Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]

Hi Tamar,

On 01/09/17 14:19, Tamar Christina wrote:
> Hi All,
>
> This patch adds support for the +dotprod extension to ARM.
> 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 arm-none-eabi and no issues.

I'm assuming you mean arm-none-linux-gnueabihf :)

> Ok for trunk?
>
> gcc/
> 2017-09-01  Tamar Christina  <tamar.christ...@arm.com>
>
>   * config/arm/arm.h (TARGET_DOTPROD): New.
>   * config/arm/arm.c (arm_arch_dotprod): New.
>   (arm_option_reconfigure_globals): Add arm_arch_dotprod.
>   * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
>   * config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
>   (armv8.2-a, cortex-a75.cortex-a55): Likewise.
>   * config/arm/arm-isa.h (isa_bit_dotprod, ISA_DOTPROD): New.

arm-isa.h is now autogenerated after r251799 so you'll need to rebase on
top of that.
That being said, that patch was temporarily reverted [1] so you'll have
to apply it manually in your
tree to rebase, or wait until it is reapplied.

[1] https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00579.html

The patch looks ok to me otherwise with a documentation nit below.

>   * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
>   * doc/invoke.texi (armv8.2-a): Document dotprod
>

--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -15492,6 +15492,10 @@ The ARMv8.1 Advanced SIMD and floating-point 
instructions.
  The cryptographic instructions.  This also enables the Advanced SIMD and
  floating-point instructions.

+@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.

This should be "auto-vectorization"

Thanks,
Kyrill



diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c
index 55472434c3a6e90c5693bbaabd3265f7d968787f..295f03bf8ee02be7c89ed2967d283be206e9f25a 100644
--- a/gcc/config/arm/arm-c.c
+++ b/gcc/config/arm/arm-c.c
@@ -73,6 +73,7 @@ arm_cpu_builtins (struct cpp_reader* pfile)
   def_or_undef_macro (pfile, "__ARM_FEATURE_QRDMX", TARGET_NEON_RDMA);
 
   def_or_undef_macro (pfile, "__ARM_FEATURE_CRC32", TARGET_CRC32);
+  def_or_undef_macro (pfile, "__ARM_FEATURE_DOTPROD", TARGET_DOTPROD);
   def_or_undef_macro (pfile, "__ARM_32BIT_STATE", TARGET_32BIT);
 
   cpp_undef (pfile, "__ARM_FEATURE_CMSE");
diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
index 07de4c9375ba7a0df0d8bd00385e54a4042e5264..a49f7aa83c14d7505eede81d52143f425d5a2f0c 100644
--- a/gcc/config/arm/arm-cpus.in
+++ b/gcc/config/arm/arm-cpus.in
@@ -156,6 +156,8 @@ define feature crypto
 # FP16 data processing (half-precision float).
 define feature fp16
 
+# Dot Product instructions extension to ARMv8.2-a.
+define feature dotprod
 
 # ISA Quirks (errata?).  Don't forget to add this to the fgroup
 # ALL_QUIRKS below.
@@ -181,12 +183,14 @@ define fgroup ALL_CRYPTO	crypto
 
 # List of all SIMD bits to strip out if SIMD is disabled.  This does
 # strip off 32 D-registers, but does not remove support for
-# double-precision FP.
-define fgroup ALL_SIMD	fp_d32 neon ALL_CRYPTO
+# double-precision FP. Make sure bits that are not an FPU bit go instructions
+# ALL_SIMD instead of ALL_SIMD_INTERNAL.
+define fgroup ALL_SIMD_INTERNAL	fp_d32 neon ALL_CRYPTO
+define fgroup ALL_SIMD	ALL_SIMD_INTERNAL dotprod
 
 # List of all FPU bits to strip out if -mfpu is used to override the
 # default.  fp16 is deliberately missing from this list.
-define fgroup 

Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]

2017-09-13 Thread Kyrill Tkachov

Hi Tamar,

On 01/09/17 14:19, Tamar Christina wrote:

Hi All,

This patch adds support for the +dotprod extension to ARM.
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 arm-none-eabi and no issues.


I'm assuming you mean arm-none-linux-gnueabihf :)


Ok for trunk?

gcc/
2017-09-01  Tamar Christina  

* config/arm/arm.h (TARGET_DOTPROD): New.
* config/arm/arm.c (arm_arch_dotprod): New.
(arm_option_reconfigure_globals): Add arm_arch_dotprod.
* config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
* config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
(armv8.2-a, cortex-a75.cortex-a55): Likewise.
* config/arm/arm-isa.h (isa_bit_dotprod, ISA_DOTPROD): New.


arm-isa.h is now autogenerated after r251799 so you'll need to rebase on 
top of that.
That being said, that patch was temporarily reverted [1] so you'll have 
to apply it manually in your

tree to rebase, or wait until it is reapplied.

[1] https://gcc.gnu.org/ml/gcc-patches/2017-09/msg00579.html

The patch looks ok to me otherwise with a documentation nit below.


* config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
* doc/invoke.texi (armv8.2-a): Document dotprod



--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -15492,6 +15492,10 @@ The ARMv8.1 Advanced SIMD and floating-point 
instructions.
 The cryptographic instructions.  This also enables the Advanced SIMD and
 floating-point instructions.
 
+@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.

This should be "auto-vectorization"

Thanks,
Kyrill





Re: [PATCH][GCC][ARM] Dot Product commandline options [Patch (1/8)]

2017-09-04 Thread Richard Earnshaw (lists)
On 01/09/17 14:19, Tamar Christina wrote:
> Hi All,
> 
> This patch adds support for the +dotprod extension to ARM.
> 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 arm-none-eabi and no issues.
> 
> Ok for trunk?
> 
> gcc/
> 2017-09-01  Tamar Christina  
> 
>   * config/arm/arm.h (TARGET_DOTPROD): New.
>   * config/arm/arm.c (arm_arch_dotprod): New.
>   (arm_option_reconfigure_globals): Add arm_arch_dotprod.
>   * config/arm/arm-c.c (__ARM_FEATURE_DOTPROD): New.
>   * config/arm/arm-cpus.in (cortex-a55, cortex-75): Enabled +dotprod.
>   (armv8.2-a, cortex-a75.cortex-a55): Likewise.
>   * config/arm/arm-isa.h (isa_bit_dotprod, ISA_DOTPROD): New.
>   * config/arm/t-multilib (v8_2_a_simd_variants): Add dotprod.
>   * doc/invoke.texi (armv8.2-a): Document dotprod
> 
> 
> 7949-diff.patch
> 
> 
> diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c
> index 
> 55472434c3a6e90c5693bbaabd3265f7d968787f..295f03bf8ee02be7c89ed2967d283be206e9f25a
>  100644
> --- a/gcc/config/arm/arm-c.c
> +++ b/gcc/config/arm/arm-c.c
> @@ -73,6 +73,7 @@ arm_cpu_builtins (struct cpp_reader* pfile)
>def_or_undef_macro (pfile, "__ARM_FEATURE_QRDMX", TARGET_NEON_RDMA);
>  
>def_or_undef_macro (pfile, "__ARM_FEATURE_CRC32", TARGET_CRC32);
> +  def_or_undef_macro (pfile, "__ARM_FEATURE_DOTPROD", TARGET_DOTPROD);
>def_or_undef_macro (pfile, "__ARM_32BIT_STATE", TARGET_32BIT);
>  
>cpp_undef (pfile, "__ARM_FEATURE_CMSE");
> diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
> index 
> d009a9e18acb093aefe0f9d8d6de49489fc2325c..7707eec5edf36b0cb4339bc52bc45a92b6ea007f
>  100644
> --- a/gcc/config/arm/arm-cpus.in
> +++ b/gcc/config/arm/arm-cpus.in
> @@ -357,6 +357,7 @@ begin arch armv8.2-a
>   option crypto add FP_ARMv8 CRYPTO
>   option nocrypto remove ALL_CRYPTO
>   option nofp remove ALL_FP
> + option dotprod add FP_ARMv8 DOTPROD
>  end arch armv8.2-a
>  
>  begin arch armv8-m.base
> @@ -1269,9 +1270,10 @@ begin cpu cortex-a55
>   cname cortexa55
>   tune for cortex-a53
>   tune flags LDSCHED
> - architecture armv8.2-a+fp16
> + architecture armv8.2-a+fp16+dotprod
>   fpu neon-fp-armv8
>   option crypto add FP_ARMv8 CRYPTO
> + option dotprod add FP_ARMv8 DOTPROD
>   option nofp remove ALL_FP
>   costs cortex_a53
>  end cpu cortex-a55
> @@ -1280,9 +1282,10 @@ begin cpu cortex-a75
>   cname cortexa75
>   tune for cortex-a57
>   tune flags LDSCHED
> - architecture armv8.2-a+fp16
> + architecture armv8.2-a+fp16+dotprod
>   fpu neon-fp-armv8
>   option crypto add FP_ARMv8 CRYPTO
> + option dotprod add FP_ARMv8 DOTPROD
>   costs cortex_a73
>  end cpu cortex-a75
>  
> @@ -1292,9 +1295,10 @@ begin cpu cortex-a75.cortex-a55
>   cname cortexa75cortexa55
>   tune for cortex-a53
>   tune flags LDSCHED
> - architecture armv8.2-a+fp16
> + architecture armv8.2-a+fp16+dotprod
>   fpu neon-fp-armv8
>   option crypto add FP_ARMv8 CRYPTO
> + option dotprod add FP_ARMv8 DOTPROD
>   costs cortex_a73
>  end cpu cortex-a75.cortex-a55
>  
> diff --git a/gcc/config/arm/arm-isa.h b/gcc/config/arm/arm-isa.h
> index 
> dbd29eaa52f2007498c2aff6263b8b6c3a70e2c2..60a50edf08dd7d3ac9ad46967250f4dcc6b8768b
>  100644
> --- a/gcc/config/arm/arm-isa.h
> +++ b/gcc/config/arm/arm-isa.h
> @@ -66,6 +66,7 @@ enum isa_feature
>  isa_bit_fp_d32,  /* 32 Double precision registers.  */
>  isa_bit_crypto,  /* Crypto extension to ARMv8.  */
>  isa_bit_fp16,/* FP16 data processing (half-precision float).  */
> +isa_bit_dotprod, /* Dot Product instructions.  */
>  
>  /* ISA Quirks (errata?).  Don't forget to add this to the list of
> all quirks below.  */
> @@ -159,6 +160,7 @@ enum isa_feature
>  #define ISA_FP_ARMv8 ISA_FPv5, ISA_FP_D32
>  #define ISA_NEON ISA_FP_D32, isa_bit_neon
>  #define ISA_CRYPTO   ISA_NEON, isa_bit_crypto
> +#define ISA_DOTPROD  ISA_NEON, isa_bit_dotprod

You also need to update ISA_ALL_FP to include your new feature;
otherwise it won't be correctly removed if +nofp is used.

>  
>  /* List of all quirk bits to strip out when comparing CPU features with
> architectures.  */
> diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
> index 
> 4f53583cf0219de4329bc64a47a5a42c550ff354..44a95bf7eb2eab8e3cf07ac9cc7aad3d9997b27f
>  100644
> --- a/gcc/config/arm/arm.h
> +++ b/gcc/config/arm/arm.h
> @@ -210,6 +210,11 @@ extern tree arm_fp16_type_node;
>  /* FPU supports ARMv8.1 Adv.SIMD extensions.  */
>  #define TARGET_NEON_RDMA (TARGET_NEON && arm_arch8_1)
>  
> +/* Supports for Dot Product AdvSIMD extensions.  */
> +#define TARGET_DOTPROD (TARGET_NEON  \
> + && bitmap_bit_p (arm_active_target.isa, \
> + isa_bit_dotprod))
> +
>  /* FPU supports the