Скажите GCC: "Я хочу использовать SSE4.1, но ТОЛЬКО в тех местах, где я хочу!"
Как говорит субъект... как я могу сказать GCC разрешить мне использовать встроенные функции SSE4.1, но НЕ оптимизировать с помощью SSE4.1 (например, путем сравнения строк SSE4.1) во всем остальном коде в том же модуле перевода?
2 ответа
Вы можете использовать Атрибуты функций, чтобы изменить параметры цели компиляции для каждой функции. Руководство 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")));
В дополнение к предложению @PeterCorlett, которое дает вам контроль за каждой функцией, если это возможно, вы можете просто реорганизовать свой код, чтобы части, в которых вы хотите включить SSE4, находились в одной единице перевода, а затем указывать разные gcc
параметры для этого одного файла.
Тем не менее, если части, в которых вы хотите управлять генерацией кода, имеют подфункцию гранулярности, я не уверен, что вы можете достичь того, чего хотите (кроме разделения функций и потери встроенного характера этих блоков в процессе).