implement _cu_memcmp and cu_memcmp function-holder
This commit is contained in:
parent
a07e2d6f01
commit
371c4bb518
3 changed files with 30 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
2
cutil.c
2
cutil.c
|
|
@ -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()
|
||||
|
|
|
|||
3
cutil.h
3
cutil.h
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue