VC++2005/VC++2008 SSEを無効にしててもSSE2の最適化を行ってしまうことが判明

SSE未使用にしてるバイナリで SSE2命令が使われてしまう
実際に最小限のプログラムでどうなるか追跡してみました。

sse
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);
  }

こうしてみた

sse2
うまく行った!

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です