Qual é a maneira correta de usar diferentes versões de intrínsecos SSE no GCC?

Eu vou fazer a minha pergunta, dando um exemplo. Agora eu tenho uma função chamadado_something().

Tem três versões:do_something(), do_something_sse3()edo_something_sse4(). Quando meu programa é executado, ele detecta o recurso da CPU (veja se ele suporta SSE3 ou SSE4) e chama uma das três versões de acordo.

O problema é: Quando eu construo meu programa com o GCC, eu tenho que definir-msse4 parado_something_sse4() para compilar (por exemplo, para o arquivo de cabeçalho<smmintrin.h> A ser incluído).

No entanto, se eu definir-msse4, então o gcc pode usar instruções SSE4, e alguns intrínsecos emdo_something_sse3() também é traduzido para algumas instruções SSE4. Então, se o meu programa roda na CPU que tem apenas suporte SSE3 (mas não SSE4), ele causa "instrução ilegal" quando as chamadasdo_something_sse3().

Talvez eu tenha alguma prática ruim. Você poderia dar algumas sugestões? Obrigado.

questionAnswers(4)

yourAnswerToTheQuestion