翻转 mxcsr 寄存器中的位

Flipping bits in the mxcsr register

我正在尝试设置 mxcsr 控制寄存器中的位。我知道如何使用 gcc (fesetenv) 执行此操作,但我无法使此 MSVC 正常工作。我考虑过的可能性是:

  1. 程序集,在 MSVC x64 上不支持内联。
  2. _controlfp 函数,它似乎不是一对一匹配的(请注意,我可能完全误解了这个函数,但所有这些都没有记录)。

具体来说,我想设置these bits:

关于如何执行此操作的任何想法?

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

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

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

_controlfp(_DN_FLUSH, _MCW_DN);