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

Srinath Parvathaneni Srinath.Parvathaneni@arm.com
Thu Jun 10 16:33:38 GMT 2021


Hi Richard,

I have all addressed all your review comments in the trailing in the patch attached.

Please review and let me know if it ok for master?

Regards,
Srinath.  
> -----Original Message-----
> From: Richard Earnshaw <Richard.Earnshaw@foss.arm.com>
> Sent: 02 June 2021 15:20
> To: Srinath Parvathaneni <Srinath.Parvathaneni@arm.com>; gcc-
> patches@gcc.gnu.org
> Cc: Richard Earnshaw <Richard.Earnshaw@arm.com>
> Subject: Re: [GCC][PATCH] arm: Fix multilib mapping for CDE extensions.
> 
> 
> 
> On 01/06/2021 18:08, Srinath Parvathaneni via Gcc-patches wrote:
> > Hi All,
> >
> > 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 -march string only for
> multilib comparison.
> >
> > Regression tested on arm-none-eabi and found no regressions.
> >
> > Ok for master?
> >
> Not as it stands.  More comments below.
> 
> > Regards,
> > Srinath.
> >
> > gcc/ChangeLog:
> >
> > 2021-06-01  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
> >
> > 	PR target/100856
> > 	* common/config/arm/arm-common.c (arm_canon_arch_option):
> Modify
> > 	function to generate canonical march string after removing cde
> related
> > 	compiler extensions.
> > 	(arm_canon_arch_multilib_option): Define function.
> > 	* config/arm/arm-cpus.in (CDE_LIST): Define fgroup.
> > 	* config/arm/arm.h (arm_canon_arch_multilib_option): Define
> macro.
> > 	(CANON_ARCH_MULTILIB_SPEC_FUNCTION): Define macro.
> > 	(ARCH_CANONICAL_MULTILIB_SPECS): Define macro.
> > 	(TARGET_MULTLILIB_ARCH): Define macro.
> > 	* gcc.c (used_arg_t::operator ()): Add condition to generate separate
> > 	march string for multilib matching.
> >
> > gcc/testsuite/ChangeLog:
> >
> > 2021-06-01  Srinath Parvathaneni  <srinath.parvathaneni@arm.com>
> >
> > 	PR target/100856
> > 	* gcc.target/arm/acle/pr100856.c: New test.
> > 	* gcc.target/arm/multilib.exp: Modify.
> >
> >
> >
> > ###############     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..7d8c6e5253f3f1683eed99f479
> a0
> > 9186a46c2d22 100644
> > --- a/gcc/common/config/arm/arm-common.c
> > +++ b/gcc/common/config/arm/arm-common.c
> > @@ -616,6 +616,8 @@ public:
> >       }
> >   };
> >
> > +static int multilib_arch = 0;
> 
> Please, no!  Instead...
> 
> > +
> >   /* Generate 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.  This aids multilib
> > selection @@ -703,6 +705,14 @@ arm_canon_arch_option (int argc, const
> > char **argv)
> 
> This function should be renamed arm_canon_arch_option_1 and given an
> extra (bool) parameter to control the behaviour.  Then
> arm_canon_arch_option can call it with the parameter false to maintain the
> existing behaviour and arm_canon_arch_multilib_option can pass true.
> 
> >         arm_initialize_isa (target_isa, selected_arch->common.isa_bits);
> >         arm_parse_option_features (target_isa, &selected_arch->common,
> >   				 strchr (arch, '+'));
> > +      if (multilib_arch == 1)
> > +	{
> > +	  const enum isa_feature cde_bitlist[] = {ISA_ALL_CDE, isa_nobit};
> 
> This is too specific, but that's mostly a naming problem.  Instead we need a
> new feature group IGNORE_FOR_MULTILIB (which at present just contains
> ALL_CDE).
> 
> > +	  sbitmap isa_cdebits = sbitmap_alloc (isa_num_bits);
> > +	  arm_initialize_isa (isa_cdebits, cde_bitlist);
> > +	  bitmap_and_compl (target_isa, target_isa, isa_cdebits);
> > +	}
> > +
> >         if (fpu && strcmp (fpu, "auto") != 0)
> >   	{
> >   	  /* We assume that architectures do not have any FPU bits @@
> > -786,18 +796,27 @@ arm_canon_arch_option (int argc, const char **argv)
> >
> >     arm_initialize_isa (base_isa, selected_arch->common.isa_bits);
> >
> > -  /* Architecture has no extension options, so just return the canonical
> > -     architecture name.  */
> > -  if (selected_arch->common.extensions == NULL)
> > -    return selected_arch->common.name;
> > -
> >     /* We're only interested in extension bits.  */
> >     bitmap_and_compl (target_isa, target_isa, base_isa);
> >
> > +  /* Architecture has no extension options, so just return the canonical
> > +     architecture name.  */
> > +  if (multilib_arch == 0 && selected_arch->common.extensions == NULL)
> > +    return selected_arch->common.name;
> >     /* There are no extensions needed.  Just return the canonical
> architecture
> >        name.  */
> > -  if (bitmap_empty_p (target_isa))
> > +  else if (multilib_arch == 0 && bitmap_empty_p (target_isa))
> >       return selected_arch->common.name;
> > +  else if (multilib_arch == 1
> > +	   && (selected_arch->common.extensions == NULL
> > +	       || bitmap_empty_p (target_isa)))
> > +    {
> > +      canonical_arch = (char *) xmalloc (strlen (selected_arch-
> >common.name)
> > +					 + strlen ("march="));
> > +      strcpy (canonical_arch, "march=");
> 
> Prepending "march=" only for the multilib_arch variant confuses the purpose
> of this routine, which is to generate a suitable arch string.  I think this should
> be pushed up, perhaps as far as the specs strings themselves.  Then most of
> this hunk just disappears as completely redundant.
> 
> > +      strcat (canonical_arch, selected_arch->common.name);
> > +      return canonical_arch;
> > +    }
> >
> >     /* What is left is the architecture that the compiler will target.  We
> >        now need to map that back into a suitable option+features list.
> > @@ -899,10 +918,20 @@ arm_canon_arch_option (int argc, const char
> **argv)
> >   	}
> >       }
> >
> > -  canonical_arch
> > -    = (char *) xmalloc (len + strlen (selected_arch->common.name));
> > -
> > -  strcpy (canonical_arch, selected_arch->common.name);
> > +  if (multilib_arch == 1)
> > +    {
> > +      canonical_arch
> > +	= (char *) xmalloc (len + strlen (selected_arch->common.name)
> > +			    + strlen ("march="));
> > +      strcpy (canonical_arch, "march=");
> > +      strcat (canonical_arch, selected_arch->common.name);
> > +    }
> > +  else
> > +    {
> > +      canonical_arch
> > +	= (char *) xmalloc (len + strlen (selected_arch->common.name));
> > +      strcpy (canonical_arch, selected_arch->common.name);
> > +    }
> 
> Likewise.
> 
> >
> >     for (std::list<candidate_extension *>::iterator iter = extensions.begin ();
> >          iter != extensions.end (); ++iter) @@ -1069,3 +1098,15 @@
> > 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;
> > +
> > +/* This function returns the canonical -march string 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) {
> > +  char const *multilib_option = NULL;
> > +  multilib_arch = 1;
> > +  multilib_option = arm_canon_arch_option ( argc, argv);
> 
> remove white space before argc.
> 
> > +  multilib_arch = 0;
> 
> See comment earlier.  This function should just be
> 
> const char *
> arm_canon_arch_multilib_option (int argc, const char **argv) {
>    return arm_canon_arch_option_1 (argc, argv, true); }
> 
> > +  return multilib_option;
> > +}
> > diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in
> > index
> >
> 0becb4385b675d0e08ea08c97785cabfa8cf7026..00944f8e9071d6097f703843f
> ee8
> > 822d0ee08d6a 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 ALL_CDE 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..0859c2dc1d60b98935242fc
> e56b1
> > 7f5f67fd1509 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,6 +2481,15 @@ const char *arm_be8_option (int argc, const
> char **argv);
> >     "                     %{mfloat-abi=*: abi %*}"	\
> >     "                     %<march=*) "
> >
> > +/* Generate a canonical string without compiler extension which are not
> needed
> > +   for multilib linking.  */
> > +#define ARCH_CANONICAL_MULTILIB_SPECS	\
> > +  "%{mcpu=*: cpu %*} "			\
> > +  "%{march=*: arch %*} "		\
> > +  "%{mfpu=*: fpu %*} "			\
> > +  "%{mfloat-abi=*: abi %*}"		\
> > +  "%<march=*) "
> > +
> >   /* Complete set of specs for the driver.  Commas separate the
> >      individual rules so that any option suppression (%<opt...)is
> >      completed before starting subsequent rules.  */ @@ -2484,6
> > +2498,8 @@ const char *arm_be8_option (int argc, const char **argv);
> >     TARGET_MODE_SPECS,				\
> >     ARCH_CANONICAL_SPECS
> >
> > +#define TARGET_MULTLILIB_ARCH 1
> > +
> 
> This isn't documented.  But it's no-longer the way we do things anyway.
>   What's needed these days is a hook.
> 
> >   #define TARGET_SUPPORTS_WIDE_INT 1
> >
> >   /* For switching between functions with different target attributes.
> > */ diff --git a/gcc/gcc.c b/gcc/gcc.c index
> >
> 4c1a659d5e8929ed2267694c0d62ce476a099bf5..7984806f5fe0e65021daffaa
> 0557
> > 93890db23228 100644
> > --- a/gcc/gcc.c
> > +++ b/gcc/gcc.c
> > @@ -9414,9 +9414,27 @@ used_arg_t::operator () (const char *p, int len)
> >   	if ((switches[i].live_cond & SWITCH_IGNORE) == 0)
> >   	  {
> >   	    int xlen = strlen (switches[i].part1);
> > +#ifdef TARGET_MULTLILIB_ARCH
> > +	    const char *arch_multilib = NULL;
> > +	    if (!strncmp (switches[i].part1, "march=", strlen ("march=")))
> > +	      {
> > +		arch_multilib
> > +		  = eval_spec_function ("canon_arch_multilib",
> > +					ARCH_CANONICAL_MULTILIB_SPECS,
> NULL);
> > +		xlen = strlen (arch_multilib);
> > +	      }
> > +	    for (j = 0; j < cnt; j++)
> > +	      if (xlen == matches[j].len
> > +		  && ((arch_multilib != NULL
> > +		       && !strncmp (arch_multilib, matches[j].str, xlen))
> > +		      || (arch_multilib == NULL
> > +			  && !strncmp (switches[i].part1, matches[j].str,
> > +				       xlen))))
> > +#else
> 
> This just won't fly.  Firstly, we don't use ifdefs this way in the main code base
> anymore (it needs to be done through hooks if it can't be made completely
> generic).  Secondly, it makes reference to a machine-specific switch name
> directly from machine-independent code.  I don't currently have a strong
> suggestion to make at this point, though, sorry.  Perhaps someone else can
> suggest a way forward.
> 
> >   	    for (j = 0; j < cnt; j++)
> >   	      if (xlen == matches[j].len
> >   		  && ! strncmp (switches[i].part1, matches[j].str, xlen))
> > +#endif
> >   		{
> >   		  mswitches[n_mswitches].str = matches[j].replace;
> >   		  mswitches[n_mswitches].len = matches[j].rep_len; @@ -
> 9425,6
> > +9443,10 @@ used_arg_t::operator () (const char *p, int len)
> >   		  n_mswitches++;
> >   		  break;
> >   		}
> > +#ifdef TARGET_MULTLILIB_ARCH
> > +	    if (arch_multilib != NULL)
> > +	      free (CONST_CAST (char *, arch_multilib)); #endif
> >   	  }
> >
> >         /* Add MULTILIB_DEFAULTS switches too, as long as they were
> > not present 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..5bc030e2e46bf89dfe7f3b9
> d0dab
> > 1e07947e8d5e
> > --- /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..4b30025db8cbdcd37bbb3a0
> be6c3
> > 45b9d48818c4 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
> >       }
> >
-------------- next part --------------
A non-text attachment was scrubbed...
Name: code_diff
Type: application/octet-stream
Size: 20832 bytes
Desc: code_diff
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20210610/695d53c1/attachment-0001.obj>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: changelog (2).txt
URL: <https://gcc.gnu.org/pipermail/gcc-patches/attachments/20210610/695d53c1/attachment-0001.txt>


More information about the Gcc-patches mailing list