优化级别的宏 (ARMCC V6)
Macro for optimization level (ARMCC V6)
有一些预定义的宏,例如 __OPTIMIZE__
(在所有优化编译中定义)和 __OPTIMIZE_SIZE__
(如果编译器正在优化大小则定义)。
我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果不正确,我会打印出警告。
是否可以检查是否设置了优化级别-Ofast
?
可能类似于 __OPTIMIZE_FAST__
或 __OPTIMIZE_SPEED__
.
我检查了ARMCC command line options and it seems there's no -Ofast
like in many other compilers. However if the behavior is the same as in GCC/Clang/ICC... then -Ofast
is essentially just -O3
with --fpmode=fast
so you can check it with __FP_FAST
,可能与__OPTIMISE_LEVEL
有关
在 GCC 中,您可以使用 __FAST_MATH__
. __NO_MATH_ERRNO__
也可以使用,尽管它可能不是完全匹配,因为如果指定 -fno-math-errno
也会定义
#ifdef __OPTIMIZE__
printf("Optimized\n");
#ifdef __ARMCC_VERSION
#if defined(__FP_FAST) && __OPTIMISE_LEVEL >= 3
printf("-Ofast ARMCC\n");
#endif
#elif defined(__GNUC__)
#if defined(__FAST_MATH__)
// #if defined(__NO_MATH_ERRNO__)
printf("-Ofast GNUC\n");
#endif
#endif
#endif
有一些预定义的宏,例如 __OPTIMIZE__
(在所有优化编译中定义)和 __OPTIMIZE_SIZE__
(如果编译器正在优化大小则定义)。
我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果不正确,我会打印出警告。
是否可以检查是否设置了优化级别-Ofast
?
可能类似于 __OPTIMIZE_FAST__
或 __OPTIMIZE_SPEED__
.
我检查了ARMCC command line options and it seems there's no -Ofast
like in many other compilers. However if the behavior is the same as in GCC/Clang/ICC... then -Ofast
is essentially just -O3
with --fpmode=fast
so you can check it with __FP_FAST
,可能与__OPTIMISE_LEVEL
在 GCC 中,您可以使用 __FAST_MATH__
. __NO_MATH_ERRNO__
也可以使用,尽管它可能不是完全匹配,因为如果指定 -fno-math-errno
也会定义
#ifdef __OPTIMIZE__
printf("Optimized\n");
#ifdef __ARMCC_VERSION
#if defined(__FP_FAST) && __OPTIMISE_LEVEL >= 3
printf("-Ofast ARMCC\n");
#endif
#elif defined(__GNUC__)
#if defined(__FAST_MATH__)
// #if defined(__NO_MATH_ERRNO__)
printf("-Ofast GNUC\n");
#endif
#endif
#endif