さり気にちとバグっぽいモノを見つける

前にhttp://d.hatena.ne.jp/studiokingyo/20050124にて、
memcpyをhttp://www.cyborg.ne.jp/~xelf/developer/MemoryCopy.htmlを参考にして組んでいると書いたが、
mem3()がバグっている事に気づいた。


void mem3( LPBYTE d, const BYTE* s, int _size ) {
_asm {
mov edi,d;
mov esi,s;
mov ecx,_size;
shr ecx,3;
lx:
mov eax,[esi];
mov eax,[esi+4];
add esi,8;
mov [edi],eax;
mov [edi+4],eax;
add edi,8;
dec ecx;
jnz lx;
}
}

void *mem3( void * d, const void* s, size_t _size ) {
if(0==_size) return d;
_asm {
mov edi,d;
mov esi,s;
mov ecx,_size;
shr ecx,3;
lx:
mov eax,[esi];
mov ebx,[esi+4];
add esi,8;
mov [edi],eax;
mov [edi+4],ebx;
add edi,8;
dec ecx;
jnz lx;
}
return d;
}
のような気がするが・・・
多分、速度計測を目的としているからそう言う細かいところは気をきかせなくて良いと言う判断なのだと思う。FPU使うmemfpu()もmemcpy()と同じように使うにはちょっとメモリアライン系の問題がありそうな気も・・・
で、これを丸々移植していたので私の頭がしばらくビジー状態になってしまった。○| ̄|_