public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Richard Earnshaw <Richard.Earnshaw@foss.arm.com>
To: Srinath Parvathaneni <srinath.parvathaneni@arm.com>,
	gcc-patches@gcc.gnu.org
Cc: Richard.Earnshaw@arm.com
Subject: Re: [GCC][PATCH] arm: Fix multilib mapping for CDE extensions.
Date: Wed, 2 Jun 2021 15:20:20 +0100	[thread overview]
Message-ID: <cf0042e7-3e78-f21d-342c-259e5126409c@foss.arm.com> (raw)
In-Reply-To: <DB6PR0802MB23575E3FFD7E983F8AB3840A9B3E9@DB6PR0802MB2357.eurprd08.prod.outlook.com>



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..7d8c6e5253f3f1683eed99f479a09186a46c2d22 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..00944f8e9071d6097f703843fee8822d0ee08d6a 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..0859c2dc1d60b98935242fce56b17f5f67fd1509 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..7984806f5fe0e65021daffaa055793890db23228 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..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
>       }
> 

  reply	other threads:[~2021-06-02 14:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-01 17:08 Srinath Parvathaneni
2021-06-02 14:20 ` Richard Earnshaw [this message]
2021-06-10 16:33   ` Srinath Parvathaneni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cf0042e7-3e78-f21d-342c-259e5126409c@foss.arm.com \
    --to=richard.earnshaw@foss.arm.com \
    --cc=Richard.Earnshaw@arm.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=srinath.parvathaneni@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).