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へのアドレスの渡し方が違うことや、前半の計算のコードが全く違うことが原因か。ということで、結論から言えば、組み込み関数版が、総合評価でベストというところか。