【发布时间】:2017-04-03 19:04:46
【问题描述】:
我正在使用 gcc 编译器,我希望能够快速更改 sse 舍入模式。以下代码在linux下编译即可:
#include <xmmintrin.h>
unsigned int _mxcsr_up = _MM_MASK_MASK | _MM_ROUND_UP;
unsigned int _mxcsr_down = _MM_MASK_MASK | _MM_ROUND_DOWN;
unsigned int _mxcsr_n = _MM_MASK_MASK;
void round_nearest_mode() {
asm (
"ldmxcsr %0" : : "m" (_mxcsr_n)
);
}
void round_up_mode() {
asm (
"ldmxcsr %0" : : "m" (_mxcsr_up)
);
}
void round_down_mode() {
asm (
"ldmxcsr %0" : : "m" (_mxcsr_down)
);
}
但是当我在windows下使用MinGW编译时,舍入模式并没有改变。是什么原因?
【问题讨论】:
-
@StoryTeller 我包含
但我不能使用它的内容。我认为条件'#if _GLIBCXX_USE_C99_FENV_TR1'不满足,但我不知道为什么。 -
将项目构建为 C99。将
-std=c99添加到编译器调用(如果您使用IDE,则在项目选项中查找选项)。 -
是什么让你觉得模式没变?你如何测试这个?
-
@DavidWohlferd:我认为他真的没有改变舍入模式,因为他正在 ORing _MM_MASK_MASK 而不是 ANDing。
标签: c gcc assembly floating-point mingw