翻转mxcsr寄存器中的位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻转mxcsr寄存器中的位相关的知识,希望对你有一定的参考价值。

我正在尝试在mxcsr控制寄存器中设置位。我知道如何用gcc(fesetenv)做到这一点,但我无法让这个工作MSVC。我考虑过的可能性是:

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

具体来说,我想设置these bits

  • “非正规为零”
  • “冲到零”

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

答案

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

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

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

_controlfp(_DN_FLUSH, _MCW_DN);

以上是关于翻转mxcsr寄存器中的位的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 PIC 汇编代码中的位不移位?

在没有按位运算的情况下翻转整数中的位

C中的位设置逻辑

如何使用事件侦听器来加载动画片段的循环

修改寄存器的位操作方法

片段(Java) | 机试题+算法思路+考点+代码解析 2023