Maneira correta de habilitar o SSE4 em uma função / por bloco de código?

Para um dos meus programas OS X, tenho alguns casos otimizados que usam instruções SSE4.1. Em máquinas somente SSE3, a ramificação não otimizada é executada:

// SupportsSSE4_1 returns true on CPUs that support SSE4.1, false otherwise
if (SupportsSSE4_1()) {

    // Code that uses _mm_dp_ps, an SSE4 instruction

    ...

    __m128 hDelta   = _mm_sub_ps(here128, right128);
    __m128 vDelta   = _mm_sub_ps(here128, down128);

    hDelta = _mm_sqrt_ss(_mm_dp_ps(hDelta, hDelta, 0x71));
    vDelta = _mm_sqrt_ss(_mm_dp_ps(vDelta, vDelta, 0x71));

    ...

} else {
    // Equivalent code that uses SSE3 instructions
    ...
}

Para que o acima seja compilado, eu tive que definirCLANG_X86_VECTOR_INSTRUCTIONS parasse4.1.

No entanto, isso parece instruir o clang de que não há problema em usar oROUNDSD instruções em qualquer lugar do meu programa. Portanto, o programa está travando em máquinas somente SSE3 comSIGILL: ILL_ILLOPC.

Qual é a melhor prática para ativar o SSE4.1 apenas para as linhas do código dentro da verdadeira ramificação doSupportsSSE4_1() se bloquear?

questionAnswers(3)

yourAnswerToTheQuestion