次のようなC++関数があります。
inline unsigned short function_name(float x, float y, someStruct *cfg)
{
int x_pos = (int)(x*2 + 0.5f);
int y_pos = (int)(y*2 + 0.5f);
int dict_index = x_pos + (y_pos * cfg->subdivisions_adj);
[...]
whilesomeStruct
は次のように宣言されています。
struct someStruct {
int subdivisions;
int subdivisions_adj;
[...]
}
3 行目の生成されたアセンブリ ( int dict_index = [...]
) は次のとおりです。
cvttss2si edi,xmm3
imul edi,[ecx+04h]
movss xmm3,[ecx+0ch]
movaps xmm4,xmm3
mulss xmm4,xmm0
addss xmm4,xmm1
cvttss2si eax,xmm4
add edi,eax
( AMDCodeAnalyst による結果も参照してください)
このアセンブリの機能を説明できる人はいますか? 理由はわかりませんが、浮動小数点数用ではありませんかcvttss2si
?movaps
SSE2 命令セットを有効にして、Windows 7 で Visual Studio 2008 を使用しています。