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