2
我将一些代码移植到Windows(叹息)并需要使用fesetround。 MSVC不支持C99,所以我的x86复制从MinGW的实现和黑客攻击有关:与MSVC x64的fesetround
//__asm__ volatile ("fnstcw %0;": "=m" (_cw));
__asm { fnstcw _cw }
_cw &= ~(FE_TONEAREST | FE_DOWNWARD | FE_UPWARD | FE_TOWARDZERO);
_cw |= mode;
//__asm__ volatile ("fldcw %0;" : : "m" (_cw));
__asm { fldcw _cw }
if (has_sse) {
unsigned int _mxcsr;
//__asm__ volatile ("stmxcsr %0" : "=m" (_mxcsr));
__asm { stmxcsr _mxcsr }
_mxcsr &= ~ 0x6000;
_mxcsr |= (mode << __MXCSR_ROUND_FLAG_SHIFT);
//__asm__ volatile ("ldmxcsr %0" : : "m" (_mxcsr));
__asm { ldmxcsr _mxcsr }
}
注释行是GCC原件;未注释为msvc。这似乎工作。
但是,x64 cl.exe不支持内联asm,所以我卡住了。是否有一些代码可以“借用”这个? (我花了几个小时与谷歌)。或者我需要进行2周的绕道学习一些程序集并弄清楚如何使用MASM?任何建议表示赞赏。谢谢。
这就是票。谢谢。 – 2010-06-05 16:01:07