gcc/testsuite/ChangeLog:
authorStam Markianos-Wright <stam.markianos-wright@arm.com>
Fri, 20 Dec 2019 15:52:39 +0000 (15:52 +0000)
committerStam Markianos-Wright <stammark@gcc.gnu.org>
Fri, 20 Dec 2019 15:52:39 +0000 (15:52 +0000)
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

gcc/ChangeLog
gcc/doc/sourcebuild.texi
gcc/testsuite/ChangeLog
gcc/testsuite/lib/target-supports.exp

index 686c72717bb2797c2797ec9866cb62ac5de80b15..5ac079a6dd2d12a1cfa8bd2019459bbb7f6a5a42 100644 (file)
@@ -1,3 +1,9 @@
+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.
+
 2019-12-20  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/92841
index 85573a49a2b28de71ef4ca9659cd5af86ea46b81..fdfd9dcde6b23e68fe0587d583ea50b366e5e87e 100644 (file)
@@ -1877,6 +1877,16 @@ ARM target supports extensions to generate the @code{VFMAL} and @code{VFMLS}
 half-precision floating-point instructions available from ARMv8.2-A and
 onwards.  Some multilibs may be incompatible with these options.
 
+@item arm_v8_2a_bf16_neon_ok
+ARM target supports options to generate instructions from ARMv8.2-A with
+the BFloat16 extension (bf16). Some multilibs may be incompatible with these
+options.
+
+@item arm_v8_2a_i8mm_ok
+ARM target supports options to generate instructions from ARMv8.2-A with
+the 8-Bit Integer Matrix Multiply extension (i8mm). Some multilibs may be
+incompatible with these options.
+
 @item arm_prefer_ldrd_strd
 ARM target prefers @code{LDRD} and @code{STRD} instructions over
 @code{LDM} and @code{STM} instructions.
index 18c204475d1c9446652ad976fa0198846231d085..a6de3e6f8ce39fe624c4b6bc900465577089d0cf 100644 (file)
@@ -1,3 +1,13 @@
+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.
+
 2019-12-20  Roman Zhuykov  <zhroma@ispras.ru>
 
        * gcc.dg/pr92951-1.c: Rename to ...
index 98f1141a8a4e5b55c58c4512d93f280fe675e601..cbd97b2ce5cce9c48816aa30eb147b46113f49df 100644 (file)
@@ -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.