VC++2005/VC++2008 SSEを無効にしててもSSE2の最適化を行ってしまうことが判明
SSE未使用にしてるバイナリで SSE2命令が使われてしまう
実際に最小限のプログラムでどうなるか追跡してみました。
Entry pointで
sse2_math() -> get_sse2_info() が呼び出されてるのが判明。
ちなみに、VC++2008も2005も同じだった!
えーと、詳しい情報はない?
__sse2_available – ReWolf's blog
同じく悩んでる人が居た!
int _get_sse2_info(); void initialize_findacx (){ FARPROC i,x; DWORD dw; if((GetVersion()&0xff)==4&&(GetVersion()&0xff00)==0) { // Win95 i=(FARPROC)&_get_sse2_info; VirtualProtect(i, sizeof(FARPROC), PAGE_EXECUTE_READWRITE , &dw); *(FARPROC*)i=(FARPROC)0x90c3c033;//xor eax,eax ret VirtualProtect(i, sizeof(FARPROC), dw, &dw); } |
こうしてみた
うまく行った!
Comments