翻转 mxcsr 寄存器中的位
Flipping bits in the mxcsr register
我正在尝试设置 mxcsr 控制寄存器中的位。我知道如何使用 gcc (fesetenv
) 执行此操作,但我无法使此 MSVC 正常工作。我考虑过的可能性是:
- 程序集,在 MSVC x64 上不支持内联。
_controlfp
函数,它似乎不是一对一匹配的(请注意,我可能完全误解了这个函数,但所有这些都没有记录)。
具体来说,我想设置these bits:
- "Denormals are zeros"
- "Flush to zeros"
关于如何执行此操作的任何想法?
_controlfp
例程是适用于 ARM、x86 和 x64 的通用例程 - 没有理由期望它使用与实际硬件寄存器使用的相同位。
从文章 _controlfp 看来,_controlfp
不允许单独控制输入和输出非正规化,而是将它们组合在一起。
要将 x64 SSE2 设置为将非规范操作数和输出刷新为零,请使用
_controlfp(_DN_FLUSH, _MCW_DN);
我正在尝试设置 mxcsr 控制寄存器中的位。我知道如何使用 gcc (fesetenv
) 执行此操作,但我无法使此 MSVC 正常工作。我考虑过的可能性是:
- 程序集,在 MSVC x64 上不支持内联。
_controlfp
函数,它似乎不是一对一匹配的(请注意,我可能完全误解了这个函数,但所有这些都没有记录)。
具体来说,我想设置these bits:
- "Denormals are zeros"
- "Flush to zeros"
关于如何执行此操作的任何想法?
_controlfp
例程是适用于 ARM、x86 和 x64 的通用例程 - 没有理由期望它使用与实际硬件寄存器使用的相同位。
从文章 _controlfp 看来,_controlfp
不允许单独控制输入和输出非正规化,而是将它们组合在一起。
要将 x64 SSE2 设置为将非规范操作数和输出刷新为零,请使用
_controlfp(_DN_FLUSH, _MCW_DN);