2011-01-10 2 views
2

유틸리티 라이브러리에 포함되어 있고 C++ Builder에서 컴파일 및 실행될 때 생성 된 유닛 테스트에 실패했습니다. 문제는 다음과 같습니다. 단위 테스트를 실행할 때 프로그램은 라인 fldcw controlWord에서 멈추어 서 지나갈 수 없습니다. 그것은 결코 일어나지 않을 무언가를 기다리고있는 것 같습니다. 어떤 아이디어?문제 설정 FPU 제어 워드

void FPUControl::setControlWord(short controlWord) 
{ 
    // set the control word - note this assembly construct works on 
    // Visual C++ and Borland C++, but may need to be changed for other 
    // compilers 
#ifndef __GNUC__ 
    __asm 
    { 
     fldcw controlWord 
    } 
#else 
    asm volatile 
    (
     "fldcw %[controlWord]" 
    : 
    : [controlWord] "m" (controlWord) 
    ); 
#endif 
} 
+0

이렇게하기 전에 FPU를 재설정하는 것이 좋습니다. 그러면 즉시 예외가 발생하지 않습니다. FNINIT. –

답변

1

코드가 잘 작동합니다 (C++ Builder 2007에서 확인). 이 코드는 컴파일도 C++ 빌더 XE에서 실행 : Default8087CW는 4978.

+0

Release 또는 Debug에서 빌드 하시겠습니까? - 나를 위해 릴리스 있지만 디버그 작동합니다. 나는 2009 년을 사용하고있다. – Seth

+0

나는 C++ 빌더를 유효한 C++ 컴파일러로 생각하지 않을 것이다. –

+0

@ Zenikoder : OP가 C++ Builder를 명시 적으로 표시했을 때 GCC 또는 MSVC를 대신하여 확인해야합니다. ??? 트롤이되는 것을 멈추고 자라십시오. –

0

@Zach입니다

setControlWord(Default8087CW); 

. 기록을 위해 나는 그것을 수업의 일부로 포함시키지 않았다.