Question

La documentation pour _control87 Remarques:

_control87 [...] affectent les mots de contrôle pour le x87 et le SSE2, le cas échéant.

Il semble que les registres de contrôle SSE et SSE2 MXCSR soient identiques, cependant, il n'y a aucune mention de l'unité SSE dans la documentation.Fait _control87 affecter le registre de contrôle MXCSR d'une unité SSE ou est-ce uniquement vrai pour SSE2 ?

Était-ce utile?

La solution

J'ai sorti un vieux Pentium III et vérifié avec le code suivant :

#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;
}

Résultat sur Pentium III (SSE) :

Exception Mask: 0x00000000
Exception Mask: 0x00000000

Résultat sur Xeon (SSE, SSE2, SSE3, SSSE3) :

Exception Mask: 0x00000000
Exception Mask: 0x00001e80

Les résultats sont surprenants, mais conformes à la documentation. _control87 n'a d'effet sur le registre de contrôle MXCSR que si au moins une unité SSE2 est disponible.

Autres conseils

Un MXCSR contrôle à la fois sse et sse2 (et sse3 et ssse3 et sse4.1 et ...)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top