MMX SSE 3D NOW!のプログラミング

このエントリーをはてなブックマークに追加
138デフォルトの名無しさん
>135 殿
 アドバイスありがとうございます。
 実験してみましたところ、おおよそ速度が4倍にアップしました。
 こりゃすげえ! と思ったのですが、上長には却下されました。
『だれもわからねぇYo!』だそうで。
 さすがにMMX2まで扱おうとすると、VC6ではやりづらいですね。
上長の上の人に結果まとめてレポしてみて、環境更新するよう具申してみることにします。

 ちなみに、こちらの環境で一番速かったのは、>101殿のアドバイス
を受けたもの(>119報告のもの)の改造版でした。

void test4( void *dst, const void *src, int size )
{ int size2 = size >> 2;
  if(size2 != 0){ __asm{
     mov      edi,  dst;
     mov      esi,  src;
     mov      ecx,  size2;
   loop_mp:
     movd     mm0,  [esi];
     punpcklbw  mm0,  mm0;
     movq     mm1,  mm0;
     punpcklbw  mm0,  mm0;
     punpckhbw  mm1,  mm1;
     _asm _emit 0x0f _asm _emit 0xe7 _asm _emit 0x07;
     _asm _emit 0x0f _asm _emit 0xe7 _asm _emit 0x4f _asm _emit 0x08;
     add      esi,  4;
     add      edi,  16;
     sub      ecx,  1;
     jnz       loop_mp;
     emms;
 }}
}