implement cu_memtest in x86-64 assembly in more efficient way that C does

This commit is contained in:
mykola2312 2022-05-11 19:18:45 +03:00
parent 0b610097b4
commit f2a1dddbca
3 changed files with 32 additions and 3 deletions

View file

@ -1,6 +1,7 @@
.globl hw_bswap16
.globl hw_bswap32
.globl hw_bswap64
.globl cu_memtest
.text
@ -19,3 +20,31 @@ hw_bswap64:
bswap %rax
ret
cu_memtest:
// RDI - ptr, RSI - size
xchg %rsi, %rdi
mov %rdi, %rcx
shr $3, %rcx
je .testok
.testq:
lodsq
test %rax, %rax
jnz .testfail
loop .testq
mov %rdi, %rcx
and $7, %rcx
je .testok
.testb:
lodsb
test %al, %al
jnz .testfail
loop .testb
.testok:
xor %rax, %rax
ret
.testfail:
mov %rsi, %rax
ret

View file

@ -25,7 +25,7 @@ void cutil_exit()
{
}
const void* cu_memtest(const void* mem, uint size)
/*const void* cu_memtest(const void* mem, uint size)
{
unsigned i;
for (i = 0; i < size / sizeof(uword); i++)
@ -41,4 +41,4 @@ const void* cu_memtest(const void* mem, uint size)
}
return NULL;
}
}*/

View file

@ -21,6 +21,6 @@ extern void* (*cu_memmove)(void*,const void*,size_t);
void cutil_init();
void cutil_exit();
const void* cu_memtest(const void* mem, uint size);
extern const void* cu_memtest(const void* mem, uint size);
#endif