VC8とVC7の比較
気になるのが、VC7.1ではぶっちぎりに速い組み込み関数版が、VC8ではなぜそんなに遅いのか。コードを比較してみる。
; process<1> (VC8) fld DWORD PTR _f$[ebp] fmul ST(0), ST(0) fstp DWORD PTR _f$[ebp] movss xmm0, DWORD PTR _f$[ebp] cvttss2si ecx, xmm0
; process<1> (VC7.1) fld ST(0) lea ecx, DWORD PTR $T56341[esp+32] fmulp ST(1), ST(0) fst DWORD PTR $T56341[esp+32] movss xmm0, DWORD PTR [ecx] cvttss2si edx, xmm0
この当たりまで来ると何が悪いのかさっぱり。movssへのアドレスの渡し方が違うことや、前半の計算のコードが全く違うことが原因か。ということで、結論から言えば、組み込み関数版が、総合評価でベストというところか。