fix _cu_memmove in assembly, now it's byte-by-byte moving
This commit is contained in:
parent
4dc9fe3a55
commit
9eafc640fd
2 changed files with 4 additions and 23 deletions
|
|
@ -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
5
test.c
|
|
@ -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]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue