Ping^2
On Tue, Jul 11, 2017 at 1:49 PM, Jim Wilson <jim.wil...@linaro.org> wrote: > Ping. > > Jim > > On Thu, Jun 29, 2017 at 1:53 PM, Jim Wilson <jim.wil...@linaro.org> wrote: >> Falkor is an ARMV8-A part, but also includes the RDMA extension from >> ARMV8.1-A. >> I'd like to enable support for the RDMA instructions when -mcpu=falkor is >> used, >> and also make the RDMA intrisics available. To do that, I need to add rdma >> as an architecture extension, and modify a few things to use it. Binutils >> already supports rdma as an architecture extension. >> >> I only did the aarch64 port, and not the arm port. There are no supported >> targets that have the RDMA instructions and also aarch32 support. There are >> also no aarch32 RDMA testcases. So there is no way to test it. It wasn't >> clear whether it was better to add something untested or leave it out. I >> chose >> to leave it out for now. >> >> I also needed a few testcase changes. There were redundant options being >> added for the RDMA tests that I had to remove as they are now wrong. Also >> the fact that I only did aarch64 means we need to check both armv8-a+rdma and >> armv8.1-a for the rdma support. >> >> This was tested with an aarch64 bootstrap and make check. There were no >> regressions. >> >> OK? >> >> Jim >> >> 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. >> --- >> gcc/config/aarch64/aarch64-cores.def | 4 ++-- >> gcc/config/aarch64/aarch64-option-extensions.def | 4 ++++ >> gcc/config/aarch64/aarch64.h | 8 +++++--- >> gcc/config/aarch64/arm_neon.h | 2 +- >> gcc/doc/invoke.texi | 5 ++++- >> gcc/testsuite/lib/target-supports.exp | 18 ++++++++++-------- >> 6 files changed, 26 insertions(+), 15 deletions(-) >> >> 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 d1e097b..2bd10c6 100644 >> --- a/gcc/doc/invoke.texi >> +++ b/gcc/doc/invoke.texi >> @@ -14082,7 +14082,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 >> @@ -14198,6 +14198,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. >> >> diff --git a/gcc/testsuite/lib/target-supports.exp >> b/gcc/testsuite/lib/target-supports.exp >> index fe5e777..a245eed 100644 >> --- a/gcc/testsuite/lib/target-supports.exp >> +++ b/gcc/testsuite/lib/target-supports.exp >> @@ -3425,7 +3425,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. >> @@ -4115,13 +4115,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 >> + } >> } >> } >> >> -- >> 2.7.4 >>