2013-11-26 3 views
3

Как говорится в этом вопросе .. Как сообщить GCC, чтобы я мог использовать встроенные функции SSE4.1, но НЕ оптимизировать с помощью SSE4.1 (например, путем сопоставления строк SSE4.1) по всему остальному коду в том же переводе Ед. изм?Скажите GCC «Я хочу использовать SSE4.1, но ТОЛЬКО в тех местах, которые я хочу!»

+0

Почему? Вы следовали совету в http://stackoverflow.com/questions/20215775/sse4-1-automatically-put-in-string-comparison-on-newer-gcc и исправили свой SSE-код? – MSalters

+0

Я сделал это, но все еще не могу решить проблему с заголовком –

ответ

5

Вы можете использовать Function Attributes, чтобы изменить целевые параметры компиляции для каждой функции. Руководство GCC дает следующие примеры:

int core2_func (void) __attribute__ ((__target__ ("arch=core2"))); 
int sse3_func (void) __attribute__ ((__target__ ("sse3"))); 

Вы также можете отключить на основе каждой функции, например:

int no_sse3_func (void) __attribute__ ((__target__ ("no-sse3"))); 
+0

Это может реально решить мою проблему, но как насчет файлов заголовков? Я не могу включить их "#error набор команд SSE4.1 не включен", если я не включаю -msse41 для всей единицы перевода –

3

В дополнении к предложению @PeterCorlett, что дает вам контроль за-функцию , если это возможно, вы можете просто реорганизовать свой код, чтобы части, которые вы хотите включить SSE4, находятся в одной единицы перевода, а затем укажите разные параметры gcc для этого одного файла.

Однако, если части, в которых вы хотите управлять генерацией кода, являются детализацией подфункций, я не уверен, что вы можете выполнить то, что хотите (кроме разделения функций и потери встроенного характера этих блоков в процесс).

Смежные вопросы