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 hw_bswap64
.globl _cu_memcpy .globl _cu_memcpy
.globl _cu_memmove .globl _cu_memmove
.globl _cu_memcmp
.globl _cu_memset .globl _cu_memset
.globl cu_memzero .globl cu_memzero
.globl cu_memtest .globl cu_memtest
@ -60,6 +61,30 @@ _cu_memmove:
.retmove: .retmove:
ret 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: _cu_memset:
// RDI - ptr, RSI - val, RDX - size // RDI - ptr, RSI - val, RDX - size
mov %rdx, %rax 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_memset)(void*,int,size_t) = _cu_memset;
void* (*cu_memcpy)(void*,const void*,size_t) = _cu_memcpy; void* (*cu_memcpy)(void*,const void*,size_t) = _cu_memcpy;
void* (*cu_memmove)(void*,const void*,size_t) = _cu_memmove; void* (*cu_memmove)(void*,const void*,size_t) = _cu_memmove;
void* (*cu_memcmp)(const void*,const void*, size_t) = _cu_memcmp;
#else #else
# include <stdlib.h> # include <stdlib.h>
# include <string.h> # include <string.h>
@ -18,6 +19,7 @@ void (*cu_free)(void*) = free;
void* (*cu_memset)(void*,int,size_t) = memset; void* (*cu_memset)(void*,int,size_t) = memset;
void* (*cu_memcpy)(void*,const void*,size_t) = memcpy; void* (*cu_memcpy)(void*,const void*,size_t) = memcpy;
void* (*cu_memmove)(void*,const void*,size_t) = memmove; void* (*cu_memmove)(void*,const void*,size_t) = memmove;
void* (*cu_memcmp)(const void*,const void*, size_t) = memcmp;
#endif #endif
void cutil_init() void cutil_init()

View file

@ -7,6 +7,8 @@
extern void* _cu_memset(void* dst, int val, size_t size); 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_memcpy(void* dst, const void* src, size_t size);
extern void* _cu_memmove(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); void __cu_memmove(void* dst, void* src, size_t size);
extern void* (*cu_malloc)(size_t); 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_memset)(void*,int,size_t);
extern void* (*cu_memcpy)(void*,const void*,size_t); extern void* (*cu_memcpy)(void*,const void*,size_t);
extern void* (*cu_memmove)(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_init();
void cutil_exit(); void cutil_exit();