}
global et_arm_neon_flags
set et_arm_neon_flags ""
- foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon" "-mfpu=neon -mfloat-abi=softfp" "-mfpu=neon -mfloat-abi=softfp -mcpu=unset -march=armv7-a" "-mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard" "-mfpu=neon -mfloat-abi=hard -mcpu=unset -march=armv7-a"} {
+ foreach flags {
+ ""
+ "-mfloat-abi=softfp"
+ "-mfloat-abi=softfp -mcpu=unset -march=armv7-a+simd -mfpu=auto"
+ "-mfloat-abi=hard"
+ "-mfloat-abi=hard -mcpu=unset -march=armv7-a+simd -mfpu=auto"
+ } {
if { [check_no_compiler_messages_nocache arm_neon_ok object {
#include <arm_neon.h>
int dummy;
global et_arm_neon_fp16_flags
global et_arm_neon_flags
set et_arm_neon_fp16_flags ""
- if { [check_effective_target_arm_neon_ok] } {
- foreach flags {"" "-mfloat-abi=softfp" "-mfpu=neon-fp16"
- "-mfpu=neon-fp16 -mfloat-abi=softfp"
- "-mfp16-format=ieee"
- "-mfloat-abi=softfp -mfp16-format=ieee"
- "-mfpu=neon-fp16 -mfp16-format=ieee"
- "-mfpu=neon-fp16 -mfloat-abi=softfp -mfp16-format=ieee"} {
- if { [check_no_compiler_messages_nocache arm_neon_fp16_ok object {
- #include "arm_neon.h"
- float16x4_t
- foo (float32x4_t arg)
- {
- return vcvt_f16_f32 (arg);
- }
- } "$et_arm_neon_flags $flags"] } {
- set et_arm_neon_fp16_flags [concat $et_arm_neon_flags $flags]
- return 1
+ foreach flags {
+ ""
+ "-mfp16-format=ieee"
+ "-mcpu=unset -march=armv7-a+simd+vfpv3-fp16 -mfpu=auto"
+ "-mcpu=unset -march=armv7-a+simd+vfpv3-fp16 -mfpu=auto -mfp16-format=ieee"
+
+ "-mfloat-abi=softfp"
+ "-mfloat-abi=softfp -mfp16-format=ieee"
+ "-mcpu=unset -march=armv7-a+simd+vfpv3-fp16 -mfpu=auto -mfloat-abi=softfp"
+ "-mcpu=unset -march=armv7-a+simd+vfpv3-fp16 -mfpu=auto -mfloat-abi=softfp -mfp16-format=ieee"
+
+ "-mfloat-abi=hard"
+ "-mfloat-abi=hard -mfp16-format=ieee"
+ "-mcpu=unset -march=armv7-a+simd+vfpv3-fp16 -mfpu=auto -mfloat-abi=hard"
+ "-mcpu=unset -march=armv7-a+simd+vfpv3-fp16 -mfpu=auto -mfloat-abi=hard -mfp16-format=ieee"
+ } {
+ if { [check_no_compiler_messages_nocache arm_neon_fp16_ok object {
+ #include "arm_neon.h"
+ float16x4_t
+ foo (float32x4_t arg)
+ {
+ return vcvt_f16_f32 (arg);
}
+ } "$flags"] } {
+ set et_arm_neon_fp16_flags $flags
+ return 1
}
}
proc check_effective_target_arm_v8_2a_fp16_neon_ok_nocache { } {
global et_arm_v8_2a_fp16_neon_flags
set et_arm_v8_2a_fp16_neon_flags ""
- set cpu_unset ""
if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } {
return 0;
}
if { [istarget arm*-*-*] } {
- set cpu_unset "-mcpu=unset"
+ set flag_opts {
+ ""
+ "-mfp16-format=ieee"
+ "-mcpu=unset -march=armv8.2-a+fp16 -mfpu=auto"
+ "-mcpu=unset -march=armv8.2-a+fp16 -mfpu=auto -mfp16-format=ieee"
+
+ "-mfloat-abi=softfp"
+ "-mfloat-abi=softfp -mfp16-format=ieee"
+ "-mcpu=unset -march=armv8.2-a+fp16 -mfpu=auto -mfloat-abi=softfp"
+ "-mcpu=unset -march=armv8.2-a+fp16 -mfpu=auto -mfloat-abi=softfp -mfp16-format=ieee"
+
+ "-mfloat-abi=hard"
+ "-mfloat-abi=hard -mfp16-format=ieee"
+ "-mcpu=unset -march=armv8.2-a+fp16 -mfpu=auto -mfloat-abi=hard"
+ "-mcpu=unset -march=armv8.2-a+fp16 -mfpu=auto -mfloat-abi=hard -mfp16-format=ieee"
+ }
+ } else {
+ set flag_opts {
+ ""
+ "-march=armv8.2-a+fp16"
+ }
}
# Iterate through sets of options to find the compiler flags that
# need to be added to the -march option.
- foreach flags {"" "-mfpu=neon-fp-armv8" "-mfloat-abi=softfp" \
- "-mfpu=neon-fp-armv8 -mfloat-abi=softfp"} {
+ foreach flags $flag_opts {
if { [check_no_compiler_messages_nocache \
arm_v8_2a_fp16_neon_ok object {
- #if !defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
- #error "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC not defined"
- #endif
- } "$flags $cpu_unset -march=armv8.2-a+fp16"] } {
- set et_arm_v8_2a_fp16_neon_flags "$flags $cpu_unset -march=armv8.2-a+fp16"
+ #if !defined (__ARM_FEATURE_FP16_VECTOR_ARITHMETIC)
+ #error "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC not defined"
+ #endif
+ } "$flags"] } {
+ set et_arm_v8_2a_fp16_neon_flags "$flags"
return 1
}
}
proc check_effective_target_arm_v8_3a_complex_neon_ok_nocache { } {
global et_arm_v8_3a_complex_neon_flags
set et_arm_v8_3a_complex_neon_flags ""
- set cpu_unset ""
if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } {
return 0;
}
if { [istarget arm*-*-*] } {
- set cpu_unset "-mcpu=unset"
+ set flag_opts {
+ ""
+ "-mcpu=unset -march=armv8.3-a+simd"
+ "-mfloat-abi=softfp -mfpu=auto -mcpu=unset -march=armv8.3-a+simd"
+ "-mfloat-abi=hard -mfpu=auto -mcpu=unset -march=armv8.3-a+simd"
+ }
+ } else {
+ set flag_opts { "" "-march=armv8.3-a" }
}
# Iterate through sets of options to find the compiler flags that
# need to be added to the -march option.
- foreach flags {"" "-mfloat-abi=softfp -mfpu=auto" "-mfloat-abi=hard -mfpu=auto"} {
+ foreach flags $flag_opts {
if { [check_no_compiler_messages_nocache \
arm_v8_3a_complex_neon_ok assembly {
#if !defined (__ARM_FEATURE_COMPLEX)
#error "__ARM_FEATURE_COMPLEX not defined"
#endif
#include <complex.h>
- } "$flags $cpu_unset -march=armv8.3-a+simd"] } {
- set et_arm_v8_3a_complex_neon_flags "$flags $cpu_unset -march=armv8.3-a+simd"
+ } "$flags"] } {
+ set et_arm_v8_3a_complex_neon_flags "$flags"
return 1;
}
}
proc check_effective_target_arm_v8_3a_fp16_complex_neon_ok_nocache { } {
global et_arm_v8_3a_fp16_complex_neon_flags
set et_arm_v8_3a_fp16_complex_neon_flags ""
- set cpu_unset ""
if { ![istarget arm*-*-*] && ![istarget aarch64*-*-*] } {
return 0;
}
if { [istarget arm*-*-*] } {
- set cpu_unset "-mcpu=unset"
+ set flag_opts {
+ ""
+ "-mfpu=auto -mcpu=unset -march=armv8.3-a+fp16+simd"
+ "-mfloat-abi=softfp -mfpu=auto -mcpu=unset -march=armv8.3-a+fp16+simd"
+ "-mfloat-abi=hard -mfpu=auto -mcpu=unset -march=armv8.3-a+fp16+simd"
+ }
+ } else {
+ set flag_opts { "" "-march=armv8.3-a+fp16" }
}
# Iterate through sets of options to find the compiler flags that
# need to be added to the -march option.
- foreach flags {"" "-mfloat-abi=softfp -mfpu=auto" "-mfloat-abi=hard -mfpu=auto"} {
+ foreach flags $flag_opts {
if { [check_no_compiler_messages_nocache \
arm_v8_3a_fp16_complex_neon_ok assembly {
#if !defined (__ARM_FEATURE_COMPLEX)
#error "__ARM_FEATURE_FP16_VECTOR_ARITHMETIC not defined"
#endif
#include <complex.h>
- } "$flags $cpu_unset -march=armv8.3-a+fp16+simd"] } {
- set et_arm_v8_3a_fp16_complex_neon_flags \
- "$flags $cpu_unset -march=armv8.3-a+fp16+simd"
+ } "$flags"] } {
+ set et_arm_v8_3a_fp16_complex_neon_flags "$flags"
return 1;
}
}