mr *_*mpy 2 floating-point 64-bit visual-c++
我正在将一些代码移植到Windows(叹息)并需要使用fesetround.MSVC不支持C99,因此对于x86,我从MinGW复制了一个实现,并将其破解为:
//__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 }
}
Run Code Online (Sandbox Code Playgroud)
评论的行是gcc的原件; msvc取消注释.这似乎有效.
但是x64 cl.exe不支持内联asm,所以我卡住了.那里有一些代码,我可以"借"这个吗?(我花了几个小时与谷歌合作).或者我是否需要绕行2周才能学习装配并弄清楚如何使用MASM?任何建议表示赞赏.谢谢.
归档时间: |
|
查看次数: |
1261 次 |
最近记录: |