fix _cu_memmove in assembly, now it's byte-by-byte moving

This commit is contained in:
mykola2312 2022-05-15 22:23:48 +03:00
parent 4dc9fe3a55
commit 9eafc640fd
2 changed files with 4 additions and 23 deletions

View file

@ -46,36 +46,14 @@ _cu_memmove:
add %rdx, %rdi
add %rdx, %rsi
std
mov %rdx, %rcx
shr $3, %rcx
je .greater1_
sub $8, %rdi
sub $8, %rsi
rep movsq
.greater1:
add $8, %rdi
add $8, %rsi
mov %rdx, %rcx
and $7, %rcx
rep movsb
cld
jmp .retmove
.greater1_:
dec %rdi
dec %rsi
mov %rdx, %rcx
and $7, %rcx
rep movsb
cld
jmp .retmove
.lessmove: // dst < src
mov %rdx, %rcx
shr $3, %rcx
je .less1
rep movsq
.less1:
mov %rdx, %rcx
and $7, %rcx
rep movsb
.retmove:
ret

5
test.c
View file

@ -121,7 +121,10 @@ int main()
printf("\t%u\n", val4[i]);
printf("\n");
_cu_memmove(&val4[1], &val4[0], sizeof(uint) * 3);
void* dst = &val4[1];
void* src = &val4[0];
printf("memmove delta\t%lx\n", (uintptr_t)dst - (uintptr_t)src);
_cu_memmove(dst, src, sizeof(uint) * 3);
printf("val4 memmove ->\n");
for (unsigned i = 0; i < 5; i++)
printf("\t%u\n", val4[i]);