[arm][1/3] Add -march=armv8.4-a option

This patch adds support for the Armv8.4-A architecture [1]
in the arm backend. This is done through the new
-march=armv8.4-a option.

With this patch armv8.4-a is recognised as an argument
and supports the extensions: simd, fp16, crypto, nocrypto,
nofp with the familiar meaning of these options.
Worth noting that there is no dotprod option like in
armv8.2-a and armv8.3-a because Dot Product support is
mandatory in Armv8.4-A when simd is available, so when using
+simd (of fp16 which enables +simd), the +dotprod is implied.

The various multilib selection makefile fragments are updated
too and the mutlilib.exp test gets a few armv8.4-a combination
tests.

Bootstrapped and tested on arm-none-linux-gnueabihf.

From-SVN: r256537
This commit is contained in:
Kyrylo Tkachov 2018-01-11 15:18:04 +00:00 committed by Kyrylo Tkachov
parent 99eeb64cc4
commit 946c6c4512
9 changed files with 89 additions and 7 deletions

View File

@ -1,3 +1,15 @@
2017-01-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* config/arm/arm-cpus.in (armv8_4): New feature.
(ARMv8_4a): New fgroup.
(armv8.4-a): New arch.
* config/arm/arm-tables.opt: Regenerate.
* config/arm/t-aprofile: Add matching rules for -march=armv8.4-a.
* config/arm/t-arm-elf (all_v8_archs): Add armv8.4-a.
* config/arm/t-multilib (v8_4_a_simd_variants): New variable.
Add matching rules for -march=armv8.4-a and extensions.
* doc/invoke.texi (ARM Options): Document -march=armv8.4-a.
2018-01-11 Oleg Endo <olegendo@gcc.gnu.org>
PR target/81821

View File

@ -120,6 +120,9 @@ define feature armv8_2
# Architecture rel 8.3.
define feature armv8_3
# Architecture rel 8.4.
define feature armv8_4
# M-Profile security extensions.
define feature cmse
@ -242,6 +245,7 @@ define fgroup ARMv8a ARMv7ve armv8
define fgroup ARMv8_1a ARMv8a crc32 armv8_1
define fgroup ARMv8_2a ARMv8_1a armv8_2
define fgroup ARMv8_3a ARMv8_2a armv8_3
define fgroup ARMv8_4a ARMv8_3a armv8_4
define fgroup ARMv8m_base ARMv6m armv8 cmse tdiv
define fgroup ARMv8m_main ARMv7m armv8 cmse
define fgroup ARMv8r ARMv8a
@ -597,6 +601,19 @@ begin arch armv8.3-a
option dotprod add FP_ARMv8 DOTPROD
end arch armv8.3-a
begin arch armv8.4-a
tune for cortex-a53
tune flags CO_PROC
base 8A
profile A
isa ARMv8_4a
option simd add FP_ARMv8 DOTPROD
option fp16 add fp16 FP_ARMv8 DOTPROD
option crypto add FP_ARMv8 CRYPTO DOTPROD
option nocrypto remove ALL_CRYPTO
option nofp remove ALL_FP
end arch armv8.4-a
begin arch armv8-m.base
tune for cortex-m23
base 8M_BASE

View File

@ -455,19 +455,22 @@ EnumValue
Enum(arm_arch) String(armv8.3-a) Value(29)
EnumValue
Enum(arm_arch) String(armv8-m.base) Value(30)
Enum(arm_arch) String(armv8.4-a) Value(30)
EnumValue
Enum(arm_arch) String(armv8-m.main) Value(31)
Enum(arm_arch) String(armv8-m.base) Value(31)
EnumValue
Enum(arm_arch) String(armv8-r) Value(32)
Enum(arm_arch) String(armv8-m.main) Value(32)
EnumValue
Enum(arm_arch) String(iwmmxt) Value(33)
Enum(arm_arch) String(armv8-r) Value(33)
EnumValue
Enum(arm_arch) String(iwmmxt2) Value(34)
Enum(arm_arch) String(iwmmxt) Value(34)
EnumValue
Enum(arm_arch) String(iwmmxt2) Value(35)
Enum
Name(arm_fpu) Type(enum fpu_type)

View File

@ -96,6 +96,13 @@ MULTILIB_MATCHES += $(foreach ARCH, $(v8_2_a_simd_variants), \
march?armv8-a+simd=march?armv8.2-a$(ARCH) \
march?armv8-a+simd=march?armv8.3-a$(ARCH))
# Baseline v8.4-a: map down to baseline v8-a
MULTILIB_MATCHES += march?armv8-a=march?armv8.4-a
# Map all v8.4-a SIMD variants to v8-a+simd
MULTILIB_MATCHES += $(foreach ARCH, $(v8_4_a_simd_variants), \
march?armv8-a+simd=march?armv8.4-a$(ARCH))
# Use Thumb libraries for everything.
MULTILIB_REUSE += mthumb/march.armv7-a/mfloat-abi.soft=marm/march.armv7-a/mfloat-abi.soft

View File

@ -46,7 +46,7 @@ all_early_arch := armv5e armv5tej armv6 armv6j armv6k armv6z armv6kz \
all_v7_a_r := armv7-a armv7ve armv7-r
all_v8_archs := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a
all_v8_archs := armv8-a armv8-a+crc armv8.1-a armv8.2-a armv8.3-a armv8.4-a
# No floating point variants, require thumb1 softfp
all_nofp_t := armv6-m armv6s-m armv8-m.base

View File

@ -69,7 +69,7 @@ v8_a_nosimd_variants := +crc
v8_a_simd_variants := $(call all_feat_combs, simd crypto)
v8_1_a_simd_variants := $(call all_feat_combs, simd crypto)
v8_2_a_simd_variants := $(call all_feat_combs, simd fp16 crypto dotprod)
v8_4_a_simd_variants := $(call all_feat_combs, simd fp16 crypto)
ifneq (,$(HAS_APROFILE))
include $(srcdir)/config/arm/t-aprofile
@ -147,6 +147,13 @@ MULTILIB_MATCHES += $(foreach ARCH, $(v8_2_a_simd_variants), \
march?armv7+fp=march?armv8.2-a$(ARCH) \
march?armv7+fp=march?armv8.3-a$(ARCH))
# Baseline v8.4-a: map down to baseline v8-a
MULTILIB_MATCHES += march?armv7=march?armv8.4-a
# Map all v8.4-a SIMD variants
MULTILIB_MATCHES += $(foreach ARCH, $(v8_4_a_simd_variants), \
march?armv7+fp=march?armv8.4-a$(ARCH))
# Use Thumb libraries for everything.
MULTILIB_REUSE += mthumb/march.armv7/mfloat-abi.soft=marm/march.armv7/mfloat-abi.soft

View File

@ -15676,6 +15676,7 @@ Permissible names are:
@samp{armv6z}, @samp{armv6zk},
@samp{armv7}, @samp{armv7-a}, @samp{armv7ve},
@samp{armv8-a}, @samp{armv8.1-a}, @samp{armv8.2-a}, @samp{armv8.3-a},
@samp{armv8.4-a},
@samp{armv7-r},
@samp{armv8-r},
@samp{armv6-m}, @samp{armv6s-m},
@ -15897,6 +15898,28 @@ Disable the cryptographic extension.
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@end table
@item armv8.4-a
@table @samp
@item +fp16
The half-precision floating-point data processing instructions.
This also enables the Advanced SIMD and floating-point instructions as well
as the Dot Product extension.
@item +simd
The ARMv8.3-A Advanced SIMD and floating-point instructions as well as the
Dot Product extension.
@item +crypto
The cryptographic instructions. This also enables the Advanced SIMD and
floating-point instructions as well as the Dot Product extension.
@item +nocrypto
Disable the cryptographic extension.
@item +nofp
Disable the floating-point, Advanced SIMD and cryptographic instructions.
@end table
@item armv7-r
@table @samp
@item +fp.sp

View File

@ -1,3 +1,8 @@
2017-01-11 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
* gcc.target/arm/multilib.exp: Add some -march=armv8.4-a
combination tests.
2018-01-11 Richard Biener <rguenther@suse.de>
PR tree-optimization/83435

View File

@ -92,6 +92,14 @@ if {[multilib_config "aprofile"] } {
{-march=armv8.3-a+simd+dotprod -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
{-march=armv8.3-a+simd+dotprod+nofp -mfloat-abi=softfp} "thumb/v8-a/nofp"
{-march=armv8.3-a+simd+nofp+dotprod -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
{-march=armv8.4-a+crypto -mfloat-abi=soft} "thumb/v8-a/nofp"
{-march=armv8.4-a+simd+crypto -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
{-march=armv8.4-a+simd+crypto+nofp -mfloat-abi=softfp} "thumb/v8-a/nofp"
{-march=armv8.4-a+simd+nofp+crypto -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
{-march=armv8.4-a+fp16 -mfloat-abi=soft} "thumb/v8-a/nofp"
{-march=armv8.4-a+simd+fp16 -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
{-march=armv8.4-a+simd+fp16+nofp -mfloat-abi=softfp} "thumb/v8-a/nofp"
{-march=armv8.4-a+simd+nofp+fp16 -mfloat-abi=softfp} "thumb/v8-a+simd/softfp"
{-mcpu=cortex-a53+crypto -mfloat-abi=hard} "thumb/v8-a+simd/hard"
{-mcpu=cortex-a53+nofp -mfloat-abi=softfp} "thumb/v8-a/nofp"
{-march=armv8-a+crc -mfloat-abi=hard -mfpu=vfp} "thumb/v8-a+simd/hard"