X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fi386%2Flib%2Fmemcpy.c;h=8ac51b82a632ca61a4e112a66301816cb0daf2d5;hb=16c70f8c1b54b61c3b951b6fb220df250fe09b32;hp=4cb37b6e501530212bfd2e575f951ed44dce66ae;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/arch/i386/lib/memcpy.c b/arch/i386/lib/memcpy.c index 4cb37b6e5..8ac51b82a 100644 --- a/arch/i386/lib/memcpy.c +++ b/arch/i386/lib/memcpy.c @@ -1,10 +1,10 @@ -#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 +12,32 @@ void * memcpy(void * to, const void * from, size_t n) return __memcpy(to, from, n); #endif } +EXPORT_SYMBOL(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(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(memmove);