Visual Studio 2010 incorporates a common technique for converting a memory based 32 bit signed integer to a 32 bit floating point xmm register using a movd and cvtdq2ps instruction pairing. The problem for us is that cvtdq2ps is an SSE2 instruction and might give the ol' PIII's and Athlon XP's pause when running programs compiled for SSE targets.Example of incorrect code generation for SSE-only machines:void test(float *v, int alpha) { float f = v[1] * alpha; ... 00000 66 0f 6e 44 24 04 movd xmm0, DWORD PTR _alpha$[esp-4] 00006 f3 0f 10 48 04 movss xmm1, DWORD PTR [eax+4] 0000b 0f 5b c0 cvtdq2ps xmm0, xmm0 0000e f3 0f 59 c8 mulss xmm1, xmm0Using these compiler options:D:\Program Files\Microsoft Visual Studio 10.0\VC\bin\CL.exe /c /I"D:\Program Files\Microsoft DirectX SDK (February 2010)\Include" /D WIN32 /D NDEBUG /D _WINDOWS /D UNICODE /D _WIN32_WINNT=0x0500 /D_VC80_UPGRADE=0x0600 /D _UNICODE /D UNICODE /Zi /nologo /W2 /WX- /Ox /Ob1 /Oi /Ot /Oy /GL /GF /Gm- /MT /GS- /Gy /arch:SSE /fp:fast /fp:except- /Zc:wchar_t /Zc:forScope /GR- /FAcs /Gr /TP /analyze- /errorReport:queue /Fd".\Release/jack.pdb"
Product Language
Visual Studio Version
Operating System
Operating System Language
Steps to Reproduce
Actual Results
Expected Results
Please wait...