home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / x86 / include / asm / string_64.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.6 KB  |  61 lines

  1. #ifndef _ASM_X86_STRING_64_H
  2. #define _ASM_X86_STRING_64_H
  3.  
  4. #ifdef __KERNEL__
  5.  
  6. /* Written 2002 by Andi Kleen */
  7.  
  8. /* Only used for special circumstances. Stolen from i386/string.h */
  9. static __always_inline void *__inline_memcpy(void *to, const void *from, size_t n)
  10. {
  11.     unsigned long d0, d1, d2;
  12.     asm volatile("rep ; movsl\n\t"
  13.              "testb $2,%b4\n\t"
  14.              "je 1f\n\t"
  15.              "movsw\n"
  16.              "1:\ttestb $1,%b4\n\t"
  17.              "je 2f\n\t"
  18.              "movsb\n"
  19.              "2:"
  20.              : "=&c" (d0), "=&D" (d1), "=&S" (d2)
  21.              : "0" (n / 4), "q" (n), "1" ((long)to), "2" ((long)from)
  22.              : "memory");
  23.     return to;
  24. }
  25.  
  26. /* Even with __builtin_ the compiler may decide to use the out of line
  27.    function. */
  28.  
  29. #define __HAVE_ARCH_MEMCPY 1
  30. #if (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __GNUC__ > 4
  31. extern void *memcpy(void *to, const void *from, size_t len);
  32. #else
  33. extern void *__memcpy(void *to, const void *from, size_t len);
  34. #define memcpy(dst, src, len)                    \
  35. ({                                \
  36.     size_t __len = (len);                    \
  37.     void *__ret;                        \
  38.     if (__builtin_constant_p(len) && __len >= 64)        \
  39.         __ret = __memcpy((dst), (src), __len);        \
  40.     else                            \
  41.         __ret = __builtin_memcpy((dst), (src), __len);    \
  42.     __ret;                            \
  43. })
  44. #endif
  45.  
  46. #define __HAVE_ARCH_MEMSET
  47. void *memset(void *s, int c, size_t n);
  48.  
  49. #define __HAVE_ARCH_MEMMOVE
  50. void *memmove(void *dest, const void *src, size_t count);
  51.  
  52. int memcmp(const void *cs, const void *ct, size_t count);
  53. size_t strlen(const char *s);
  54. char *strcpy(char *dest, const char *src);
  55. char *strcat(char *dest, const char *src);
  56. int strcmp(const char *cs, const char *ct);
  57.  
  58. #endif /* __KERNEL__ */
  59.  
  60. #endif /* _ASM_X86_STRING_64_H */
  61.