【问题标题】:Does _control87() also set the SSE MXCSR Control Register?_control87() 是否也设置 SSE MXCSR 控制寄存器?
【发布时间】:2013-11-18 10:53:07
【问题描述】:

_control87 的文档说明:

_control87 [...] 影响 [s] x87 和 SSE2 的控制字(如果存在)。

似乎 SSE 和 SSE2 MXCSR 控制寄存器是相同的,但是,文档中没有提到 SSE 单元。 _control87 是否会影响 SSE 单元的 MXCSR 控制寄存器,还是仅适用于 SSE2?

【问题讨论】:

    标签: visual-c++ sse msvcrt crt fpu


    【解决方案1】:

    我挖出了一个旧的 Pentium III 并用以下代码检查:

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

    Pentium III (SSE) 上的结果:

    Exception Mask: 0x00000000
    Exception Mask: 0x00000000
    

    Xeon 上的结果(SSE、SSE2、SSE3、SSSE3):

    Exception Mask: 0x00000000
    Exception Mask: 0x00001e80
    

    结果令人惊讶,但与文档一致。 _control87 仅在至少有一个 SSE2 单元可用时才会对 MXCSR 控制寄存器产生影响。

    【讨论】:

      【解决方案2】:

      一个 MXCSR 控制 sse 和 sse2(以及 sse3 和 ssse3 以及 sse4.1 和 ...)

      【讨论】:

      • 感谢您的信息。这实际上是_control87 函数在所有 SSE 实现中行为相同的更多原因。令人惊讶的是,它没有。
      • 我认为这是因为 MSVC 不针对 fp 代码生成的 SSE,除非 SSE2 也可用。
      • MSVC 提供/arch:SSE 和/arch:SSE2 编译器开关,以在优化 FP 代码时控制指令集的可用性。如果/arch:SSE 开关与任何优化选项一起使用,它确实会生成 SSE(即纯单精度)浮点代码。
      • 如果我说这是 MSVC 的数字模型第一次让我难过,那我是在撒谎。很有趣。
      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      相关资源
      最近更新 更多