summaryrefslogtreecommitdiff
path: root/gcc/testsuite/lib/target-supports.exp
diff options
context:
space:
mode:
authorStam Markianos-Wright <stam.markianos-wright@arm.com>2019-12-20 15:52:39 +0000
committerStam Markianos-Wright <stammark@gcc.gnu.org>2019-12-20 15:52:39 +0000
commit9260fb066b7ed0b237a3300e05fca9bffe018c6b (patch)
tree19c6fe2d9028dbf1bd3f4524ae33292c940d9a5a /gcc/testsuite/lib/target-supports.exp
parent0f6a7c12714057170e2c4b746d6a5a60ceaaf015 (diff)
gcc/testsuite/ChangeLog:
2019-12-20 Stam Markianos-Wright <stam.markianos-wright@arm.com> * lib/target-supports.exp (check_effective_target_arm_v8_2a_i8mm_ok_nocache): New. (check_effective_target_arm_v8_2a_i8mm_ok): New. (add_options_for_arm_v8_2a_i8mm): New. (check_effective_target_arm_v8_2a_bf16_neon_ok_nocache): New. (check_effective_target_arm_v8_2a_bf16_neon_ok): New. (add_options_for_arm_v8_2a_bf16_neon): New. gcc/Changelog: 2019-12-20 Stam Markianos-Wright <stam.markianos-wright@arm.com> * doc/sourcebuild.texi (arm_v8_2a_bf16_neon_ok): Document new target supports option. (arm_v8_2a_i8mm_ok): Likewise. From-SVN: r279648
Diffstat (limited to 'gcc/testsuite/lib/target-supports.exp')
-rw-r--r--gcc/testsuite/lib/target-supports.exp82
1 files changed, 82 insertions, 0 deletions
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 98f1141a8a4..cbd97b2ce5c 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -4781,6 +4781,49 @@ proc add_options_for_arm_v8_2a_dotprod_neon { flags } {
return "$flags $et_arm_v8_2a_dotprod_neon_flags"
}
+# Return 1 if the target supports ARMv8.2+i8mm Adv.SIMD Dot Product
+# instructions, 0 otherwise. The test is valid for ARM and for AArch64.
+# Record the command line options needed.
+
+proc check_effective_target_arm_v8_2a_i8mm_ok_nocache { } {
+ global et_arm_v8_2a_i8mm_flags
+ set et_arm_v8_2a_i8mm_flags ""
+
+ if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } {
+ return 0;
+ }
+
+ # Iterate through sets of options to find the compiler flags that
+ # need to be added to the -march option.
+ foreach flags {"" "-mfloat-abi=hard -mfpu=neon-fp-armv8" "-mfloat-abi=softfp -mfpu=neon-fp-armv8" } {
+ if { [check_no_compiler_messages_nocache \
+ arm_v8_2a_i8mm_ok object {
+ #include <arm_neon.h>
+ #if !defined (__ARM_FEATURE_MATMUL_INT8)
+ #error "__ARM_FEATURE_MATMUL_INT8 not defined"
+ #endif
+ } "$flags -march=armv8.2-a+i8mm"] } {
+ set et_arm_v8_2a_i8mm_flags "$flags -march=armv8.2-a+i8mm"
+ return 1
+ }
+ }
+
+ return 0;
+}
+
+proc check_effective_target_arm_v8_2a_i8mm_ok { } {
+ return [check_cached_effective_target arm_v8_2a_i8mm_ok \
+ check_effective_target_arm_v8_2a_i8mm_ok_nocache]
+}
+
+proc add_options_for_arm_v8_2a_i8mm { flags } {
+ if { ! [check_effective_target_arm_v8_2a_i8mm_ok] } {
+ return "$flags"
+ }
+ global et_arm_v8_2a_i8mm_flags
+ return "$flags $et_arm_v8_2a_i8mm_flags"
+}
+
# Return 1 if the target supports FP16 VFMAL and VFMSL
# instructions, 0 otherwise.
# Record the command line options needed.
@@ -4826,6 +4869,45 @@ proc add_options_for_arm_fp16fml_neon { flags } {
return "$flags $et_arm_fp16fml_neon_flags"
}
+# Return 1 if the target supports BFloat16 SIMD instructions, 0 otherwise.
+# The test is valid for ARM and for AArch64.
+
+proc check_effective_target_arm_v8_2a_bf16_neon_ok_nocache { } {
+ global et_arm_v8_2a_bf16_neon_flags
+ set et_arm_v8_2a_bf16_neon_flags ""
+
+ if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } {
+ return 0;
+ }
+
+ foreach flags {"" "-mfloat-abi=hard -mfpu=neon-fp-armv8" "-mfloat-abi=softfp -mfpu=neon-fp-armv8" } {
+ if { [check_no_compiler_messages_nocache arm_v8_2a_bf16_neon_ok object {
+ #include <arm_neon.h>
+ #if !defined (__ARM_FEATURE_BF16_VECTOR_ARITHMETIC)
+ #error "__ARM_FEATURE_BF16_VECTOR_ARITHMETIC not defined"
+ #endif
+ } "$flags -march=armv8.2-a+bf16"] } {
+ set et_arm_v8_2a_bf16_neon_flags "$flags -march=armv8.2-a+bf16"
+ return 1
+ }
+ }
+
+ return 0;
+}
+
+proc check_effective_target_arm_v8_2a_bf16_neon_ok { } {
+ return [check_cached_effective_target arm_v8_2a_bf16_neon_ok \
+ check_effective_target_arm_v8_2a_bf16_neon_ok_nocache]
+}
+
+proc add_options_for_arm_v8_2a_bf16_neon { flags } {
+ if { ! [check_effective_target_arm_v8_2a_bf16_neon_ok] } {
+ return "$flags"
+ }
+ global et_arm_v8_2a_bf16_neon_flags
+ return "$flags $et_arm_v8_2a_bf16_neon_flags"
+}
+
# Return 1 if the target supports executing ARMv8 NEON instructions, 0
# otherwise.