【问题标题】:Macro for optimization level (ARMCC V6)优化级别的宏 (ARMCC V6)
【发布时间】:2020-11-22 22:27:37
【问题描述】:

有预定义的宏,例如 __OPTIMIZE__(在所有优化编译中定义)和 __OPTIMIZE_SIZE__(在编译器优化大小时定义)。

我使用这些宏来检查是否为发布目标设置了正确的优化级别,如果没有,我会打印出警告。

是否可以检查优化级别-Ofast 是否设置? 可能类似于__OPTIMIZE_FAST____OPTIMIZE_SPEED__

【问题讨论】:

  • 那么……你做了什么研究?你读过你的编译器文档吗?
  • 是的,我阅读了文档。根据我的研究和知识,没有可用的宏。我的希望是,其他人会知道更多......

标签: c macros compiler-options armv6 armcc


【解决方案1】:

我检查了ARMCC command line options,似乎没有像许多其他编译器那样的-Ofast。但是,如果行为与 GCC/Clang/ICC 中的行为相同......那么-Ofast 本质上只是-O3--fpmode=fast,因此您可以使用__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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2018-10-06
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多