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 / sh / include / asm / string_32.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.7 KB  |  132 lines

  1. #ifndef __ASM_SH_STRING_H
  2. #define __ASM_SH_STRING_H
  3.  
  4. #ifdef __KERNEL__
  5.  
  6. /*
  7.  * Copyright (C) 1999 Niibe Yutaka
  8.  * But consider these trivial functions to be public domain.
  9.  */
  10.  
  11. #define __HAVE_ARCH_STRCPY
  12. static inline char *strcpy(char *__dest, const char *__src)
  13. {
  14.     register char *__xdest = __dest;
  15.     unsigned long __dummy;
  16.  
  17.     __asm__ __volatile__("1:\n\t"
  18.                  "mov.b    @%1+, %2\n\t"
  19.                  "mov.b    %2, @%0\n\t"
  20.                  "cmp/eq    #0, %2\n\t"
  21.                  "bf/s    1b\n\t"
  22.                  " add    #1, %0\n\t"
  23.                  : "=r" (__dest), "=r" (__src), "=&z" (__dummy)
  24.                  : "0" (__dest), "1" (__src)
  25.                  : "memory", "t");
  26.  
  27.     return __xdest;
  28. }
  29.  
  30. #define __HAVE_ARCH_STRNCPY
  31. static inline char *strncpy(char *__dest, const char *__src, size_t __n)
  32. {
  33.     register char *__xdest = __dest;
  34.     unsigned long __dummy;
  35.  
  36.     if (__n == 0)
  37.         return __xdest;
  38.  
  39.     __asm__ __volatile__(
  40.         "1:\n"
  41.         "mov.b    @%1+, %2\n\t"
  42.         "mov.b    %2, @%0\n\t"
  43.         "cmp/eq    #0, %2\n\t"
  44.         "bt/s    2f\n\t"
  45.         " cmp/eq    %5,%1\n\t"
  46.         "bf/s    1b\n\t"
  47.         " add    #1, %0\n"
  48.         "2:"
  49.         : "=r" (__dest), "=r" (__src), "=&z" (__dummy)
  50.         : "0" (__dest), "1" (__src), "r" (__src+__n)
  51.         : "memory", "t");
  52.  
  53.     return __xdest;
  54. }
  55.  
  56. #define __HAVE_ARCH_STRCMP
  57. static inline int strcmp(const char *__cs, const char *__ct)
  58. {
  59.     register int __res;
  60.     unsigned long __dummy;
  61.  
  62.     __asm__ __volatile__(
  63.         "mov.b    @%1+, %3\n"
  64.         "1:\n\t"
  65.         "mov.b    @%0+, %2\n\t"
  66.         "cmp/eq #0, %3\n\t"
  67.         "bt    2f\n\t"
  68.         "cmp/eq %2, %3\n\t"
  69.         "bt/s    1b\n\t"
  70.         " mov.b    @%1+, %3\n\t"
  71.         "add    #-2, %1\n\t"
  72.         "mov.b    @%1, %3\n\t"
  73.         "sub    %3, %2\n"
  74.         "2:"
  75.         : "=r" (__cs), "=r" (__ct), "=&r" (__res), "=&z" (__dummy)
  76.         : "0" (__cs), "1" (__ct)
  77.         : "t");
  78.  
  79.     return __res;
  80. }
  81.  
  82. #define __HAVE_ARCH_STRNCMP
  83. static inline int strncmp(const char *__cs, const char *__ct, size_t __n)
  84. {
  85.     register int __res;
  86.     unsigned long __dummy;
  87.  
  88.     if (__n == 0)
  89.         return 0;
  90.  
  91.     __asm__ __volatile__(
  92.         "mov.b    @%1+, %3\n"
  93.         "1:\n\t"
  94.         "mov.b    @%0+, %2\n\t"
  95.         "cmp/eq %6, %0\n\t"
  96.         "bt/s    2f\n\t"
  97.         " cmp/eq #0, %3\n\t"
  98.         "bt/s    3f\n\t"
  99.         " cmp/eq %3, %2\n\t"
  100.         "bt/s    1b\n\t"
  101.         " mov.b    @%1+, %3\n\t"
  102.         "add    #-2, %1\n\t"
  103.         "mov.b    @%1, %3\n"
  104.         "2:\n\t"
  105.         "sub    %3, %2\n"
  106.         "3:"
  107.         :"=r" (__cs), "=r" (__ct), "=&r" (__res), "=&z" (__dummy)
  108.         : "0" (__cs), "1" (__ct), "r" (__cs+__n)
  109.         : "t");
  110.  
  111.     return __res;
  112. }
  113.  
  114. #define __HAVE_ARCH_MEMSET
  115. extern void *memset(void *__s, int __c, size_t __count);
  116.  
  117. #define __HAVE_ARCH_MEMCPY
  118. extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
  119.  
  120. #define __HAVE_ARCH_MEMMOVE
  121. extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
  122.  
  123. #define __HAVE_ARCH_MEMCHR
  124. extern void *memchr(const void *__s, int __c, size_t __n);
  125.  
  126. #define __HAVE_ARCH_STRLEN
  127. extern size_t strlen(const char *);
  128.  
  129. #endif /* __KERNEL__ */
  130.  
  131. #endif /* __ASM_SH_STRING_H */
  132.