0

次のような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 を使用しています。

4

1 に答える 1