memcpy_32.c 717 B

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