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 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
|
||||||
|
|
|
||||||
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_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()
|
||||||
|
|
|
||||||
3
cutil.h
3
cutil.h
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue