linux/arch/x86/lib/memcpy_32.c
<<
>>
Prefs
   1#include <linux/string.h>
   2#include <linux/module.h>
   3
   4#undef memcpy
   5#undef memset
   6
   7void *memcpy(void *to, const void *from, size_t n)
   8{
   9#ifdef CONFIG_X86_USE_3DNOW
  10        return __memcpy3d(to, from, n);
  11#else
  12        return __memcpy(to, from, n);
  13#endif
  14}
  15EXPORT_SYMBOL(memcpy);
  16
  17void *memset(void *s, int c, size_t count)
  18{
  19        return __memset(s, c, count);
  20}
  21EXPORT_SYMBOL(memset);
  22
  23void *memmove(void *dest, const void *src, size_t n)
  24{
  25        int d0, d1, d2;
  26
  27        if (dest < src) {
  28                memcpy(dest, src, n);
  29        } else {
  30                __asm__ __volatile__(
  31                        "std\n\t"
  32                        "rep\n\t"
  33                        "movsb\n\t"
  34                        "cld"
  35                        : "=&c" (d0), "=&S" (d1), "=&D" (d2)
  36                        :"0" (n),
  37                         "1" (n-1+src),
  38                         "2" (n-1+dest)
  39                        :"memory");
  40        }
  41        return dest;
  42}
  43EXPORT_SYMBOL(memmove);
  44