[GCC][PATCH] arm: Fix multilib mapping for CDE extensions [PR100856].

Richard Earnshaw Richard.Earnshaw@foss.arm.com
Fri Jun 18 12:15:22 GMT 2021



On 14/06/2021 15:29, Srinath Parvathaneni via Gcc-patches wrote:
> Hi Richard,
> 
> I have all addressed all your review comments (in [1]) in the below patch.
> 
> On passing +cdecp[0-7] extension to the -march string in command line options,
> multilib linking is failing as mentioned in PR100856. This patch fixes this issue by
> generating a separate canonical string by removing compiler options which are not
> required for multilib linking from march string and assign the new string to mlibarch
> option. This mlibarch string is used for multilib comparison.
> 
> Regression tested on arm-none-eabi and found no regressions.
> 
> Ok for master?
> 
> [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-June/571731.html
> 
> Regards,
> Srinath.
> 
> gcc/ChangeLog:
> 
> 2021-06-14  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
> 
> 	PR target/100856
> 	* common/config/arm/arm-common.c (arm_canon_arch_option_1): New function
> 	derived from arm_canon_arch.
> 	(arm_canon_arch_option): Call it.
> 	(arm_canon_arch_multilib_option): New function.
> 	* config/arm/arm-cpus.in (IGNORE_FOR_MULTILIB): New fgroup.
> 	* config/arm/arm.h (arm_canon_arch_multilib_option): New prototype.
> 	(CANON_ARCH_MULTILIB_SPEC_FUNCTION): New macro.
> 	(MULTILIB_ARCH_CANONICAL_SPECS): New macro.
> 	(DRIVER_SELF_SPECS): Add MULTILIB_ARCH_CANONICAL_SPECS.
> 	* config/arm/arm.opt (mlibarch): New option.
> 	* config/arm/t-rmprofile (MULTILIB_MATCHES): For armv8*-m, replace use
> 	of march on RHS with mlibarch.
> 
> gcc/testsuite/ChangeLog:
> 
> 2021-06-14  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
> 
> 	PR target/100856
> 	* gcc.target/arm/acle/pr100856.c: New test.
> 	* gcc.target/arm/multilib.exp: Add tests for cde options.
> 
> 

Yes, this is much better.  Thanks.

OK

R.

> 
> ###############     Attachment also inlined for ease of reply    ###############
> 
> 
> diff --git a/gcc/common/config/arm/arm-common.c b/gcc/common/config/arm/arm-common.c
> index 9980af6885c3dfe68f61fa0f39b23022b4e59c19..481aa9e43d9c73e464e1e992ad7d94c30d2db001 100644
> --- a/gcc/common/config/arm/arm-common.c
> +++ b/gcc/common/config/arm/arm-common.c
> @@ -627,9 +627,15 @@ public:
>      The options array consists of couplets of information where the
>      first item in each couplet is the string describing which option
>      name was selected (arch, cpu, fpu) and the second is the value
> -   passed for that option.  */
> -const char *
> -arm_canon_arch_option (int argc, const char **argv)
> +   passed for that option.
> +
> +   arch_for_multilib is boolean variable taking value true or false.
> +   arch_for_multilib is false when the canonical representation is for -march
> +   option and it is true when canonical representation is for -mlibarch option.
> +   On passing arch_for_multilib true the canonical string generated will be
> +   without the compiler options which are not required for multilib linking.  */
> +static const char *
> +arm_canon_arch_option_1 (int argc, const char **argv, bool arch_for_multilib)
>   {
>     const char *arch = NULL;
>     const char *cpu = NULL;
> @@ -694,8 +700,8 @@ arm_canon_arch_option (int argc, const char **argv)
>     /* First build up a bitmap describing the target architecture.  */
>     if (arch)
>       {
> -      selected_arch = arm_parse_arch_option_name (all_architectures,
> -						  "-march", arch);
> +      selected_arch = arm_parse_arch_option_name (all_architectures, "-march",
> +						  arch, !arch_for_multilib);
>   
>         if (selected_arch == NULL)
>   	return "";
> @@ -703,6 +709,15 @@ arm_canon_arch_option (int argc, const char **argv)
>         arm_initialize_isa (target_isa, selected_arch->common.isa_bits);
>         arm_parse_option_features (target_isa, &selected_arch->common,
>   				 strchr (arch, '+'));
> +      if (arch_for_multilib)
> +	{
> +	  const enum isa_feature removable_bits[] = {ISA_IGNORE_FOR_MULTILIB,
> +						     isa_nobit};
> +	  sbitmap isa_bits = sbitmap_alloc (isa_num_bits);
> +	  arm_initialize_isa (isa_bits, removable_bits);
> +	  bitmap_and_compl (target_isa, target_isa, isa_bits);
> +	}
> +
>         if (fpu && strcmp (fpu, "auto") != 0)
>   	{
>   	  /* We assume that architectures do not have any FPU bits
> @@ -719,7 +734,8 @@ arm_canon_arch_option (int argc, const char **argv)
>     else if (cpu)
>       {
>         const cpu_option *selected_cpu
> -	= arm_parse_cpu_option_name (all_cores, "-mcpu", cpu);
> +	= arm_parse_cpu_option_name (all_cores, "-mcpu", cpu,
> +				     !arch_for_multilib);
>   
>         if (selected_cpu == NULL)
>   	return "";
> @@ -1069,3 +1085,22 @@ arm_asm_auto_mfpu (int argc, const char **argv)
>   #define TARGET_EXCEPT_UNWIND_INFO  arm_except_unwind_info
>   
>   struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
> +
> +/* Returns a canonical representation of the -march option from the current
> +   -march string (if given) and other options on the command line that might
> +   affect the architecture.  */
> +const char *
> +arm_canon_arch_option (int argc, const char **argv)
> +{
> +  return arm_canon_arch_option_1 (argc, argv, false);
> +}
> +
> +/* Returns a canonical representation of the -mlibarch option from the current
> +   -march string (if given) and other options on the command line that might
> +   affect the architecture after removing the compiler extension options which
> +   are not required for multilib linking.  */
> +const char *
> +arm_canon_arch_multilib_option (int argc, const char **argv)
> +{
> +  return arm_canon_arch_option_1 (argc, argv, true);
> +}
> diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
> index 0becb4385b675d0e08ea08c97785cabfa8cf7026..ab4b6acf5ea47b1c788dea8f7878141f2a4018cc 100644
> --- a/gcc/config/arm/arm-cpus.in
> +++ b/gcc/config/arm/arm-cpus.in
> @@ -324,6 +324,8 @@ define implied vfp_base MVE MVE_FP ALL_FP
>   # need to ignore it for matching purposes.
>   define fgroup ALL_QUIRKS   quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale quirk_no_asmcpu
>   
> +define fgroup IGNORE_FOR_MULTILIB cdecp0 cdecp1 cdecp2 cdecp3 cdecp4 cdecp5 cdecp6 cdecp7
> +
>   # Architecture entries
>   # format:
>   # begin arch <name>
> diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h
> index 8e5bd5793237e531aa83d998f5756b459dbcb6a7..015299c15346f1bea59d70fdcb1d19545473b23b 100644
> --- a/gcc/config/arm/arm.h
> +++ b/gcc/config/arm/arm.h
> @@ -2444,10 +2444,14 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
>   #endif
>   
>   const char *arm_canon_arch_option (int argc, const char **argv);
> +const char *arm_canon_arch_multilib_option (int argc, const char **argv);
>   
>   #define CANON_ARCH_SPEC_FUNCTION		\
>     { "canon_arch", arm_canon_arch_option },
>   
> +#define CANON_ARCH_MULTILIB_SPEC_FUNCTION		\
> +  { "canon_arch_multilib", arm_canon_arch_multilib_option },
> +
>   const char *arm_be8_option (int argc, const char **argv);
>   #define BE8_SPEC_FUNCTION			\
>     { "be8_linkopt", arm_be8_option },
> @@ -2456,6 +2460,7 @@ const char *arm_be8_option (int argc, const char **argv);
>     MCPU_MTUNE_NATIVE_FUNCTIONS			\
>     ASM_CPU_SPEC_FUNCTIONS			\
>     CANON_ARCH_SPEC_FUNCTION			\
> +  CANON_ARCH_MULTILIB_SPEC_FUNCTION		\
>     TARGET_MODE_SPEC_FUNCTIONS			\
>     BE8_SPEC_FUNCTION
>   
> @@ -2476,12 +2481,22 @@ const char *arm_be8_option (int argc, const char **argv);
>     "                     %{mfloat-abi=*: abi %*}"	\
>     "                     %<march=*) "
>   
> +/* Generate a canonical string to represent the architecture selected ignoring
> +   the options not required for multilib linking.  */
> +#define MULTILIB_ARCH_CANONICAL_SPECS				\
> +  "-mlibarch=%:canon_arch_multilib(%{mcpu=*: cpu %*} "		\
> +  "				   %{march=*: arch %*} "	\
> +  "				   %{mfpu=*: fpu %*} "		\
> +  "				   %{mfloat-abi=*: abi %*}"	\
> +  "				   %<mlibarch=*) "
> +
>   /* Complete set of specs for the driver.  Commas separate the
>      individual rules so that any option suppression (%<opt...)is
>      completed before starting subsequent rules.  */
>   #define DRIVER_SELF_SPECS			\
>     MCPU_MTUNE_NATIVE_SPECS,			\
>     TARGET_MODE_SPECS,				\
> +  MULTILIB_ARCH_CANONICAL_SPECS,		\
>     ARCH_CANONICAL_SPECS
>   
>   #define TARGET_SUPPORTS_WIDE_INT 1
> diff --git a/gcc/config/arm/arm.opt b/gcc/config/arm/arm.opt
> index d332eb67a9efdfcdc9484485ae6293038b626efc..af478a946b2e9c2b51d0272df7b5fab5cbb971ef 100644
> --- a/gcc/config/arm/arm.opt
> +++ b/gcc/config/arm/arm.opt
> @@ -81,6 +81,12 @@ Specify the name of the target architecture.
>   EnumValue
>   Enum(arm_arch) String(native) Value(-1) DriverOnly
>   
> +; Set to the name of target architecture which is required for
> +; multilib linking.  This option is undocumented becuase it
> +; should not be used by the users.
> +mlibarch=
> +Target RejectNegative JoinedOrMissing NoDWARFRecord DriverOnly Undocumented
> +
>   marm
>   Target RejectNegative Negative(mthumb) InverseMask(THUMB)
>   Generate code in 32 bit ARM state.
> diff --git a/gcc/config/arm/t-rmprofile b/gcc/config/arm/t-rmprofile
> index 19591892f3caae87c7aa00ce2a7ecd0e072aedc5..3e75fcc9635a19f313aa6bef00fd99d7190bb2e9 100644
> --- a/gcc/config/arm/t-rmprofile
> +++ b/gcc/config/arm/t-rmprofile
> @@ -53,10 +53,15 @@ MULTILIB_REQUIRED	+= mthumb/march=armv8.1-m.main+mve/mfloat-abi=hard
>   # Arch Matches
>   MULTILIB_MATCHES	+= march?armv6s-m=march?armv6-m
>   
> +# For all MULITIB_MATCHES for v8-m and above add mlibarch? on the right hand side
> +# of = in the variant string instead of march?.  This is needed becuase all the
> +# MULITIB_MATCHES variant strings are compared with mlibarch option for multilib
> +# linking.
> +
>   # Map all v8-m.main+dsp FP variants down to the variant without DSP.
> -MULTILIB_MATCHES	+= march?armv8-m.main=march?armv8-m.main+dsp \
> +MULTILIB_MATCHES	+= march?armv8-m.main=mlibarch?armv8-m.main+dsp \
>   			   $(foreach FP, +fp +fp.dp, \
> -			     march?armv8-m.main$(FP)=march?armv8-m.main+dsp$(FP))
> +			     march?armv8-m.main$(FP)=mlibarch?armv8-m.main+dsp$(FP))
>   
>   # For single-precision only fpv5, use the base fp libraries
>   MULTILIB_MATCHES	+= march?armv7e-m+fp=march?armv7e-m+fpv5
> @@ -65,10 +70,9 @@ MULTILIB_MATCHES	+= march?armv7e-m+fp=march?armv7e-m+fpv5
>   MULTILIB_REUSE		+= $(foreach ARCH, armv6s-m armv7-m armv7e-m armv8-m\.base armv8-m\.main, \
>   			     mthumb/march.$(ARCH)/mfloat-abi.soft=mthumb/march.$(ARCH)/mfloat-abi.softfp)
>   
> -
>   # Map v8.1-M to v8-M.
> -MULTILIB_MATCHES	+= march?armv8-m.main=march?armv8.1-m.main
> -MULTILIB_MATCHES	+= march?armv8-m.main=march?armv8.1-m.main+dsp
> +MULTILIB_MATCHES	+= march?armv8-m.main=mlibarch?armv8.1-m.main
> +MULTILIB_MATCHES	+= march?armv8-m.main=mlibarch?armv8.1-m.main+dsp
>   MULTILIB_REUSE		+= mthumb/march.armv8-m\.main/mfloat-abi.soft=mthumb/march.armv8\.1-m\.main+mve/mfloat-abi.soft
>   MULTILIB_REUSE		+= mthumb/march.armv8-m\.main/mfloat-abi.soft=mthumb/march.armv8\.1-m\.main+mve/mfloat-abi.softfp
>   
> @@ -77,8 +81,15 @@ v8_1m_dp_variants = +fp.dp +dsp+fp.dp +fp.dp+mve +fp.dp+mve.fp
>   
>   # Map all v8.1-m.main FP sp variants down to v8-m.
>   MULTILIB_MATCHES += $(foreach FP, $(v8_1m_sp_variants), \
> -			     march?armv8-m.main+fp=march?armv8.1-m.main$(FP))
> +			     march?armv8-m.main+fp=mlibarch?armv8.1-m.main$(FP))
>   
>   # Map all v8.1-m.main FP dp variants down to v8-m.
>   MULTILIB_MATCHES += $(foreach FP, $(v8_1m_dp_variants), \
> -			     march?armv8-m.main+fp.dp=march?armv8.1-m.main$(FP))
> +			     march?armv8-m.main+fp.dp=mlibarch?armv8.1-m.main$(FP))
> +
> +# For all the MULTILIB_REQUIRED for v8-m and above, add MULTILIB_MATCHES which
> +# maps mlibarch with march for multilib linking.
> +MULTILIB_MATCHES	+= march?armv8-m.main=mlibarch?armv8-m.main
> +MULTILIB_MATCHES	+= march?armv8-m.main+fp=mlibarch?armv8-m.main+fp
> +MULTILIB_MATCHES	+= march?armv8-m.main+fp.dp=mlibarch?armv8-m.main+fp.dp
> +MULTILIB_MATCHES	+= march?armv8.1-m.main+mve=mlibarch?armv8.1-m.main+mve
> diff --git a/gcc/testsuite/gcc.target/arm/acle/pr100856.c b/gcc/testsuite/gcc.target/arm/acle/pr100856.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..5bc030e2e46bf89dfe7f3b9d0dab1e07947e8d5e
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/arm/acle/pr100856.c
> @@ -0,0 +1,10 @@
> +/* { dg-do run } */
> +/* { dg-require-effective-target arm_v8_1m_main_cde_mve_ok } */
> +/* { dg-add-options arm_v8_1m_main_cde_mve } */
> +
> +#include "arm_cde.h"
> +
> +int main()
> +{
> +  return 0;
> +}
> diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp
> index 46f2d86de3c05c184b2ec12af53e2053ddc3b157..4b30025db8cbdcd37bbb3a0be6c345b9d48818c4 100644
> --- a/gcc/testsuite/gcc.target/arm/multilib.exp
> +++ b/gcc/testsuite/gcc.target/arm/multilib.exp
> @@ -840,6 +840,119 @@ if {[multilib_config "rmprofile"] } {
>   	{-mcpu=cortex-m55+nomve+nofp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
>   	{-mcpu=cortex-m55+nodsp+nofp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
>   	{-mcpu=cortex-m55+nodsp+nofp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=vfpv3xd -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+cdecp0 -mfpu=vfpv3xd -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8-m.main+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=vfpv3xd -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=vfpv3xd -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=vfpv3xd-fp16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv4-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv5-sp-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp.dp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp+dsp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8-m.main+fp.dp+dsp+cdecp0 -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8.1-m.main+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+dsp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+dsp+fp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+dsp+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+dsp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+dsp+fp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8.1-m.main+dsp+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8.1-m.main+dsp+fp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8.1-m.main+dsp+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8.1-m.main+mve+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+mve.fp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+mve+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+mve.fp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8.1-m.main+mve+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8.1-m.main+mve/hard"
> +	{-march=armv8.1-m.main+mve+fp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8.1-m.main+mve+fp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+fp/softfp"
> +	{-march=armv8.1-m.main+mve.fp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+fp/hard"
> +	{-march=armv8.1-m.main+mve+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+mve.fp+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp"
> +	{-march=armv8.1-m.main+mve+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8.1-m.main+mve.fp+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp"
> +	{-march=armv8.1-m.main+mve+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
> +	{-march=armv8.1-m.main+mve.fp+fp.dp+cdecp0 -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard"
>       } {
>   	check_multi_dir $opts $dir
>       }
> 


More information about the Gcc-patches mailing list