Add RDMA support to falkor port.
authorJim Wilson <jim.wilson@linaro.org>
Fri, 21 Jul 2017 21:56:57 +0000 (21:56 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Fri, 21 Jul 2017 21:56:57 +0000 (14:56 -0700)
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

gcc/ChangeLog
gcc/config/aarch64/aarch64-cores.def
gcc/config/aarch64/aarch64-option-extensions.def
gcc/config/aarch64/aarch64.h
gcc/config/aarch64/arm_neon.h
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/lib/target-supports.exp

index 55937a8..cc18d59 100644 (file)
@@ -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
index f8342ca..b8d0ba6 100644 (file)
@@ -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)
index c0752ce..c4f059a 100644 (file)
@@ -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
index 106cf3a..7f91edb 100644 (file)
@@ -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)
index 0753da3..d7b30b0 100644 (file)
@@ -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__))
index dfde403..2bab550 100644 (file)
@@ -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
index 6ee65b1..1b5cc63 100644 (file)
@@ -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
index 97d834c..5a65627 100644 (file)
@@ -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
+           }
        }
     }