¿Cuál es la forma correcta de usar diferentes versiones de intrínsecos SSE en GCC?

Voy a hacer mi pregunta dando un ejemplo. Ahora tengo una función llamadado_something().

Tiene tres versiones:do_something(), do_something_sse3()ydo_something_sse4(). Cuando mi programa se ejecute, detectará la función de la CPU (ver si es compatible con SSE3 o SSE4) y llamará a una de las tres versiones en consecuencia.

El problema es: Cuando construyo mi programa con GCC, tengo que configurar-msse4 parado_something_sse4() para compilar (por ejemplo, para el archivo de encabezado<smmintrin.h> ser incluido).

Sin embargo, si configuro-msse4, entonces a gcc se le permite usar instrucciones SSE4, y algunos intrínsecos endo_something_sse3() También se traduce a algunas instrucciones SSE4. Por lo tanto, si mi programa se ejecuta en una CPU que solo admite SSE3 (pero no SSE4), se genera una "instrucción ilegal" cuando se realizan las llamadas.do_something_sse3().

Tal vez tenga alguna mala práctica. ¿Podrías dar algunas sugerencias? Gracias.

Respuestas a la pregunta(4)

Su respuesta a la pregunta