aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <jim.wilson@linaro.org>2017-07-21 21:56:57 +0000
committerJim Wilson <wilson@gcc.gnu.org>2017-07-21 14:56:57 -0700
commit43f84f6c0b347bbe857aabc8ff795a5e859c690b (patch)
treed61ecd9d9e44195ed05cab7b4db246c9c226b755 /gcc
parent0901429d474107af56cef0a72da6cedf9d42fcfc (diff)
downloadgcc-43f84f6c0b347bbe857aabc8ff795a5e859c690b.zip
gcc-43f84f6c0b347bbe857aabc8ff795a5e859c690b.tar.gz
gcc-43f84f6c0b347bbe857aabc8ff795a5e859c690b.tar.bz2
Add RDMA support to falkor port.
gcc/ * config/aarch64/aarch64-cores.def (falkor): Add AARCH64_FL_RDMA. (qdf24xx): Likewise. * config/aarch64/aarch64-options-extensions.def (rdma); New. * config/aarch64/aarch64.h (AARCH64_FL_RDMA): New. (AARCH64_FL_V8_1): Renumber. (AARCH64_FL_FOR_ARCH8_1): Add AARCH64_FL_RDMA. (AARCH64_ISA_RDMA): Use AARCH64_FL_RDMA. * config/aarch64/arm_neon.h: Use +rdma instead of arch=armv8.1-a. * doc/invoke.texi (AArch64 Options): Mention +rmda in -march docs. Add rdma to feature modifiers list. gcc/testsuite/ * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Delete redundant -march option. (check_effective_target_arm_v8_1a_neon_ok_nocache): Try armv8-a+rdma in addition to armv8.1-a. From-SVN: r250444
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog13
-rw-r--r--gcc/config/aarch64/aarch64-cores.def4
-rw-r--r--gcc/config/aarch64/aarch64-option-extensions.def4
-rw-r--r--gcc/config/aarch64/aarch64.h8
-rw-r--r--gcc/config/aarch64/arm_neon.h2
-rw-r--r--gcc/doc/invoke.texi5
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/lib/target-supports.exp18
8 files changed, 46 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 55937a8..cc18d59 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,16 @@
+2017-07-21 Jim Wilson <jim.wilson@linaro.org>
+
+ * config/aarch64/aarch64-cores.def (falkor): Add AARCH64_FL_RDMA.
+ (qdf24xx): Likewise.
+ * config/aarch64/aarch64-options-extensions.def (rdma); New.
+ * config/aarch64/aarch64.h (AARCH64_FL_RDMA): New.
+ (AARCH64_FL_V8_1): Renumber.
+ (AARCH64_FL_FOR_ARCH8_1): Add AARCH64_FL_RDMA.
+ (AARCH64_ISA_RDMA): Use AARCH64_FL_RDMA.
+ * config/aarch64/arm_neon.h: Use +rdma instead of arch=armv8.1-a.
+ * doc/invoke.texi (AArch64 Options): Mention +rmda in -march docs. Add
+ rdma to feature modifiers list.
+
2017-07-21 Yury Gribov <tetra2005@gmail.com>
PR middle-end/56727
diff --git a/gcc/config/aarch64/aarch64-cores.def b/gcc/config/aarch64/aarch64-cores.def
index f8342ca..b8d0ba6 100644
--- a/gcc/config/aarch64/aarch64-cores.def
+++ b/gcc/config/aarch64/aarch64-cores.def
@@ -65,8 +65,8 @@ AARCH64_CORE("thunderxt83", thunderxt83, thunderx, 8A, AARCH64_FL_FOR_ARCH
AARCH64_CORE("xgene1", xgene1, xgene1, 8A, AARCH64_FL_FOR_ARCH8, xgene1, 0x50, 0x000, -1)
/* Qualcomm ('Q') cores. */
-AARCH64_CORE("falkor", falkor, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, qdf24xx, 0x51, 0xC00, -1)
-AARCH64_CORE("qdf24xx", qdf24xx, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, qdf24xx, 0x51, 0xC00, -1)
+AARCH64_CORE("falkor", falkor, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, qdf24xx, 0x51, 0xC00, -1)
+AARCH64_CORE("qdf24xx", qdf24xx, cortexa57, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO | AARCH64_FL_RDMA, qdf24xx, 0x51, 0xC00, -1)
/* Samsung ('S') cores. */
AARCH64_CORE("exynos-m1", exynosm1, exynosm1, 8A, AARCH64_FL_FOR_ARCH8 | AARCH64_FL_CRC | AARCH64_FL_CRYPTO, exynosm1, 0x53, 0x001, -1)
diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def
index c0752ce..c4f059a 100644
--- a/gcc/config/aarch64/aarch64-option-extensions.def
+++ b/gcc/config/aarch64/aarch64-option-extensions.def
@@ -63,4 +63,8 @@ AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, 0, "fphp asimdhp")
/* Enabling or disabling "rcpc" only changes "rcpc". */
AARCH64_OPT_EXTENSION("rcpc", AARCH64_FL_RCPC, 0, 0, "lrcpc")
+/* Enabling "rdma" also enables "fp", "simd".
+ Disabling "rdma" just disables "rdma". */
+AARCH64_OPT_EXTENSION("rdma", AARCH64_FL_RDMA, AARCH64_FL_FP | AARCH64_FL_SIMD, 0, "rdma")
+
#undef AARCH64_OPT_EXTENSION
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 106cf3a..7f91edb 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -144,7 +144,8 @@ extern unsigned aarch64_architecture_version;
#define AARCH64_FL_CRC (1 << 3) /* Has CRC. */
/* ARMv8.1-A architecture extensions. */
#define AARCH64_FL_LSE (1 << 4) /* Has Large System Extensions. */
-#define AARCH64_FL_V8_1 (1 << 5) /* Has ARMv8.1-A extensions. */
+#define AARCH64_FL_RDMA (1 << 5) /* Has Round Double Multiply Add. */
+#define AARCH64_FL_V8_1 (1 << 6) /* Has ARMv8.1-A extensions. */
/* ARMv8.2-A architecture extensions. */
#define AARCH64_FL_V8_2 (1 << 8) /* Has ARMv8.2-A features. */
#define AARCH64_FL_F16 (1 << 9) /* Has ARMv8.2-A FP16 extensions. */
@@ -161,7 +162,8 @@ 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_CRC | AARCH64_FL_V8_1)
+ (AARCH64_FL_FOR_ARCH8 | AARCH64_FL_LSE | AARCH64_FL_CRC \
+ | AARCH64_FL_RDMA | AARCH64_FL_V8_1)
#define AARCH64_FL_FOR_ARCH8_2 \
(AARCH64_FL_FOR_ARCH8_1 | AARCH64_FL_V8_2)
#define AARCH64_FL_FOR_ARCH8_3 \
@@ -174,7 +176,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_V8_1)
+#define AARCH64_ISA_RDMA (aarch64_isa_flags & AARCH64_FL_RDMA)
#define AARCH64_ISA_V8_2 (aarch64_isa_flags & AARCH64_FL_V8_2)
#define AARCH64_ISA_F16 (aarch64_isa_flags & AARCH64_FL_F16)
#define AARCH64_ISA_V8_3 (aarch64_isa_flags & AARCH64_FL_V8_3)
diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h
index 0753da3..d7b30b0 100644
--- a/gcc/config/aarch64/arm_neon.h
+++ b/gcc/config/aarch64/arm_neon.h
@@ -12162,7 +12162,7 @@ vbslq_u64 (uint64x2_t __a, uint64x2_t __b, uint64x2_t __c)
/* ARMv8.1-A instrinsics. */
#pragma GCC push_options
-#pragma GCC target ("arch=armv8.1-a")
+#pragma GCC target ("+nothing+rdma")
__extension__ extern __inline int16x4_t
__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index dfde403..2bab550 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -14084,7 +14084,7 @@ support for the ARMv8.2-A architecture extensions.
The value @samp{armv8.1-a} implies @samp{armv8-a} and enables compiler
support for the ARMv8.1-A architecture extension. In particular, it
-enables the @samp{+crc} and @samp{+lse} features.
+enables the @samp{+crc}, @samp{+lse}, and @samp{+rdma} features.
The value @samp{native} is available on native AArch64 GNU/Linux and
causes the compiler to pick the architecture of the host system. This
@@ -14202,6 +14202,9 @@ instructions. This is on by default for all possible values for options
@item lse
Enable Large System Extension instructions. This is on by default for
@option{-march=armv8.1-a}.
+@item rdma
+Enable Round Double Multiply Accumulate instructions. This is on by default
+for @option{-march=armv8.1-a}.
@item fp16
Enable FP16 extension. This also enables floating-point instructions.
@item rcpc
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6ee65b1..1b5cc63 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2017-07-21 Jim Wilson <jim.wilson@linaro.org>
+
+ * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Delete
+ redundant -march option.
+ (check_effective_target_arm_v8_1a_neon_ok_nocache): Try armv8-a+rdma
+ in addition to armv8.1-a.
+
2017-07-21 Yury Gribov <tetra2005@gmail.com>
PR middle-end/56727
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 97d834c..5a65627 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -3436,7 +3436,7 @@ proc add_options_for_arm_v8_1a_neon { flags } {
return "$flags"
}
global et_arm_v8_1a_neon_flags
- return "$flags $et_arm_v8_1a_neon_flags -march=armv8.1-a"
+ return "$flags $et_arm_v8_1a_neon_flags"
}
# Add the options needed for ARMv8.2 with the scalar FP16 extension.
@@ -4127,13 +4127,15 @@ proc check_effective_target_arm_v8_1a_neon_ok_nocache { } {
# since AArch64 only needs the -march setting.
foreach flags {"" "-mfpu=neon-fp-armv8" "-mfloat-abi=softfp" \
"-mfpu=neon-fp-armv8 -mfloat-abi=softfp"} {
- if { [check_no_compiler_messages_nocache arm_v8_1a_neon_ok object {
- #if !defined (__ARM_FEATURE_QRDMX)
- #error "__ARM_FEATURE_QRDMX not defined"
- #endif
- } "$flags -march=armv8.1-a"] } {
- set et_arm_v8_1a_neon_flags "$flags -march=armv8.1-a"
- return 1
+ foreach arches { "-march=armv8-a+rdma" "-march=armv8.1-a" } {
+ if { [check_no_compiler_messages_nocache arm_v8_1a_neon_ok object {
+ #if !defined (__ARM_FEATURE_QRDMX)
+ #error "__ARM_FEATURE_QRDMX not defined"
+ #endif
+ } "$flags $arches"] } {
+ set et_arm_v8_1a_neon_flags "$flags $arches"
+ return 1
+ }
}
}