This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 3/10, GAS/ARM] Simplify Tag_DSP_extension selection logic


On 21/06/17 11:06, Thomas Preudhomme wrote:
> Hi,
> 
> === Context ===
> 
> This patch is part of a patch series to add support for ARMv8-R
> architecture. Its purpose is to simplify the logic to decide whether to
> set Tag_DSP_extension.
> 
> === Motivation ===
> 
> To decide whether to set Tag_DSP_extension, the current code was
> checking whether the flags had DSP instruction but the architecture
> selected for Tag_CPU_arch did not have any. This was necessary because
> extension feature bit were not available separately. This is no longer
> necessary and can be simplified.
> 
> === Patch description ===
> 
> The patch change the logic to set Tag_DSP_extension to check whether any
> DSP feature bit is set in the extension feature bit, as per the
> definition of that build attribute. The patch also removes all
> definitions of arm_arch which is now unneeded.
> 
> ChangeLog entry is as follows:
> 
> *** gas/ChangeLog ***
> 
> 2017-01-26  Thomas Preud'homme  <thomas.preudhomme@arm.com>
> 
>     * config/tc-arm.c (aeabi_set_public_attributes): Test *mcpu_ext_opt to
>     decide whether to set Tag_DSP_extension build attribute value.  Remove
>     now useless arm_arch variable.
> 
> === Testing ===
> 
> Testsuite shows no regression when run for arm-none-eabi targets.
> 
> Is this ok for master branch?
> 

OK.

R.
> Best regards,
> 
> Thomas
> 
> 03_simplify_tag_DSP_extension_selection.patch
> 
> 
> diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
> index 3a7b7a6f345393ab66444a128a5288af2bcf439a..72fd1cc9854428577f1f98ab7703bf4dbdb9cbd5 100644
> --- a/gas/config/tc-arm.c
> +++ b/gas/config/tc-arm.c
> @@ -26572,7 +26572,6 @@ aeabi_set_public_attributes (void)
>    char profile;
>    int virt_sec = 0;
>    int fp16_optional = 0;
> -  arm_feature_set arm_arch = ARM_ARCH_NONE;
>    arm_feature_set flags;
>    arm_feature_set tmp;
>    arm_feature_set arm_arch_v8m_base = ARM_ARCH_V8M_BASE;
> @@ -26612,7 +26611,6 @@ aeabi_set_public_attributes (void)
>        if (ARM_CPU_HAS_FEATURE (tmp, p->flags))
>  	{
>  	  arch = p->val;
> -	  arm_arch = p->flags;
>  	  ARM_CLEAR_FEATURE (tmp, tmp, p->flags);
>  	}
>      }
> @@ -26629,27 +26627,18 @@ aeabi_set_public_attributes (void)
>        && !ARM_CPU_HAS_FEATURE (flags, arm_ext_v7a)
>        && ARM_CPU_HAS_FEATURE (flags, arm_ext_v7m)
>        && ARM_CPU_HAS_FEATURE (flags, arm_ext_v6_dsp))
> -    {
> -      arch = TAG_CPU_ARCH_V7E_M;
> -      arm_arch = (arm_feature_set) ARM_ARCH_V7EM;
> -    }
> +    arch = TAG_CPU_ARCH_V7E_M;
>  
>    ARM_CLEAR_FEATURE (tmp, flags, arm_arch_v8m_base);
>    if (arch == TAG_CPU_ARCH_V8M_BASE && ARM_CPU_HAS_FEATURE (tmp, arm_arch_any))
> -    {
> -      arch = TAG_CPU_ARCH_V8M_MAIN;
> -      arm_arch = (arm_feature_set) ARM_ARCH_V8M_MAIN;
> -    }
> +    arch = TAG_CPU_ARCH_V8M_MAIN;
>  
>    /* In cpu_arch_ver ARMv8-A is before ARMv8-M for atomics to be detected as
>       coming from ARMv8-A.  However, since ARMv8-A has more instructions than
>       ARMv8-M, -march=all must be detected as ARMv8-A.  */
>    if (arch == TAG_CPU_ARCH_V8M_MAIN
>        && ARM_FEATURE_CORE_EQUAL (selected_cpu, arm_arch_any))
> -    {
> -      arch = TAG_CPU_ARCH_V8;
> -      arm_arch = (arm_feature_set) ARM_ARCH_V8A;
> -    }
> +    arch = TAG_CPU_ARCH_V8;
>  
>    /* Tag_CPU_name.  */
>    if (selected_cpu_name[0])
> @@ -26688,15 +26677,8 @@ aeabi_set_public_attributes (void)
>      aeabi_set_attribute_int (Tag_CPU_arch_profile, profile);
>  
>    /* Tag_DSP_extension.  */
> -  if (ARM_CPU_HAS_FEATURE (flags, arm_ext_dsp))
> -    {
> -      arm_feature_set ext;
> -
> -      /* DSP instructions not in architecture.  */
> -      ARM_CLEAR_FEATURE (ext, flags, arm_arch);
> -      if (ARM_CPU_HAS_FEATURE (ext, arm_ext_dsp))
> -	aeabi_set_attribute_int (Tag_DSP_extension, 1);
> -    }
> +  if (dyn_mcpu_ext_opt && ARM_CPU_HAS_FEATURE (*dyn_mcpu_ext_opt, arm_ext_dsp))
> +    aeabi_set_attribute_int (Tag_DSP_extension, 1);
>  
>    /* Tag_ARM_ISA_use.  */
>    if (ARM_CPU_HAS_FEATURE (flags, arm_ext_v1)
> 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]