Pergunta

A documentação para _control87 notas:

_control87 [...] afetam o[s] as palavras de controle, tanto para o 87 x e o SSE2, se presente.

Parece que SSE e SSE2 MXCSR registradores de controle são idênticos, no entanto, não há nenhuma menção de SSE unidade na documentação.Não _control87 afetar uma unidade SSE do MXCSR registro de controle ou isso só é verdadeiro para SSE2?

Foi útil?

Solução

Eu desenterrou um velho Pentium III e verificado com o seguinte código:

#include <Windows.h>
#include <float.h>
#include <xmmintrin.h>
#include <iostream>
#include <iomanip>

int _tmain( int argc, _TCHAR* argv[] ) {
    using namespace std;

    // Unmask all SSE/SSE2 exceptions
    _MM_SET_EXCEPTION_MASK( 0 );
    // Get SSE/SSE2 exception mask
    DWORD dwExceptionMask = _MM_GET_EXCEPTION_MASK();
    cout << "Exception Mask: 0x" << hex << setw( 8 )
         << setfill( '0' ) << dwExceptionMask << endl;

    // Mask all FPU exceptions
    _control87( 0xFFFF, _MCW_EM );

    // Get SSE/SSE2 exception mask
    dwExceptionMask = _MM_GET_EXCEPTION_MASK();
    cout << "Exception Mask: 0x" << hex << setw( 8 )
         << setfill( '0' ) << dwExceptionMask << endl;

    return 0;
}

Resultado no Pentium III (SSE):

Exception Mask: 0x00000000
Exception Mask: 0x00000000

Resultado Xeon (SSE, SSE2, SSE3, SSSE3):

Exception Mask: 0x00000000
Exception Mask: 0x00001e80

Os resultados são surpreendentes, mas em linha com a documentação. _control87 só tem um efeito sobre o MXCSR controle de registrar-se, pelo menos, um SSE2 unidade está disponível.

Outras dicas

Um MXCSR controla tanto o sse e sse2 (e sse3 e ssse3 e sse4.1 e (...)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top