2011-01-10 13 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++ BuilderのXEの下で実行されます:Default8087CWは4978.

+0

ReleaseまたはDebugでビルドしていますか? - それは私のリリースでは動作しますが、Debugでは動作しません。私は2009を使用しています。 – Seth

+0

私はC++ビルダーを有効なC++コンパイラとは考えていません。 –

+0

@Zenikoder:オペレータが明示的にC++ Builderを書いたときに、代わりにGCCやMSVCと照合して返信すべきですか?トロールを止めて育つ。 –

0

@Zachある

setControlWord(Default8087CW); 

。記録のために、私はそれをクラスの一部として含めなかった。