X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fi386%2Flib%2Fmemcpy.c;h=ad16efa52e84b84cda90899bae36696c06801176;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=4cb37b6e501530212bfd2e575f951ed44dce66ae;hpb=db216c3d5e4c040e557a50f8f5d35d5c415e8c1c;p=linux-2.6.git diff --git a/arch/i386/lib/memcpy.c b/arch/i386/lib/memcpy.c index 4cb37b6e5..ad16efa52 100644 --- a/arch/i386/lib/memcpy.c +++ b/arch/i386/lib/memcpy.c @@ -1,10 +1,11 @@ #include #include +#include #undef memcpy #undef memset -void * memcpy(void * to, const void * from, size_t n) +void *memcpy(void *to, const void *from, size_t n) { #ifdef CONFIG_X86_USE_3DNOW return __memcpy3d(to, from, n); @@ -12,8 +13,32 @@ void * memcpy(void * to, const void * from, size_t n) return __memcpy(to, from, n); #endif } +EXPORT_SYMBOL_NOVERS(memcpy); -void * memset(void * s, int c, size_t count) +void *memset(void *s, int c, size_t count) { return __memset(s, c, count); } +EXPORT_SYMBOL_NOVERS(memset); + +void *memmove(void *dest, const void *src, size_t n) +{ + int d0, d1, d2; + + if (dest < src) { + memcpy(dest,src,n); + } else { + __asm__ __volatile__( + "std\n\t" + "rep\n\t" + "movsb\n\t" + "cld" + : "=&c" (d0), "=&S" (d1), "=&D" (d2) + :"0" (n), + "1" (n-1+(const char *)src), + "2" (n-1+(char *)dest) + :"memory"); + } + return dest; +} +EXPORT_SYMBOL_NOVERS(memmove);