我有一个 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;
[...]
}
第三行 ( 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
谁能解释这个程序集的作用?我不知道为什么cvttss2si
并且movaps
完全被使用,它们不是用于浮点数吗?
我在 Windows 7 上使用 Visual Studio 2008,启用了 SSE2 指令集。