Как включить встроенные функции SSSE3, но отключить их использование при оптимизации компилятора

У меня есть код, который использует внутренние команды SSSE3 (обратите внимание на тройку S) и проверку во время выполнения, нужно ли его использовать, поэтому я предположил, что приложение должно выполняться на процессорах без поддержки SSSE3.
Однако при использовании -mssse3 с оптимизацией -O1 компилятор также вставляет инструкции SSSE3, которые я не вызывал явным образом, поэтому программа аварийно завершает работу.

Есть ли способ включить код SSSE3, когда я ЯВНО вызываю соответствующие встроенные функции, но не позволяю компилятору добавлять свой собственный код SSSE3?

Обратите внимание, что я не могу отключить оптимизацию -O1.

5

Решение

Решение этой проблемы — НЕ компилировать ВСЕ программный код с опцией -mssse3, а скомпилировать только ту часть, которая фактически использует эти функции с этой опцией. Другими словами:

 // main.cpp
...

if (use_ssse3())
do_something_ssse3();
else
do_something_traditional();

 // traditional.cpp:
void do_something_traditional()
{
...
code goes here ...
}

 // ssse3.cpp:
void do_something_ssse3()
{
...
code goes here ...
}

Только «ssse3.cpp» должен быть скомпилирован с -mssse3 флаг.

10

Другие решения

Если вы используете gcc, вы можете просто скомпилировать код, не используя -mssse3 переключить и потянуть в SSSE3 с

#define __SSSE3__ 1
#include <tmmintrin.h>

где они вам нужны.

0

По вопросам рекламы [email protected]