+2015-11-26 Matthew Wahab <matthew.wahab@arm.com>
+
+ * lib/target-supports.exp (add_options_for_arm_v8_1a_neon): New.
+ (check_effective_target_arm_arch_FUNC_ok)
+ (add_options_for_arm_arch_FUNC)
+ (check_effective_target_arm_arch_FUNC_multilib): Add "armv8.1-a"
+ to the list to be generated.
+ (check_effective_target_arm_v8_1a_neon_ok_nocache): New.
+ (check_effective_target_arm_v8_1a_neon_ok): New.
+ (check_effective_target_arm_v8_1a_neon_hw): New.
+
2015-11-26 Nathan Sidwell <nathan@acm.org>
* gcc.target/nvptx/proto-1.c: Adjust expected asm.
return "$flags $et_arm_v8_neon_flags -march=armv8-a"
}
+# Add the options needed for ARMv8.1 Adv.SIMD.
+
+proc add_options_for_arm_v8_1a_neon { flags } {
+ if { [istarget aarch64*-*-*] } {
+ return "$flags -march=armv8.1-a"
+ } else {
+ return "$flags"
+ }
+}
+
proc add_options_for_arm_crc { flags } {
if { ! [check_effective_target_arm_crc_ok] } {
return "$flags"
v7r "-march=armv7-r" __ARM_ARCH_7R__
v7m "-march=armv7-m -mthumb" __ARM_ARCH_7M__
v7em "-march=armv7e-m -mthumb" __ARM_ARCH_7EM__
- v8a "-march=armv8-a" __ARM_ARCH_8A__ } {
+ v8a "-march=armv8-a" __ARM_ARCH_8A__
+ v8_1a "-march=armv8.1a" __ARM_ARCH_8A__ } {
eval [string map [list FUNC $armfunc FLAG $armflag DEF $armdef ] {
proc check_effective_target_arm_arch_FUNC_ok { } {
if { [ string match "*-marm*" "FLAG" ] &&
} [add_options_for_arm_neonv2 ""]]
}
+# Return 1 if the target supports the ARMv8.1 Adv.SIMD extension, 0
+# otherwise. The test is valid for AArch64.
+
+proc check_effective_target_arm_v8_1a_neon_ok_nocache { } {
+ if { ![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 ""]]
+}
+
+proc check_effective_target_arm_v8_1a_neon_ok { } {
+ return [check_cached_effective_target arm_v8_1a_neon_ok \
+ check_effective_target_arm_v8_1a_neon_ok_nocache]
+}
+
# Return 1 if the target supports executing ARMv8 NEON instructions, 0
# otherwise.
} [add_options_for_arm_v8_neon ""]]
}
+# Return 1 if the target supports executing the ARMv8.1 Adv.SIMD extension, 0
+# otherwise. The test is valid for AArch64.
+
+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 {
+ int
+ main (void)
+ {
+ __Int32x2_t a = {0, 1};
+ __Int32x2_t b = {0, 2};
+ __Int32x2_t result;
+
+ asm ("sqrdmlah %0.2s, %1.2s, %2.2s"
+ : "=w"(result)
+ : "w"(a), "w"(b)
+ : /* No clobbers. */);
+
+ return result[0];
+ }
+ } [add_options_for_arm_v8_1a_neon ""]]
+}
+
# Return 1 if this is a ARM target with NEON enabled.
proc check_effective_target_arm_neon { } {