Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
On 10/12/15 10:49, Ramana Radhakrishnan wrote: On Mon, Dec 7, 2015 at 4:10 PM, Matthew Wahabwrote: On 27/11/15 17:11, Matthew Wahab wrote: On 27/11/15 13:44, Christophe Lyon wrote: On 26/11/15 16:02, Matthew Wahab wrote This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM tests to specify targest and to set up command line options. It builds on the ARMv8.1 target support added for AArch64 tests, partly reworking that support to take into account the different configurations that tests may be run under. [..] # Return 1 if the target supports the ARMv8.1 Adv.SIMD extension, 0 -# otherwise. The test is valid for AArch64. +# otherwise. The test is valid for AArch64 and ARM. Record the command +# line options that needed. s/that// Fixed in attached patch. Can you also make sure doc/sourcebuild.texi is updated for this helper function ? If not documented,it would be good to add the documentation for the same while you are here. Done, I've listed them as ARM attributes based on their names. Tested this and the other update patch (#4/7) for arm-none-eabi with cross-compiled check-gcc by running the gcc.target/aarch64/advsimd-intrinsics with and without ARMv8.1 enabled as a test target. Ok? Matthew testsuite/ 2015-12-14 Matthew Wahab * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Update comment. Use check_effective_target_arm_v8_1a_neon_ok to select the command line options. (check_effective_target_arm_v8_1a_neon_ok_nocache): Update initial test to allow ARM targets. Select and record a working set of command line options. (check_effective_target_arm_v8_1a_neon_hw): Add tests for ARM targets. gcc/ 2015-12-14 Matthew Wahab * doc/sourcebuild.texi (ARM-specific attributes): Add "arm_v8_1a_neon_ok" and "arm_v8_1a_neon_hw". >From d6a4dfd89cfb29aeaa0e2d58ac9d8271b31879c1 Mon Sep 17 00:00:00 2001 From: Matthew Wahab Date: Fri, 9 Oct 2015 17:38:12 +0100 Subject: [PATCH 5/7] [Testsuite] Support ARMv8.1 NEON on ARM. --- gcc/doc/sourcebuild.texi | 9 ++ gcc/testsuite/lib/target-supports.exp | 60 ++- 2 files changed, 54 insertions(+), 15 deletions(-) diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 61de4a5..cd49e6d8 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -1582,6 +1582,15 @@ Some multilibs may be incompatible with these options. ARM target supports @code{-mfpu=neon-fp-armv8 -mfloat-abi=softfp}. Some multilibs may be incompatible with these options. +@item arm_v8_1a_neon_ok +ARM target supports options to generate ARMv8.1 Adv.SIMD instructions. +Some multilibs may be incompatible with these options. + +@item arm_v8_1a_neon_hw +ARM target supports executing ARMv8.1 Adv.SIMD instructions. Some +multilibs may be incompatible with the options needed. Implies +arm_v8_1a_neon_ok. + @item arm_prefer_ldrd_strd ARM target prefers @code{LDRD} and @code{STRD} instructions over @code{LDM} and @code{STM} instructions. diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 8d28b23..a0de314 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2825,14 +2825,15 @@ proc add_options_for_arm_v8_neon { flags } { return "$flags $et_arm_v8_neon_flags -march=armv8-a" } -# Add the options needed for ARMv8.1 Adv.SIMD. +# Add the options needed for ARMv8.1 Adv.SIMD. Also adds the ARMv8 NEON +# options for AArch64 and for ARM. proc add_options_for_arm_v8_1a_neon { flags } { -if { [istarget aarch64*-*-*] } { - return "$flags -march=armv8.1-a" -} else { +if { ! [check_effective_target_arm_v8_1a_neon_ok] } { return "$flags" } +global et_arm_v8_1a_neon_flags +return "$flags $et_arm_v8_1a_neon_flags -march=armv8.1-a" } proc add_options_for_arm_crc { flags } { @@ -3280,17 +3281,33 @@ proc check_effective_target_arm_neonv2_hw { } { } # Return 1 if the target supports the ARMv8.1 Adv.SIMD extension, 0 -# otherwise. The test is valid for AArch64. +# otherwise. The test is valid for AArch64 and ARM. Record the command +# line options needed. proc check_effective_target_arm_v8_1a_neon_ok_nocache { } { -if { ![istarget aarch64*-*-*] } { - return 0 +global et_arm_v8_1a_neon_flags +set et_arm_v8_1a_neon_flags "" + +if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } { + return 0; } -return [check_no_compiler_messages_nocache arm_v8_1a_neon_ok assembly { - #if !defined (__ARM_FEATURE_QRDMX) - #error "__ARM_FEATURE_QRDMX not defined" - #endif -} [add_options_for_arm_v8_1a_neon ""]] + +# Iterate through sets of options to find the compiler flags that +# need to be added to the -march option. Start with the empty set +# since AArch64
Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
On Tue, Dec 15, 2015 at 4:07 PM, Matthew Wahabwrote: > On 10/12/15 10:49, Ramana Radhakrishnan wrote: >> >> On Mon, Dec 7, 2015 at 4:10 PM, Matthew Wahab >> wrote: >>> >>> On 27/11/15 17:11, Matthew Wahab wrote: On 27/11/15 13:44, Christophe Lyon wrote: >> >> On 26/11/15 16:02, Matthew Wahab wrote >>> This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM tests to >>> specify targest and to set up command line options. It builds on the >>> ARMv8.1 target support added for AArch64 tests, partly reworking that >>> support to take into account the different configurations that tests >>> may >>> be run under. > > [..] >>> >>> # Return 1 if the target supports the ARMv8.1 Adv.SIMD extension, 0 -# >>> otherwise. The test is valid for AArch64. +# otherwise. The test is >>> valid for >>> AArch64 and ARM. Record the command +# line options that needed. >> >> >> s/that// > > > Fixed in attached patch. > >> Can you also make sure doc/sourcebuild.texi is updated for this helper >> function ? >> If not documented,it would be good to add the documentation for the same >> while you >> are here. > > > Done, I've listed them as ARM attributes based on their names. > > Tested this and the other update patch (#4/7) for arm-none-eabi with > cross-compiled > check-gcc by running the gcc.target/aarch64/advsimd-intrinsics with and > without ARMv8.1 enabled as a test target. > > Ok? Ok - thanks for dealing with this. Ramana > Matthew > > testsuite/ > 2015-12-14 Matthew Wahab > > * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Update > comment. Use check_effective_target_arm_v8_1a_neon_ok to select > the command line options. > (check_effective_target_arm_v8_1a_neon_ok_nocache): Update initial > test to allow ARM targets. Select and record a working set of > command line options. > (check_effective_target_arm_v8_1a_neon_hw): Add tests for ARM > targets. > > gcc/ > 2015-12-14 Matthew Wahab > > * doc/sourcebuild.texi (ARM-specific attributes): Add > "arm_v8_1a_neon_ok" and "arm_v8_1a_neon_hw". >
Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
On Mon, Dec 7, 2015 at 4:10 PM, Matthew Wahabwrote: > On 27/11/15 17:11, Matthew Wahab wrote: >> >> On 27/11/15 13:44, Christophe Lyon wrote: On 26/11/15 16:02, Matthew Wahab wrote: >> >> > This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM > tests to specify targest and to set up command line options. > It builds on the ARMv8.1 target support added for AArch64 tests, partly > reworking that support to take into account the different > configurations > that tests may be run under. >> >> >>> I may be mistaken, but -mfpu=neon-fp-armv8 and -mfloat-abi=softfp are not >>> supported by aarch64-gcc. So it seems to me that >>> check_effective_target_arm_v8_1a_neon_ok_nocache will not always work >>> for aarch64 after your patch. >> >> >>> Or does it work because no option is needed and thus "" always >>> matches and thus the loop always exits after the first iteration >>> on aarch64? >> >> >> Yes, the idea is that the empty string will make the function first try >> '-march=armv8.1-a' without any other flag. That will work for AArch64 >> because it >> doesn't need any other option. >> >>> Maybe a more accurate comment would help remembering that, in case >>> -mfpu option becomes necessary for aarch64. >>> >> >> Agreed, it's worth having a comment to explain what the 'foreach' >> construct is doing. >> >> Matthew > > > I've added a comment to the foreach construct, to make it clearer what > it's doing. > > Matthew > > testsuite/ > 2015-12-07 Matthew Wahab > > > * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Update > comment. Use check_effetive_target_arm_v8_1a_neon_ok to select > the command line options. > (check_effective_target_arm_v8_1a_neon_ok_nocache): Update initial > test to allow ARM targets. Select and record a working set of > command line options. > (check_effective_target_arm_v8_1a_neon_hw): Add tests for ARM > targets. > ># Return 1 if the target supports the ARMv8.1 Adv.SIMD extension, 0 >-# otherwise. The test is valid for AArch64. >+# otherwise. The test is valid for AArch64 and ARM. Record the command >+# line options that needed. s/that// Can you also make sure doc/sourcebuild.texi is updated for this helper function ? If not documented,it would be good to add the documentation for the same while you are here. Ramana
Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
On 7 December 2015 at 17:10, Matthew Wahabwrote: > On 27/11/15 17:11, Matthew Wahab wrote: >> >> On 27/11/15 13:44, Christophe Lyon wrote: On 26/11/15 16:02, Matthew Wahab wrote: >> >> > This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM > tests to specify targest and to set up command line options. > It builds on the ARMv8.1 target support added for AArch64 tests, partly > reworking that support to take into account the different > configurations > that tests may be run under. >> >> >>> I may be mistaken, but -mfpu=neon-fp-armv8 and -mfloat-abi=softfp are not >>> supported by aarch64-gcc. So it seems to me that >>> check_effective_target_arm_v8_1a_neon_ok_nocache will not always work >>> for aarch64 after your patch. >> >> >>> Or does it work because no option is needed and thus "" always >>> matches and thus the loop always exits after the first iteration >>> on aarch64? >> >> >> Yes, the idea is that the empty string will make the function first try >> '-march=armv8.1-a' without any other flag. That will work for AArch64 >> because it >> doesn't need any other option. >> >>> Maybe a more accurate comment would help remembering that, in case >>> -mfpu option becomes necessary for aarch64. >>> >> >> Agreed, it's worth having a comment to explain what the 'foreach' >> construct is doing. >> >> Matthew > > > I've added a comment to the foreach construct, to make it clearer what > it's doing. > I only have a minor typo to report in the other comment you added before check_effective_target_arm_v8_1a_neon_ok_nocache: "Record the command line options that needed." ("that" doesn't sound right to my non-native ears :-) Otherwise OK for me, but I can't approve. Christophe. > Matthew > > testsuite/ > 2015-12-07 Matthew Wahab > > > * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Update > comment. Use check_effetive_target_arm_v8_1a_neon_ok to select > the command line options. > (check_effective_target_arm_v8_1a_neon_ok_nocache): Update initial > test to allow ARM targets. Select and record a working set of > command line options. > (check_effective_target_arm_v8_1a_neon_hw): Add tests for ARM > targets. >
Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
On 27/11/15 17:11, Matthew Wahab wrote: On 27/11/15 13:44, Christophe Lyon wrote: On 26/11/15 16:02, Matthew Wahab wrote: This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM tests to specify targest and to set up command line options. It builds on the ARMv8.1 target support added for AArch64 tests, partly reworking that support to take into account the different configurations that tests may be run under. I may be mistaken, but -mfpu=neon-fp-armv8 and -mfloat-abi=softfp are not supported by aarch64-gcc. So it seems to me that check_effective_target_arm_v8_1a_neon_ok_nocache will not always work for aarch64 after your patch. Or does it work because no option is needed and thus "" always matches and thus the loop always exits after the first iteration on aarch64? Yes, the idea is that the empty string will make the function first try '-march=armv8.1-a' without any other flag. That will work for AArch64 because it doesn't need any other option. Maybe a more accurate comment would help remembering that, in case -mfpu option becomes necessary for aarch64. Agreed, it's worth having a comment to explain what the 'foreach' construct is doing. Matthew I've added a comment to the foreach construct, to make it clearer what it's doing. Matthew testsuite/ 2015-12-07 Matthew Wahab* lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Update comment. Use check_effetive_target_arm_v8_1a_neon_ok to select the command line options. (check_effective_target_arm_v8_1a_neon_ok_nocache): Update initial test to allow ARM targets. Select and record a working set of command line options. (check_effective_target_arm_v8_1a_neon_hw): Add tests for ARM targets. >From 7e2cd1ef475a5c7f4a4722b9ba32bd46e3b30eae Mon Sep 17 00:00:00 2001 From: Matthew Wahab Date: Fri, 9 Oct 2015 17:38:12 +0100 Subject: [PATCH 5/7] [Testsuite] Support ARMv8.1 NEON on ARM. --- gcc/testsuite/lib/target-supports.exp | 60 ++- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index 4e349e9..6dfb6f6 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2816,14 +2816,15 @@ proc add_options_for_arm_v8_neon { flags } { return "$flags $et_arm_v8_neon_flags -march=armv8-a" } -# Add the options needed for ARMv8.1 Adv.SIMD. +# Add the options needed for ARMv8.1 Adv.SIMD. Also adds the ARMv8 NEON +# options for AArch64 and for ARM. proc add_options_for_arm_v8_1a_neon { flags } { -if { [istarget aarch64*-*-*] } { - return "$flags -march=armv8.1-a" -} else { +if { ! [check_effective_target_arm_v8_1a_neon_ok] } { return "$flags" } +global et_arm_v8_1a_neon_flags +return "$flags $et_arm_v8_1a_neon_flags -march=armv8.1-a" } proc add_options_for_arm_crc { flags } { @@ -3271,17 +3272,33 @@ proc check_effective_target_arm_neonv2_hw { } { } # Return 1 if the target supports the ARMv8.1 Adv.SIMD extension, 0 -# otherwise. The test is valid for AArch64. +# otherwise. The test is valid for AArch64 and ARM. Record the command +# line options that needed. proc check_effective_target_arm_v8_1a_neon_ok_nocache { } { -if { ![istarget aarch64*-*-*] } { - return 0 +global et_arm_v8_1a_neon_flags +set et_arm_v8_1a_neon_flags "" + +if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } { + return 0; } -return [check_no_compiler_messages_nocache arm_v8_1a_neon_ok assembly { - #if !defined (__ARM_FEATURE_QRDMX) - #error "__ARM_FEATURE_QRDMX not defined" - #endif -} [add_options_for_arm_v8_1a_neon ""]] + +# Iterate through sets of options to find the compiler flags that +# need to be added to the -march option. Start with the empty set +# 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 + } +} + +return 0; } proc check_effective_target_arm_v8_1a_neon_ok { } { @@ -3308,16 +3325,17 @@ proc check_effective_target_arm_v8_neon_hw { } { } # Return 1 if the target supports executing the ARMv8.1 Adv.SIMD extension, 0 -# otherwise. The test is valid for AArch64. +# otherwise. The test is valid for AArch64 and ARM. proc check_effective_target_arm_v8_1a_neon_hw { } { if { ![check_effective_target_arm_v8_1a_neon_ok] } { return 0; } -return [check_runtime_nocache arm_v8_1a_neon_hw_available { +return [check_runtime arm_v8_1a_neon_hw_available { int main
Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
On 27/11/15 13:44, Christophe Lyon wrote: On 26/11/15 16:02, Matthew Wahab wrote: This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM tests to specify targest and to set up command line options. It builds on the ARMv8.1 target support added for AArch64 tests, partly reworking that support to take into account the different configurations that tests may be run under. I may be mistaken, but -mfpu=neon-fp-armv8 and -mfloat-abi=softfp are not supported by aarch64-gcc. So it seems to me that check_effective_target_arm_v8_1a_neon_ok_nocache will not always work for aarch64 after your patch. Or does it work because no option is needed and thus "" always matches and thus the loop always exits after the first iteration on aarch64? Yes, the idea is that the empty string will make the function first try '-march=armv8.1-a' without any other flag. That will work for AArch64 because it doesn't need any other option. Maybe a more accurate comment would help remembering that, in case -mfpu option becomes necessary for aarch64. Agreed, it's worth having a comment to explain what the 'foreach' construct is doing. Matthew
Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
On 27/11/15 13:44, Christophe Lyon wrote: On 26/11/15 16:02, Matthew Wahab wrote: This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM tests to specify targest and to set up command line options. It builds on the ARMv8.1 target support added for AArch64 tests, partly reworking that support to take into account the different configurations that tests may be run under. I may be mistaken, but -mfpu=neon-fp-armv8 and -mfloat-abi=softfp are not supported by aarch64-gcc. So it seems to me that check_effective_target_arm_v8_1a_neon_ok_nocache will not always work for aarch64 after your patch. Or does it work because no option is needed and thus "" always matches and thus the loop always exits after the first iteration on aarch64? Yes, the idea is that the empty string will make the function first try '-march=armv8.1-a' without any other flag. That will work for AArch64 because it doesn't need any other option. Maybe a more accurate comment would help remembering that, in case -mfpu option becomes necessary for aarch64. Agreed, it's worth having a comment to explain what the 'foreach' construct is doing. Matthew
Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
On 26 November 2015 at 17:10, Matthew Wahabwrote: > Attached the missing patch. > Matthew > > > On 26/11/15 16:02, Matthew Wahab wrote: >> >> Hello, >> >> This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM >> tests to specify targest and to set up command line options. >> It builds on the ARMv8.1 target support added for AArch64 tests, partly >> reworking that support to take into account the different configurations >> that tests may be run under. >> >> The main changes are >> - add_options_for_arm_v8_1a_neon: Call >>check_effective_target_arm_v8_1a_neon_ok to select a suitable set of >>options. >> - check_effective_target_arm_v8_1a_neon_ok: Test possible command line >>options, recording the first set that works. >> - check_effective_target_arm_v8_1a_neon_hw: Add a test for ARM targets. >> >> Tested the series for arm-none-eabi with cross-compiled check-gcc on an >> ARMv8.1 emulator. Also tested arm-none-linux-gnueabihf with native >> bootstrap and make check. >> >> Ok for trunk? >> Matthew >> Hi Matthew, I may be mistaken, but -mfpu=neon-fp-armv8 and -mfloat-abi=softfp are not supported by aarch64-gcc. So it seems to me that check_effective_target_arm_v8_1a_neon_ok_nocache will not always work for aarch64 after your patch. Or does it work because no option is needed and thus "" always matches and thus the loop always exits after the first iteration on aarch64? Maybe a more accurate comment would help remembering that, in case -mfpu option becomes necessary for aarch64. Christophe. >> testsuite/ >> 2015-11-26 Matthew Wahab >> >> * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Update >> comment. Use check_effetive_target_arm_v8_1a_neon_ok to select >> the command line options. >> (check_effective_target_arm_v8_1a_neon_ok_nocache): Update initial >> test to allow ARM targets. Select and record a working set of >> command line options. >> (check_effective_target_arm_v8_1a_neon_hw): Add tests for ARM >> targets. >> >
[PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
Hello, This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM tests to specify targest and to set up command line options. It builds on the ARMv8.1 target support added for AArch64 tests, partly reworking that support to take into account the different configurations that tests may be run under. The main changes are - add_options_for_arm_v8_1a_neon: Call check_effective_target_arm_v8_1a_neon_ok to select a suitable set of options. - check_effective_target_arm_v8_1a_neon_ok: Test possible command line options, recording the first set that works. - check_effective_target_arm_v8_1a_neon_hw: Add a test for ARM targets. Tested the series for arm-none-eabi with cross-compiled check-gcc on an ARMv8.1 emulator. Also tested arm-none-linux-gnueabihf with native bootstrap and make check. Ok for trunk? Matthew testsuite/ 2015-11-26 Matthew Wahab* lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Update comment. Use check_effetive_target_arm_v8_1a_neon_ok to select the command line options. (check_effective_target_arm_v8_1a_neon_ok_nocache): Update initial test to allow ARM targets. Select and record a working set of command line options. (check_effective_target_arm_v8_1a_neon_hw): Add tests for ARM targets.
Re: [PATCH 5/7][Testsuite] Support ARMv8.1 ARM tests.
Attached the missing patch. Matthew On 26/11/15 16:02, Matthew Wahab wrote: Hello, This patch adds ARMv8.1 support to GCC Dejagnu, to allow ARM tests to specify targest and to set up command line options. It builds on the ARMv8.1 target support added for AArch64 tests, partly reworking that support to take into account the different configurations that tests may be run under. The main changes are - add_options_for_arm_v8_1a_neon: Call check_effective_target_arm_v8_1a_neon_ok to select a suitable set of options. - check_effective_target_arm_v8_1a_neon_ok: Test possible command line options, recording the first set that works. - check_effective_target_arm_v8_1a_neon_hw: Add a test for ARM targets. Tested the series for arm-none-eabi with cross-compiled check-gcc on an ARMv8.1 emulator. Also tested arm-none-linux-gnueabihf with native bootstrap and make check. Ok for trunk? Matthew testsuite/ 2015-11-26 Matthew Wahab* lib/target-supports.exp (add_options_for_arm_v8_1a_neon): Update comment. Use check_effetive_target_arm_v8_1a_neon_ok to select the command line options. (check_effective_target_arm_v8_1a_neon_ok_nocache): Update initial test to allow ARM targets. Select and record a working set of command line options. (check_effective_target_arm_v8_1a_neon_hw): Add tests for ARM targets. >From 6f767289ce83be88bc088c7adf66d137ed335762 Mon Sep 17 00:00:00 2001 From: Matthew Wahab Date: Fri, 9 Oct 2015 17:38:12 +0100 Subject: [PATCH 5/7] [Testsuite] Support ARMv8.1 NEON on ARM. Change-Id: I35436b64996789d54f215d66ed4b0ec5ffe48e37 --- gcc/testsuite/lib/target-supports.exp | 56 +-- 1 file changed, 41 insertions(+), 15 deletions(-) diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index dcd51fd..34bb45d 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -2816,14 +2816,15 @@ proc add_options_for_arm_v8_neon { flags } { return "$flags $et_arm_v8_neon_flags -march=armv8-a" } -# Add the options needed for ARMv8.1 Adv.SIMD. +# Add the options needed for ARMv8.1 Adv.SIMD. Also adds the ARMv8 NEON +# options for AArch64 and for ARM. proc add_options_for_arm_v8_1a_neon { flags } { -if { [istarget aarch64*-*-*] } { - return "$flags -march=armv8.1-a" -} else { +if { ! [check_effective_target_arm_v8_1a_neon_ok] } { return "$flags" } +global et_arm_v8_1a_neon_flags +return "$flags $et_arm_v8_1a_neon_flags -march=armv8.1-a" } proc add_options_for_arm_crc { flags } { @@ -3271,17 +3272,29 @@ proc check_effective_target_arm_neonv2_hw { } { } # Return 1 if the target supports the ARMv8.1 Adv.SIMD extension, 0 -# otherwise. The test is valid for AArch64. +# otherwise. The test is valid for AArch64 and ARM. proc check_effective_target_arm_v8_1a_neon_ok_nocache { } { -if { ![istarget aarch64*-*-*] } { - return 0 +global et_arm_v8_1a_neon_flags +set et_arm_v8_1a_neon_flags "" + +if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } { + return 0; } -return [check_no_compiler_messages_nocache arm_v8_1a_neon_ok assembly { - #if !defined (__ARM_FEATURE_QRDMX) - #error "__ARM_FEATURE_QRDMX not defined" - #endif -} [add_options_for_arm_v8_1a_neon ""]] + +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 + } +} + +return 0; } proc check_effective_target_arm_v8_1a_neon_ok { } { @@ -3308,16 +3321,17 @@ proc check_effective_target_arm_v8_neon_hw { } { } # Return 1 if the target supports executing the ARMv8.1 Adv.SIMD extension, 0 -# otherwise. The test is valid for AArch64. +# otherwise. The test is valid for AArch64 and ARM. proc check_effective_target_arm_v8_1a_neon_hw { } { if { ![check_effective_target_arm_v8_1a_neon_ok] } { return 0; } -return [check_runtime_nocache arm_v8_1a_neon_hw_available { +return [check_runtime arm_v8_1a_neon_hw_available { int main (void) { + #ifdef __ARM_ARCH_ISA_A64 __Int32x2_t a = {0, 1}; __Int32x2_t b = {0, 2}; __Int32x2_t result; @@ -3327,9 +3341,21 @@ proc check_effective_target_arm_v8_1a_neon_hw { } { : "w"(a), "w"(b) : /* No clobbers. */); + #else + + __simd64_int32_t a = {0, 1}; + __simd64_int32_t b = {0, 2}; + __simd64_int32_t result; + + asm ("vqrdmlah.s32 %P0, %P1, %P2" + : "=w"(result) + : "w"(a), "w"(b) + : /* No clobbers. */); + #endif + return result[0]; } -} [add_options_for_arm_v8_1a_neon ""]] +}