我有一個C++函數,恰似:奇怪彙編2008
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);
[...]
而someStruct
被聲明爲:
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
(另請參閱result by AMDCodeAnalyst)
任何人都可以解釋這個組件做什麼?我不知道爲什麼使用cvttss2si
和movaps
,他們不是用於浮點數嗎?
我在Windows 7上使用Visual Studio 2008,並啓用了SSE2指令集。
但他們做什麼/他們爲什麼需要?我認爲它們主要是用於浮點數 – tobspr
但是它們被轉換爲int之前..或者也是在程序集中完成的嗎?我沒有真正的裝配知識。 – tobspr
您可以在[英特爾手冊]中找到他們的工作內容(http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html?wapkw=(Intel + Architecture +軟件+開發人員%E2%80%99s +手冊)91) – Michael