This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
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)
>