はじめてのMMX

MMXどころかアセンブラも使ったことないんだけどな。
まあ、挑戦することは良いことだということで。いや、時期によっては単なる現実逃避だけど。

void MemoryCopy( void* pDest, const void* pSrc, unsigned int nSize )
{
	_asm{
		mov eax, pDest
		mov ebx, pSrc

		mov ecx, nSize
		shr ecx,3
		or ecx,ecx
		jz DOWN
LOOP1:
		movq mm0, [ebx]
		movq [eax], mm0
		add ebx,8
		add eax,8
		dec ecx
		jnz LOOP1
DOWN:
		mov ecx, nSize
		and ecx,7h
		or ecx,ecx
		jz END
LOOP2:
		mov dl,[ebx]
		mov [eax],dl
		add ebx,1
		add eax,1
		dec ecx
		jnz LOOP2
END:
		emms
	}
}

手探りでやっと出来ました。殆ど普通のインラインアセンブラですがびみょんにMMX使ってますよ。単純なメモリコピーですけどこれだけ作るのに何時間かかったんだろう・・・。しかもベンチ試してみたらmemcpyと変わらないでやんの。

まあ、経験値がたまったからよしとしておきます。