cvttss2si
仕方がないので、アセンブラにご登場いただくことに。
int f2i(float f) { _asm {cvttss2si eax, f} } int main(int argc, char* argv[]) { float f = atof(argv[1]); return f2i(f); }
そうすると、意外にもコンパクトなコードが生成されました。
mov eax, DWORD PTR _argv$[esp-4] mov ecx, DWORD PTR [eax+4] push ecx call _atof fstp DWORD PTR _f$[esp] add esp, 4 cvttss2si eax, DWORD PTR _f$[esp-4] ret 0
実は、この間に、declspec(naked)版も作成したんですが、そうすると、VC8は余計なcallを追加してくれたのでそれは却下。