Como controlar se a matemática C usa SSE2?

Entrei na montagem das funções matemáticas transcendentais da biblioteca C com o MSVC no modo fp: strict. Todos eles parecem seguir o mesmo padrão, aqui está o que acontece parasin.

Primeiro, há uma rotina de envio de um arquivo chamado "disp_pentium4.inc". Verifica se a variável___use_sse2_mathfcns foi definido; se assim for, chamadas__sin_pentium4, caso contrário chama__sin_default.

__sin_pentium4 (em "sin_pentium4.asm") começa por transferir o argumento do fpu x87 para o registrador xmm0, executa o cálculo usando instruções SSE2 e carrega o resultado de volta no fpu.

__sin_default (em "sin.asm") mantém a variável na pilha x87 e simplesmente chamafsin.

Assim, em ambos os casos, o operando é empurrado na pilha x87 e retornado nele também, tornando-o transparente para o chamador, mas se___use_sse2_mathfcns é definido, a operação é realmente executada em SSE2 em vez de x87.

Esse comportamento é muito interessante para mim porque as funções transcendentais x87 são notórias por terem comportamentos ligeiramente diferentes dependendo da implementação, enquanto uma determinada parte do código SSE2 deve sempre fornecer resultados reproduzíveis.

Existe uma maneira de determinar com certeza, seja em compilação ou em tempo de execução, que o caminho de código SSE2 será usado? Eu não sou proficiente em escrever assembly, então se isso envolve escrever qualquer assembly, um exemplo de código seria apreciado.

questionAnswers(3)

yourAnswerToTheQuestion