[GAS, Arm] CLI with architecture sensitive extensions
Andre Vieira (lists)
andre.simoesdiasvieira@arm.com
Fri Mar 22 13:24:00 GMT 2019
Here is the same patch with some minor comment changes after someone
pointed them out to me.
Cheers,
Andre
On 22/03/2019 10:34, Andre Vieira (lists) wrote:
> Hi,
>
> This patch adds a new framework to add architecture sensitive
> extensions, like GCC does.
> This patch also implements all architecture extensions currently
> available in GCC.
>
> This framework works as follows. To enable architecture sensitive
> extensions for a particular architecture, that architecture must contain
> an ARM_ARCH_OPT2 entry in the 'arm_archs' table.
> All fields here are the same as previous, with the addition of a new
> extra field at the end to <name> it's extension table. This <name>,
> corresponds to a <name>_ext_table of type 'struct arm_ext_table'. This
> struct can be filled with three types of entries:
> ARM_ADD (string <ext>, arm_feature_set <enable_bits>), which means
> +<ext> will enable <enable_bits>
> ARM_REMOVE (string <ext>, arm_feature_set <disable_bits>), which means
> +no<ext> will disable <disable_bits>
> ARM_EXT (string <ext>, arm_feature_set <enable_bits>, arm_feature_set
> <disable_bits>), which means +<ext> will enable <enable_bits> and
> +no<ext> will disable <disable_bits> (this is to be used instead of
> adding an ARM_ADD and ARM_REMOVE for the same <ext>)
>
> This patch does not disable the use of the old extensions, even if some
> of them are duplicated in the new tables. This is a "in-between-step"
> as we may want to deprecate the old table of extensions in later
> patches. For now, GAS will first look for the +<ext> or +no<ext> in the
> new table and if no entry is found it will continue searching in the old
> table, following old behaviour. If only an ARM_ADD or an ARM_REMOVE is
> defined for <ext> and +no<ext> or +<ext> resp. is used then it also
> continues to search the old table for it.
>
> A couple of caveats:
> - This patch does not enable the use of these architecture extensions
> with the
> '.arch_extension' directive. This is future work that I will tend to
> later.
> - This patch does not enable the use of these architecture extensions
> with the
> -mcpu option. This is future work that I will tend to later.
> - This patch does not change the current behaviour when combining an
> architecture extension and using -mfpu on the command-line. The current
> behaviour of GAS is to stage the union of feature bits enabled by both
> -march
> and -mfpu. GCC behaves differently here, so this is something we may
> want to
> revisit on a later date.
>
> For testing I duplicated an attributes test prior to Armv8-A for every
> set of enabled bits by one of the new extensions, I didn't test all
> possible new -march +ext combinations as that would be too much I
> believe. For armv8-a I reused a couple of instruction tests using the
> new extensions. For Armv8-m I added two new tests.
>
> Cheers,
> Andre
>
> gas/ChangeLog:
> 2019-03-** Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> Â Â Â Â Â Â Â * config/tc-arm.c (arm_ext_table): New struct type.
> Â Â Â Â Â Â Â (arm_arch_option_table): Add new 'arm_ext_table' field.
> Â Â Â Â Â Â Â (ARM_EXT,ARM_ADD,ARM_REMOVE, ALL_FP): New macros.
> Â Â Â Â Â Â Â (armv5te_ext_table, armv7ve_ext_table, armv7a_ext_table,
> Â Â Â Â Â Â Â Â armv7r_ext_table, armv7em_ext_table, armv8a_ext_table,
> Â Â Â Â Â Â Â Â armv81a_ext_table, armv82a_ext_table, armv84a_ext_table,
> Â Â Â Â Â Â Â Â armv85a_ext_table, armv8m_main_ext_table,
> Â Â Â Â Â Â Â Â armv8r_ext_table): New architecture extension tables.
> Â Â Â Â Â Â Â (ARM_ARCH_OPT): Add new default field.
> Â Â Â Â Â Â Â (ARM_ARCH_OPT2): New macro.
> Â Â Â Â Â Â Â (arm_archs): Extend some architectures with the new architecture
> Â Â Â Â Â Â Â extension tables mentioned above.
> Â Â Â Â Â Â Â (arm_extensions): Add DEPRECATED comment with instructions to
> use new
> Â Â Â Â Â Â Â table.
> Â Â Â Â Â Â Â (arm_parse_extension): Change to use new extension tables.
> Â Â Â Â Â Â Â (arm_parse_cpu): Don't change existing behavior.
> Â Â Â Â Â Â Â (arm_parse_arch): Change to use new extension tables.
> Â Â Â Â Â Â Â * doc/c-arm.texi: Document new architecture extensions.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-mfpu-neon-fp16.d: Change test to use new
> Â Â Â Â Â Â Â extension option rather than -mfpu and change expected
> behaviour to
> Â Â Â Â Â Â Â sane outputs.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8-2-fp16-scalar-bad-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8-2-fp16-scalar-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8-2-fp16-scalar-thumb-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8-2-fp16-simd-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8-2-fp16-simd-thumb-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8-2-fp16-simd-warning-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8-2-fp16-simd-warning-thumb-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8_2+rdma-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8_2-a-fp16-thumb2-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8_2-a-fp16_ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8_3-a-fp-bad-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8_3-a-fp-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8_3-a-fp16-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8_3-a-simd-bad-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8_4-a-fp16-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8m.main+fp.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/armv8m.main+fp.dp.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-fpv5-d16.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-fpv5.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-idiv.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-mp.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-neon-fp16.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-neon-vfpv3.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-neon-vfpv4.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-sec.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv3-d16-fp16.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv3-d16.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv3-fp16.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv3.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv3xd-fp.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv3xd.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv4-d16.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv4-sp-d16.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/attr-ext-vfpv4.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/dotprod-mandatory-ext.d: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/fpv5-d16.s: New.
> Â Â Â Â Â Â Â * testsuite/gas/arm/fpv5-sp-d16.s: New.
>
> include/ChangeLog:
> 2019-03-** Andre Vieira <andre.simoesdiasvieira@arm.com>
>
> Â Â Â Â Â Â Â * opcode/arm.h (FPU_NEON_ARMV8_1): New.
> Â Â Â Â Â Â Â (FPU_ARCH_NEON_VFP_ARMV8_1): Use FPU_NEON_ARMV8_1.
> Â Â Â Â Â Â Â (FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_1): Likewise.
> Â Â Â Â Â Â Â (FPU_ARCH_DOTPROD_NEON_VFP_ARMV8): Likewise.
> Â Â Â Â Â Â Â (FPU_ARCH_NEON_VFP_ARMV8_2_FP16): New.
> Â Â Â Â Â Â Â (FPU_ARCH_NEON_VFP_ARMV8_2_FP16FML): New.
> Â Â Â Â Â Â Â (FPU_ARCH_NEON_VFP_ARMV8_4_FP16FML): New.
> Â Â Â Â Â Â Â (FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_4): New.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CLI.patch
Type: text/x-patch
Size: 124367 bytes
Desc: not available
URL: <https://sourceware.org/pipermail/binutils/attachments/20190322/aada0081/attachment.bin>
More information about the Binutils
mailing list