¿Forma correcta de habilitar SSE4 por función / por bloque de código?

Para uno de mis programas OS X, tengo algunos casos optimizados que usan instrucciones SSE4.1. En máquinas solo SSE3, se ejecuta la rama no optimizada:

// 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 poder compilar lo anterior, tuve que configurarCLANG_X86_VECTOR_INSTRUCTIONS asse4.1.

Sin embargo, esto parece indicar a Clang que está bien usar elROUNDSD instrucción en cualquier parte de mi programa. Por lo tanto, el programa se bloquea en máquinas solo SSE3 conSIGILL: ILL_ILLOPC.

¿Cuál es la mejor práctica para habilitar SSE4.1 solo para las líneas del código dentro de la rama verdadera de laSupportsSSE4_1() si bloque?