[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:
parent
99eeb64cc4
commit
946c6c4512
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user