From 9ad20399e91f2c03334563dd9b13d41ff1907b4b Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Wed, 28 Aug 2002 07:03:10 +0000 Subject: [PATCH] Added memcpy/memset with inline assembler implementation for target i386. svn path=/trunk/; revision=3418 --- reactos/ntoskrnl/Makefile | 5 ++++- reactos/ntoskrnl/Makefile.i386 | 10 ++++++++- reactos/ntoskrnl/rtl/i386/memcpy.c | 34 ++++++++++++++++++++++++++++++ reactos/ntoskrnl/rtl/i386/memset.c | 31 +++++++++++++++++++++++++++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 reactos/ntoskrnl/rtl/i386/memcpy.c create mode 100644 reactos/ntoskrnl/rtl/i386/memset.c diff --git a/reactos/ntoskrnl/Makefile b/reactos/ntoskrnl/Makefile index b25b7781a2e..6ba14142f0f 100644 --- a/reactos/ntoskrnl/Makefile +++ b/reactos/ntoskrnl/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.79 2002/08/10 16:41:17 dwelch Exp $ +# $Id: Makefile,v 1.80 2002/08/28 07:03:09 hbirr Exp $ # # ReactOS Operating System # @@ -111,6 +111,9 @@ OBJECTS_RTL = \ rtl/memcmp.o \ rtl/capture.o +OBJECTS_RTL := $(filter-out $(RTL_EXCLUDE_FILTER), $(OBJECTS_RTL)) + + # Kernel (Ke) OBJECTS_KE = \ ke/apc.o \ diff --git a/reactos/ntoskrnl/Makefile.i386 b/reactos/ntoskrnl/Makefile.i386 index cc65ecebfb7..834f2934f32 100644 --- a/reactos/ntoskrnl/Makefile.i386 +++ b/reactos/ntoskrnl/Makefile.i386 @@ -39,4 +39,12 @@ OBJECTS_MM_I386 := \ mm/i386/page.o \ mm/i386/pfault.o -OBJECTS_ARCH = $(OBJECTS_BOOT) $(OBJECTS_EX_I386) $(OBJECTS_KE_I386) $(OBJECTS_MM_I386) +OBJECTS_RTL_I386 := \ + rtl/i386/memset.o \ + rtl/i386/memcpy.o + +RTL_EXCLUDE_FILTER := \ + rtl/memset.o \ + rtl/memcpy.o + +OBJECTS_ARCH = $(OBJECTS_BOOT) $(OBJECTS_EX_I386) $(OBJECTS_KE_I386) $(OBJECTS_MM_I386) $(OBJECTS_RTL_I386) diff --git a/reactos/ntoskrnl/rtl/i386/memcpy.c b/reactos/ntoskrnl/rtl/i386/memcpy.c new file mode 100644 index 00000000000..25be55e188e --- /dev/null +++ b/reactos/ntoskrnl/rtl/i386/memcpy.c @@ -0,0 +1,34 @@ +/* $Id: memcpy.c,v 1.1 2002/08/28 07:03:10 hbirr Exp $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/rtl/i386/memcpy.c + * PROGRAMMER: Hartmut Birr + * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include +#include + +#define NDEBUG +#include + +/* FUNCTIONS *****************************************************************/ + +#undef memcpy +void *memcpy (void *to, const void *from, size_t count) +{ + __asm__( \ + "or %%ecx,%%ecx\n\t"\ + "jz .L1\n\t" \ + "cld\n\t" \ + "rep\n\t" \ + "movsb\n\t" \ + ".L1:\n\t" + : + : "D" (to), "S" (from), "c" (count)); + return to; +} + diff --git a/reactos/ntoskrnl/rtl/i386/memset.c b/reactos/ntoskrnl/rtl/i386/memset.c new file mode 100644 index 00000000000..1ee2a8ee1b2 --- /dev/null +++ b/reactos/ntoskrnl/rtl/i386/memset.c @@ -0,0 +1,31 @@ +/* $Id: memset.c,v 1.1 2002/08/28 07:03:10 hbirr Exp $ + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/rtl/i386/memcpy.c + * PROGRAMMER: Hartmut Birr + * UPDATE HISTORY: + */ + +/* INCLUDES *****************************************************************/ + +#include + +#define NDEBUG +#include + +/* FUNCTIONS *****************************************************************/ + +void * memset(void *src, int val, size_t count) +{ + __asm__( \ + "or %%ecx,%%ecx\n\t"\ + "jz .L1\n\t" \ + "cld\t\n" \ + "rep\t\n" \ + "stosb\t\n" \ + ".L1:\n\t" + : + : "D" (src), "c" (count), "a" (val)); + return src; +}