Hello, The command line options for target selection allow ARMv8.1 extensions to be individually enabled/disabled. They also allow the extensions to be enabled with -march=armv8-a. This doesn't reflect the ARMv8.1 architecture which requires all extensions to be enabled and doesn't make them available for ARMv8.
This patch removes the options for the individual ARMv8.1 extensions except for +lse. This means that setting -march=armv8.1-a will enable all extensions required by ARMv8.1 and that the ARMv8.1 extensions can't be used with -march=armv8. The exception to this is +lse since there may be existing code expecting to be built with -march=armv8-a+lse. Note that +crc, which is enabled by -march=armv8.1-a, is still an option for -march=armv8-a. This patch depends on the patch series https://gcc.gnu.org/ml/gcc-patches/2015-10/msg02429.html. Tested aarch64-none-elf with cross-compiled check-gcc and aarch64-none-linux-gnu with native bootstrap and make check. Ok for trunk? Matthew gcc/ 2015-11-16 Matthew Wahab <matthew.wa...@arm.com> * config/aarch64/aarch64-options-extensions.def: Remove AARCH64_FL_RDMA from "fp" and "simd". Remove "pan", "lor", "rdma". * config/aarch64/aarch64.h (AARCH64_FL_PAN): Remove. (AARCH64_FL_LOR): Remove. (AARCH64_FL_RDMA): Remove. (AARCH64_FL_V8_1): New. (AARCH64_FL_FOR_AARCH8_1): Replace AARCH64_FL_PAN, AARCH64_FL_LOR and AARCH64_FL_RDMA with AARCH64_FL_V8_1. (AARCH64_ISA_RDMA): Replace AARCH64_FL_RDMA with AARCH64_FL_V8_1. * doc/invoke.texi (AArch64 - Feature Modifiers): Remove "pan", "lor" and "rdma".
>From bc4ea389754127ec639ea2de085a7c82aebae117 Mon Sep 17 00:00:00 2001 From: Matthew Wahab <matthew.wa...@arm.com> Date: Fri, 30 Oct 2015 10:32:59 +0000 Subject: [PATCH] [AArch64] Rework ARMv8.1 command line options. Change-Id: Ib9053719f45980255a3d7727e226a53d9f214049 --- gcc/config/aarch64/aarch64-option-extensions.def | 9 ++++----- gcc/config/aarch64/aarch64.h | 9 +++------ gcc/doc/invoke.texi | 7 ------- 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index b261a0f..4f1d535 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -34,11 +34,10 @@ should contain a whitespace-separated list of the strings in 'Features' that are required. Their order is not important. */ -AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, AARCH64_FL_FPSIMD | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, "fp") -AARCH64_OPT_EXTENSION("simd", AARCH64_FL_FPSIMD, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, "asimd") +AARCH64_OPT_EXTENSION ("fp", AARCH64_FL_FP, + AARCH64_FL_FPSIMD | AARCH64_FL_CRYPTO, "fp") +AARCH64_OPT_EXTENSION ("simd", AARCH64_FL_FPSIMD, + AARCH64_FL_SIMD | AARCH64_FL_CRYPTO, "asimd") AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO | AARCH64_FL_FPSIMD, AARCH64_FL_CRYPTO, "aes pmull sha1 sha2") AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, AARCH64_FL_CRC, "crc32") AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, AARCH64_FL_LSE, "lse") -AARCH64_OPT_EXTENSION("pan", AARCH64_FL_PAN, AARCH64_FL_PAN, "pan") -AARCH64_OPT_EXTENSION("lor", AARCH64_FL_LOR, AARCH64_FL_LOR, "lor") -AARCH64_OPT_EXTENSION("rdma", AARCH64_FL_RDMA | AARCH64_FL_FPSIMD, AARCH64_FL_RDMA, "rdma") diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 68c006f..06345f0 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -134,9 +134,7 @@ extern unsigned aarch64_architecture_version; #define AARCH64_FL_CRC (1 << 3) /* Has CRC. */ /* ARMv8.1 architecture extensions. */ #define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */ -#define AARCH64_FL_PAN (1 << 5) /* Has Privileged Access Never. */ -#define AARCH64_FL_LOR (1 << 6) /* Has Limited Ordering regions. */ -#define AARCH64_FL_RDMA (1 << 7) /* Has ARMv8.1 Adv.SIMD. */ +#define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1 extensions. */ /* Has FP and SIMD. */ #define AARCH64_FL_FPSIMD (AARCH64_FL_FP | AARCH64_FL_SIMD) @@ -147,8 +145,7 @@ extern unsigned aarch64_architecture_version; /* Architecture flags that effect instruction selection. */ #define AARCH64_FL_FOR_ARCH8 (AARCH64_FL_FPSIMD) #define AARCH64_FL_FOR_ARCH8_1 \ - (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_PAN \ - | AARCH64_FL_LOR | AARCH64_FL_RDMA) + (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_V8_1) /* Macros to test ISA flags. */ @@ -157,7 +154,7 @@ extern unsigned aarch64_architecture_version; #define AARCH64_ISA_FP (aarch64_isa_flags & AARCH64_FL_FP) #define AARCH64_ISA_SIMD (aarch64_isa_flags & AARCH64_FL_SIMD) #define AARCH64_ISA_LSE (aarch64_isa_flags & AARCH64_FL_LSE) -#define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_RDMA) +#define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_V8_1) /* Crypto is an optional extension to AdvSIMD. */ #define TARGET_CRYPTO (TARGET_SIMD && AARCH64_ISA_CRYPTO) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 8057ac9..710198a 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -12674,13 +12674,6 @@ instructions. This is on by default for all possible values for options @option{-march} and @option{-mcpu}. @item lse Enable Large System Extension instructions. -@item pan -Enable Privileged Access Never support. -@item lor -Enable Limited Ordering Regions support. -@item rdma -Enable ARMv8.1 Advanced SIMD instructions. This implies Advanced SIMD -is enabled. @end table -- 2.1.4