翻转mxcsr寄存器中的位

时间:2017-12-20 01:03:11

标签: visual-c++ fpu

我试图在mxcsr控制寄存器中设置位。我知道如何使用gcc(fesetenv)来做到这一点,但我还没有能够使用这个有效的MSVC。我考虑过的可能性是:

  1. 汇编,在MSVC x64上不支持内联。
  2. _controlfp函数,似乎并不是一对一匹配(请注意,我可能完全误解了这个函数,但所有这些都没有详细记录)。
  3. 具体来说,我想设置these bits

    • " Denormals为零"
    • "冲到零"

    关于我如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

_controlfp例程是一个适用于ARM,x86和x64的通用例程 - 没有理由期望它使用实际硬件寄存器使用的相同位。

从文章_controlfp可以看出,_controlfp不允许单独控制输入和输出非正规数,而是将它们组合在一起。

要将x64 SSE2设置为将非正规操作数和输出刷新为零,请使用

_controlfp(_DN_FLUSH, _MCW_DN);