@@ -2469,6 +2469,24 @@ proc check_effective_target_arm_neonv2_hw { } {
} [add_options_for_arm_neonv2 ""]]
}
+# Return 1 if the target supports executing ARMv8 NEON instructions, 0
+# otherwise.
+
+proc check_effective_target_arm_v8_neon_hw { } {
+ return [check_runtime arm_v8_neon_hw_available {
+ #include "arm_neon.h"
+ int
+ main (void)
+ {
+ float32x2_t a;
+ asm ("vrinta.f32 %P0, %P1"
+ : "=w" (a)
+ : "0" (a));
+ return 0;
+ }
+ } [add_options_for_arm_v8_neon ""]]
+}
+
# Return 1 if this is a ARM target with NEON enabled.
proc check_effective_target_arm_neon { } {
@@ -3975,7 +3993,9 @@ proc check_effective_target_vect_call_btruncf { } {
verbose "check_effective_target_vect_call_btruncf: using cached result" 2
} else {
set et_vect_call_btruncf_saved 0
- if { [istarget aarch64*-*-*] } {
+ if { [istarget aarch64*-*-*]
+ || ([istarget arm*-*-*]
+ && [check_effective_target_arm_v8_neon_ok]) } {
set et_vect_call_btruncf_saved 1
}
}
@@ -4011,7 +4031,9 @@ proc check_effective_target_vect_call_ceilf { } {
verbose "check_effective_target_vect_call_ceilf: using cached result" 2
} else {
set et_vect_call_ceilf_saved 0
- if { [istarget aarch64*-*-*] } {
+ if { [istarget aarch64*-*-*]
+ || ([istarget arm*-*-*]
+ && [check_effective_target_arm_v8_neon_ok]) } {
set et_vect_call_ceilf_saved 1
}
}
@@ -4047,7 +4069,9 @@ proc check_effective_target_vect_call_floorf { } {
verbose "check_effective_target_vect_call_floorf: using cached result" 2
} else {
set et_vect_call_floorf_saved 0
- if { [istarget aarch64*-*-*] } {
+ if { [istarget aarch64*-*-*]
+ || ([istarget arm*-*-*]
+ && [check_effective_target_arm_v8_neon_ok]) } {
set et_vect_call_floorf_saved 1
}
}
@@ -4155,7 +4179,9 @@ proc check_effective_target_vect_call_roundf { } {
verbose "check_effective_target_vect_call_roundf: using cached result" 2
} else {
set et_vect_call_roundf_saved 0
- if { [istarget aarch64*-*-*] } {
+ if { [istarget aarch64*-*-*]
+ || ([istarget arm*-*-*]
+ && [check_effective_target_arm_v8_neon_ok]) } {
set et_vect_call_roundf_saved 1
}
}
@@ -5057,6 +5083,14 @@ proc check_vect_support_and_set_flags { } {
}
} elseif [istarget ia64-*-*] {
set dg-do-what-default run
+ } elseif [is-effective-target arm_v8_neon_ok] {
+ eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_v8_neon ""]
+ lappend DEFAULT_VECTCFLAGS "-ffast-math"
+ if [is-effective-target arm_v8_neon_hw] {
+ set dg-do-what-default run
+ } else {
+ set dg-do-what-default compile
+ }
} elseif [is-effective-target arm_neon_ok] {
eval lappend DEFAULT_VECTCFLAGS [add_options_for_arm_neon ""]
# NEON does not support denormals, so is not used for vectorization by