2010-06-05 57 views
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?任何建议表示赞赏。谢谢。

回答