2010-06-05 5 views
2

일부 코드를 Windows로 포팅하고 (figh) fesetround를 사용해야합니다. 내가는 MinGW에서 구현을 복사에 대해 그것을 해킹 x86 용 있도록 MSVC는 C99를 지원하지 않습니다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을 지원하지 않으므로 막혔습니다. 거기에 내가 "빌릴 수있는"몇 가지 코드가 있습니까? (Google과 시간을 보냈습니다.) 아니면 몇 가지 어셈블리를 배우고 MASM을 사용하는 방법을 파악하기 위해 2 주간의 우회로를 가야합니까? 모든 조언을 부탁드립니다. 고맙습니다.

답변

6

VC++ 런타임 라이브러리는 다음과 같은 기능을 제공합니다. _control87, _controlfp, __control87_2이므로 어셈블러를 사용하지 않고 구현을 제공 할 수 있어야합니다.

+0

티켓입니다. 감사. –