与MSVC x64相比

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?任何建议表示赞赏.谢谢.

Ric*_*ard 6

VC++运行时库确实提供了等价物,例如_control87,_controlfp,__ control87_2,因此您应该能够提供实现而无需使用汇编程序.