implement _cu_memcmp and cu_memcmp function-holder

This commit is contained in:
mykola2312 2022-05-17 02:32:37 +03:00
parent a07e2d6f01
commit 371c4bb518
3 changed files with 30 additions and 0 deletions

View file

@ -3,6 +3,7 @@
.globl hw_bswap64
.globl _cu_memcpy
.globl _cu_memmove
.globl _cu_memcmp
.globl _cu_memset
.globl cu_memzero
.globl cu_memtest
@ -60,6 +61,30 @@ _cu_memmove:
.retmove:
ret
_cu_memcmp:
mov %rdx, %rcx
shr $3, %rcx
jz .test1
.cmp8:
cmpsq
jnz .not_equal
loop .cmp8
.test1:
mov %rdx, %rcx
and $7, %rcx
.cmp1:
cmpsb
jnz .not_equal
loop .cmp1
jmp .equal
.not_equal:
xor %rax, %rax
inc %rax
ret
.equal:
xor %rax, %rax
ret
_cu_memset:
// RDI - ptr, RSI - val, RDX - size
mov %rdx, %rax

View file

@ -8,6 +8,7 @@ void (*cu_free)(void*) = NULL;
void* (*cu_memset)(void*,int,size_t) = _cu_memset;
void* (*cu_memcpy)(void*,const void*,size_t) = _cu_memcpy;
void* (*cu_memmove)(void*,const void*,size_t) = _cu_memmove;
void* (*cu_memcmp)(const void*,const void*, size_t) = _cu_memcmp;
#else
# include <stdlib.h>
# include <string.h>
@ -18,6 +19,7 @@ void (*cu_free)(void*) = free;
void* (*cu_memset)(void*,int,size_t) = memset;
void* (*cu_memcpy)(void*,const void*,size_t) = memcpy;
void* (*cu_memmove)(void*,const void*,size_t) = memmove;
void* (*cu_memcmp)(const void*,const void*, size_t) = memcmp;
#endif
void cutil_init()

View file

@ -7,6 +7,8 @@
extern void* _cu_memset(void* dst, int val, size_t size);
extern void* _cu_memcpy(void* dst, const void* src, size_t size);
extern void* _cu_memmove(void* dst, const void* src, size_t size);
extern void* _cu_memcmp(const void* dst, const void* src, size_t size);
void __cu_memmove(void* dst, void* src, size_t size);
extern void* (*cu_malloc)(size_t);
@ -15,6 +17,7 @@ extern void (*cu_free)(void*);
extern void* (*cu_memset)(void*,int,size_t);
extern void* (*cu_memcpy)(void*,const void*,size_t);
extern void* (*cu_memmove)(void*,const void*,size_t);
extern void* (*cu_memcmp)(const void*,const void*, size_t);
void cutil_init();
void cutil_exit();