Message ID | 39254e41-2963-bf5a-a359-41a64dc0701e@foss.arm.com |
---|---|
State | New |
Headers | show |
On Mon, Jun 27, 2016 at 03:58:00PM +0100, Jiong Wang wrote: > On 07/06/16 09:46, Jiong Wang wrote: > >2016-06-07 Matthew Wahab<matthew.wahab@arm.com> > > Jiong Wang<jiong.wang@arm.com> > > > > * config/aarch64/aarch64-arches.def: Add "armv8.2-a". > > * config/aarch64/aarch64.h (AARCH64_FL_V8_2): New. > > (AARCH64_FL_F16): New. > > (AARCH64_FL_FOR_ARCH8_2): New. > > (AARCH64_ISA_8_2): New. > > (AARCH64_ISA_F16): New. > > (TARGET_FP_F16INST): New. > > (TARGET_SIMD_F16INST): New. > > * config/aarch64/aarch64-option-extensions.def: New entry > >for "fp16". > > * config/aarch64/aarch64-c.c (arch64_update_cpp_builtins): > >Conditionally define > > __ARM_FEATURE_FP16_SCALAR_ARITHMETIC and > >__ARM_FEATURE_FP16_VECTOR_ARITHMETIC. > > * doc/invoke.texi (AArch64 Options): Document "armv8.2-a" > >and "fp16". > > > > This is a updated version of this patch, the updates are: > > * When enabling "fp16" also enables "fp". > * When disabling "fp" also disables "fp16". > * When disabling "fp16" only disables "fp16". > > OK for trunk? Hi Jiong, Some very minor comments below. > diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h > index b15c23f0..d715da7 100644 > --- a/gcc/config/aarch64/aarch64.h > +++ b/gcc/config/aarch64/aarch64.h > @@ -135,6 +135,8 @@ extern unsigned aarch64_architecture_version; > /* ARMv8.1 architecture extensions. */ > #define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */ > #define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1 extensions. */ > +#define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2 features. */ > +#define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2 FP16 extensions. */ Please add a new "section" for the ARMv8.2-A architecture extensions (just a new comment that groups them), and s/ARMv8.2/ARMv8.2-A/ throughout this section (if you'd like to do the follow-up trivial patch for s/ARMv8.1/ARMv8.1-A/ I'd appreciate that). > diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi > index aa11209..d44bbc0 100644 > --- a/gcc/doc/invoke.texi > +++ b/gcc/doc/invoke.texi > @@ -13035,7 +13035,10 @@ more feature modifiers. This option has the form > @option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}. > > The permissible values for @var{arch} are @samp{armv8-a}, > -@samp{armv8.1-a} or @var{native}. > +@samp{armv8.1-a}, @samp{armv8.2-a} or @var{native}. > + > +The value @samp{armv8.2-a} implies @samp{armv8.1-a} and enables compiler > +support for the ARMv8.2 architecture extensions. ARMv8.2-A here too please. > > The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler > support for the ARMv8.1 architecture extension. In particular, it > @@ -13140,6 +13143,8 @@ instructions. This is on by default for all possible values for options > @item lse > Enable Large System Extension instructions. This is on by default for > @option{-march=armv8.1-a}. > +@item fp16 > +Enable FP16 extension. Please add a note here that enabling this extension also enables "fp" This is OK for trunk otherwise. Thanks, James > > 2016-06-27 Matthew Wahab <matthew.wahab@arm.com> > Jiong Wang <jiong.wang@arm.com> > > * config/aarch64/aarch64-arches.def: Add "armv8.2-a". > * config/aarch64/aarch64.h (AARCH64_FL_V8_2): New. > (AARCH64_FL_F16): New. > (AARCH64_FL_FOR_ARCH8_2): New. > (AARCH64_ISA_8_2): New. > (AARCH64_ISA_F16): New. > (TARGET_FP_F16INST): New. > (TARGET_SIMD_F16INST): New. > * config/aarch64/aarch64-option-extensions.def ("fp16"): New entry. > ("fp"): Disabling "fp" also disables "fp16". > * config/aarch64/aarch64-c.c (arch64_update_cpp_builtins): Conditionally define > __ARM_FEATURE_FP16_SCALAR_ARITHMETIC and __ARM_FEATURE_FP16_VECTOR_ARITHMETIC. > * doc/invoke.texi (AArch64 Options): Document "armv8.2-a" and "fp16".
On 29/06/16 09:43, James Greenhalgh wrote: > On Mon, Jun 27, 2016 at 03:58:00PM +0100, Jiong Wang wrote: >> On 07/06/16 09:46, Jiong Wang wrote: >>> 2016-06-07 Matthew Wahab<matthew.wahab@arm.com> >>> Jiong Wang<jiong.wang@arm.com> >>> >>> * config/aarch64/aarch64-arches.def: Add "armv8.2-a". >>> * config/aarch64/aarch64.h (AARCH64_FL_V8_2): New. >>> (AARCH64_FL_F16): New. >>> (AARCH64_FL_FOR_ARCH8_2): New. >>> (AARCH64_ISA_8_2): New. >>> (AARCH64_ISA_F16): New. >>> (TARGET_FP_F16INST): New. >>> (TARGET_SIMD_F16INST): New. >>> * config/aarch64/aarch64-option-extensions.def: New entry >>> for "fp16". >>> * config/aarch64/aarch64-c.c (arch64_update_cpp_builtins): >>> Conditionally define >>> __ARM_FEATURE_FP16_SCALAR_ARITHMETIC and >>> __ARM_FEATURE_FP16_VECTOR_ARITHMETIC. >>> * doc/invoke.texi (AArch64 Options): Document "armv8.2-a" >>> and "fp16". >>> >> >> This is a updated version of this patch, the updates are: >> >> * When enabling "fp16" also enables "fp". >> * When disabling "fp" also disables "fp16". >> * When disabling "fp16" only disables "fp16". >> >> OK for trunk? > > Hi Jiong, > > Some very minor comments below. > >> diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h >> index b15c23f0..d715da7 100644 >> --- a/gcc/config/aarch64/aarch64.h >> +++ b/gcc/config/aarch64/aarch64.h >> @@ -135,6 +135,8 @@ extern unsigned aarch64_architecture_version; >> /* ARMv8.1 architecture extensions. */ >> #define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */ >> #define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1 extensions. */ >> +#define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2 features. */ >> +#define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2 FP16 extensions. */ > > Please add a new "section" for the ARMv8.2-A architecture extensions (just > a new comment that groups them), and s/ARMv8.2/ARMv8.2-A/ throughout this > section (if you'd like to do the follow-up trivial patch for > s/ARMv8.1/ARMv8.1-A/ I'd appreciate that). > >> diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi >> index aa11209..d44bbc0 100644 >> --- a/gcc/doc/invoke.texi >> +++ b/gcc/doc/invoke.texi >> @@ -13035,7 +13035,10 @@ more feature modifiers. This option has the form >> @option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}. >> >> The permissible values for @var{arch} are @samp{armv8-a}, >> -@samp{armv8.1-a} or @var{native}. >> +@samp{armv8.1-a}, @samp{armv8.2-a} or @var{native}. >> + >> +The value @samp{armv8.2-a} implies @samp{armv8.1-a} and enables compiler >> +support for the ARMv8.2 architecture extensions. > > ARMv8.2-A here too please. Why do we need to say that v8.2-a implies v8.1-a, when we don't say that v8.1-a implies v8-a? The whole implies clause seems unnecessary to me. R. > >> >> The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler >> support for the ARMv8.1 architecture extension. In particular, it >> @@ -13140,6 +13143,8 @@ instructions. This is on by default for all possible values for options >> @item lse >> Enable Large System Extension instructions. This is on by default for >> @option{-march=armv8.1-a}. >> +@item fp16 >> +Enable FP16 extension. > > Please add a note here that enabling this extension also enables "fp" > > This is OK for trunk otherwise. > > Thanks, > James > >> >> 2016-06-27 Matthew Wahab <matthew.wahab@arm.com> >> Jiong Wang <jiong.wang@arm.com> >> >> * config/aarch64/aarch64-arches.def: Add "armv8.2-a". >> * config/aarch64/aarch64.h (AARCH64_FL_V8_2): New. >> (AARCH64_FL_F16): New. >> (AARCH64_FL_FOR_ARCH8_2): New. >> (AARCH64_ISA_8_2): New. >> (AARCH64_ISA_F16): New. >> (TARGET_FP_F16INST): New. >> (TARGET_SIMD_F16INST): New. >> * config/aarch64/aarch64-option-extensions.def ("fp16"): New entry. >> ("fp"): Disabling "fp" also disables "fp16". >> * config/aarch64/aarch64-c.c (arch64_update_cpp_builtins): Conditionally define >> __ARM_FEATURE_FP16_SCALAR_ARITHMETIC and __ARM_FEATURE_FP16_VECTOR_ARITHMETIC. >> * doc/invoke.texi (AArch64 Options): Document "armv8.2-a" and "fp16". >
Richard Earnshaw (lists) writes: > On 29/06/16 09:43, James Greenhalgh wrote: >> On Mon, Jun 27, 2016 at 03:58:00PM +0100, Jiong Wang wrote: >>> >>> The permissible values for @var{arch} are @samp{armv8-a}, >>> -@samp{armv8.1-a} or @var{native}. >>> +@samp{armv8.1-a}, @samp{armv8.2-a} or @var{native}. >>> + >>> +The value @samp{armv8.2-a} implies @samp{armv8.1-a} and enables compiler >>> +support for the ARMv8.2 architecture extensions. >> >> ARMv8.2-A here too please. > > Why do we need to say that v8.2-a implies v8.1-a, when we don't say that > v8.1-a implies v8-a? The whole implies clause seems unnecessary to me. > > R. Hi Richard, The describe entries are organized in descending order. "v8.1-a implies v8-a", are right here below. | v >>> The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler >>> support for the ARMv8.1 architecture extension. In particular, it >>> @@ -13140,6 +13143,8 @@ instructions. This is on by default for all possible values for options >>> @item lse >>> Enable Large System Extension instructions. This is on by default for >>> @option{-march=armv8.1-a}. >>> +@item fp16 >>> +Enable FP16 extension. >>
On Mon, Jun 27, 2016 at 7:58 AM, Jiong Wang <jiong.wang@foss.arm.com> wrote: > On 07/06/16 09:46, Jiong Wang wrote: >> >> 2016-06-07 Matthew Wahab<matthew.wahab@arm.com> >> Jiong Wang<jiong.wang@arm.com> >> >> * config/aarch64/aarch64-arches.def: Add "armv8.2-a". >> * config/aarch64/aarch64.h (AARCH64_FL_V8_2): New. >> (AARCH64_FL_F16): New. >> (AARCH64_FL_FOR_ARCH8_2): New. >> (AARCH64_ISA_8_2): New. >> (AARCH64_ISA_F16): New. >> (TARGET_FP_F16INST): New. >> (TARGET_SIMD_F16INST): New. >> * config/aarch64/aarch64-option-extensions.def: New entry for >> "fp16". >> * config/aarch64/aarch64-c.c (arch64_update_cpp_builtins): >> Conditionally define >> __ARM_FEATURE_FP16_SCALAR_ARITHMETIC and >> __ARM_FEATURE_FP16_VECTOR_ARITHMETIC. >> * doc/invoke.texi (AArch64 Options): Document "armv8.2-a" and >> "fp16". >> > > This is a updated version of this patch, the updates are: > > * When enabling "fp16" also enables "fp". > * When disabling "fp" also disables "fp16". > * When disabling "fp16" only disables "fp16". > > OK for trunk? I notice you did not add a profile entry in aarch64-option-extensions.def. Are you going to add this separately? People will use gcc to invoke the assembler and use -mcpu=armv8.2-a+profile on the command line. In fact I already got a request internally to support that. Thanks, Andrew > > 2016-06-27 Matthew Wahab <matthew.wahab@arm.com> > Jiong Wang <jiong.wang@arm.com> > > * config/aarch64/aarch64-arches.def: Add "armv8.2-a". > * config/aarch64/aarch64.h (AARCH64_FL_V8_2): New. > (AARCH64_FL_F16): New. > (AARCH64_FL_FOR_ARCH8_2): New. > (AARCH64_ISA_8_2): New. > (AARCH64_ISA_F16): New. > (TARGET_FP_F16INST): New. > (TARGET_SIMD_F16INST): New. > * config/aarch64/aarch64-option-extensions.def ("fp16"): New entry. > ("fp"): Disabling "fp" also disables "fp16". > > * config/aarch64/aarch64-c.c (arch64_update_cpp_builtins): > Conditionally define > __ARM_FEATURE_FP16_SCALAR_ARITHMETIC and > __ARM_FEATURE_FP16_VECTOR_ARITHMETIC. > * doc/invoke.texi (AArch64 Options): Document "armv8.2-a" and > "fp16". > >
diff --git a/gcc/config/aarch64/aarch64-arches.def b/gcc/config/aarch64/aarch64-arches.def index 1e9d90b..7dcf140 100644 --- a/gcc/config/aarch64/aarch64-arches.def +++ b/gcc/config/aarch64/aarch64-arches.def @@ -32,4 +32,5 @@ AARCH64_ARCH("armv8-a", generic, 8A, 8, AARCH64_FL_FOR_ARCH8) AARCH64_ARCH("armv8.1-a", generic, 8_1A, 8, AARCH64_FL_FOR_ARCH8_1) +AARCH64_ARCH("armv8.2-a", generic, 8_2A, 8, AARCH64_FL_FOR_ARCH8_2) diff --git a/gcc/config/aarch64/aarch64-c.c b/gcc/config/aarch64/aarch64-c.c index e64dc76..3380ed6 100644 --- a/gcc/config/aarch64/aarch64-c.c +++ b/gcc/config/aarch64/aarch64-c.c @@ -95,6 +95,11 @@ aarch64_update_cpp_builtins (cpp_reader *pfile) else cpp_undef (pfile, "__ARM_FP"); + aarch64_def_or_undef (TARGET_FP_F16INST, + "__ARM_FEATURE_FP16_SCALAR_ARITHMETIC", pfile); + aarch64_def_or_undef (TARGET_SIMD_F16INST, + "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC", pfile); + aarch64_def_or_undef (TARGET_SIMD, "__ARM_FEATURE_NUMERIC_MAXMIN", pfile); aarch64_def_or_undef (TARGET_SIMD, "__ARM_NEON", pfile); diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index e8706d1..a10ccf2 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -39,8 +39,8 @@ that are required. Their order is not important. */ /* Enabling "fp" just enables "fp". - Disabling "fp" also disables "simd", "crypto". */ -AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, 0, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO, "fp") + Disabling "fp" also disables "simd", "crypto" and "fp16". */ +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". */ @@ -55,3 +55,7 @@ AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, 0, 0, "crc32") /* Enabling or disabling "lse" only changes "lse". */ AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, 0, 0, "atomics") + +/* Enabling "fp16" also enables "fp". + Disabling "fp16" just disables "fp16". */ +AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, 0, "fp16") diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index b15c23f0..d715da7 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -135,6 +135,8 @@ extern unsigned aarch64_architecture_version; /* ARMv8.1 architecture extensions. */ #define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */ #define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1 extensions. */ +#define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2 features. */ +#define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2 FP16 extensions. */ /* Has FP and SIMD. */ #define AARCH64_FL_FPSIMD (AARCH64_FL_FP | AARCH64_FL_SIMD) @@ -146,6 +148,8 @@ extern unsigned aarch64_architecture_version; #define AARCH64_FL_FOR_ARCH8 (AARCH64_FL_FPSIMD) #define AARCH64_FL_FOR_ARCH8_1 \ (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC | AARCH64_FL_V8_1) +#define AARCH64_FL_FOR_ARCH8_2 \ + (AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_V8_2) /* Macros to test ISA flags. */ @@ -155,6 +159,8 @@ extern unsigned aarch64_architecture_version; #define AARCH64_ISA_SIMD (aarch64_isa_flags & AARCH64_FL_SIMD) #define AARCH64_ISA_LSE (aarch64_isa_flags & AARCH64_FL_LSE) #define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_V8_1) +#define AARCH64_ISA_V8_2 (aarch64_isa_flags & AARCH64_FL_V8_2) +#define AARCH64_ISA_F16 (aarch64_isa_flags & AARCH64_FL_F16) /* Crypto is an optional extension to AdvSIMD. */ #define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO) @@ -165,6 +171,10 @@ extern unsigned aarch64_architecture_version; /* Atomic instructions that can be enabled through the +lse extension. */ #define TARGET_LSE (AARCH64_ISA_LSE) +/* ARMv8.2-A FP16 support that can be enabled through the +fp16 extension. */ +#define TARGET_FP_F16INST (TARGET_FLOAT && AARCH64_ISA_F16) +#define TARGET_SIMD_F16INST (TARGET_SIMD && AARCH64_ISA_F16) + /* Make sure this is always defined so we don't have to check for ifdefs but rather use normal ifs. */ #ifndef TARGET_FIX_ERR_A53_835769_DEFAULT diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index aa11209..d44bbc0 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -13035,7 +13035,10 @@ more feature modifiers. This option has the form @option{-march=@var{arch}@r{@{}+@r{[}no@r{]}@var{feature}@r{@}*}}. The permissible values for @var{arch} are @samp{armv8-a}, -@samp{armv8.1-a} or @var{native}. +@samp{armv8.1-a}, @samp{armv8.2-a} or @var{native}. + +The value @samp{armv8.2-a} implies @samp{armv8.1-a} and enables compiler +support for the ARMv8.2 architecture extensions. The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler support for the ARMv8.1 architecture extension. In particular, it @@ -13140,6 +13143,8 @@ instructions. This is on by default for all possible values for options @item lse Enable Large System Extension instructions. This is on by default for @option{-march=armv8.1-a}. +@item fp16 +Enable FP16 extension. @end table