Макрос для уровня оптимизации (ARM CC V6) - PullRequest
0 голосов
/ 02 августа 2020

Существуют предопределенные макросы, такие как __OPTIMIZE__ (определяется во всех оптимизирующих компиляциях) и __OPTIMIZE_SIZE__ (определяется, если компилятор оптимизирует размер).

Я использую эти макросы, чтобы проверить правильность оптимизации уровень установлен для цели выпуска, если нет, я распечатываю предупреждение.

Есть ли возможность проверить, установлен ли уровень оптимизации -Ofast или нет? Возможно что-то вроде __OPTIMIZE_FAST__ или __OPTIMIZE_SPEED__.

1 Ответ

0 голосов
/ 13 августа 2020

Я проверил параметры командной строки ARM CC и, похоже, нет -Ofast, как во многих других компиляторах. Однако, если поведение такое же, как в GCC / Clang / I CC ... тогда -Ofast по сути просто -O3 с --fpmode=fast, поэтому вы можете проверить его с помощью __FP_FAST, возможно, вместе с __OPTIMISE_LEVEL

В G CC вы можете использовать __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
...