From 8ab02c496c09a2a37f9794bc7c87a916ac41464e Mon Sep 17 00:00:00 2001 From: fslongjin Date: Sat, 29 Jan 2022 15:11:33 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20=E6=96=B0=E5=A2=9E=E5=86=85=E5=AD=98?= =?UTF-8?q?=E6=8B=B7=E8=B4=9D=E5=87=BD=E6=95=B0memcpy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/common/glib.h | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/kernel/common/glib.h b/kernel/common/glib.h index dcfb5bcb..51d7e0b2 100644 --- a/kernel/common/glib.h +++ b/kernel/common/glib.h @@ -134,6 +134,37 @@ void *memset(void *dst, unsigned char C, ul Count) : "memory"); return dst; } + +/** + * @brief 内存拷贝函数 + * + * @param dst 目标数组 + * @param src 源数组 + * @param Num 字节数 + * @return void* + */ +void * memcpy(void *dst,void * src,long Num) +{ + int d0,d1,d2; + __asm__ __volatile__ ( "cld \n\t" + "rep \n\t" + "movsq \n\t" + "testb $4,%b4 \n\t" + "je 1f \n\t" + "movsl \n\t" + "1:\ttestb $2,%b4 \n\t" + "je 2f \n\t" + "movsw \n\t" + "2:\ttestb $1,%b4 \n\t" + "je 3f \n\t" + "movsb \n\t" + "3: \n\t" + :"=&c"(d0),"=&D"(d1),"=&S"(d2) + :"0"(Num/8),"q"(Num),"1"(src),"2"(dst) + :"memory" + ); + return dst; +} void *memset_c(void *dst, unsigned char c, ul n) { unsigned char *s = (unsigned char *)dst; @@ -184,4 +215,5 @@ void io_out32(unsigned short port,unsigned int value) : :"a"(value),"d"(port) :"memory"); -} \ No newline at end of file +} +