はじめての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と変わらないでやんの。
まあ、経験値がたまったからよしとしておきます。