home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-xtensa / string.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.7 KB  |  125 lines

  1. /*
  2.  * include/asm-xtensa/string.h
  3.  *
  4.  * These trivial string functions are considered part of the public domain.
  5.  *
  6.  * This file is subject to the terms and conditions of the GNU General Public
  7.  * License.  See the file "COPYING" in the main directory of this archive
  8.  * for more details.
  9.  *
  10.  * Copyright (C) 2001 - 2005 Tensilica Inc.
  11.  */
  12.  
  13. /* We should optimize these. See arch/xtensa/lib/strncpy_user.S */
  14.  
  15. #ifndef _XTENSA_STRING_H
  16. #define _XTENSA_STRING_H
  17.  
  18. #define __HAVE_ARCH_STRCPY
  19. static inline char *strcpy(char *__dest, const char *__src)
  20. {
  21.     register char *__xdest = __dest;
  22.     unsigned long __dummy;
  23.  
  24.     __asm__ __volatile__("1:\n\t"
  25.         "l8ui    %2, %1, 0\n\t"
  26.         "s8i    %2, %0, 0\n\t"
  27.         "addi    %1, %1, 1\n\t"
  28.         "addi    %0, %0, 1\n\t"
  29.         "bnez    %2, 1b\n\t"
  30.         : "=r" (__dest), "=r" (__src), "=&r" (__dummy)
  31.         : "0" (__dest), "1" (__src)
  32.         : "memory");
  33.  
  34.     return __xdest;
  35. }
  36.  
  37. #define __HAVE_ARCH_STRNCPY
  38. static inline char *strncpy(char *__dest, const char *__src, size_t __n)
  39. {
  40.     register char *__xdest = __dest;
  41.     unsigned long __dummy;
  42.  
  43.     if (__n == 0)
  44.         return __xdest;
  45.  
  46.     __asm__ __volatile__(
  47.         "1:\n\t"
  48.         "l8ui    %2, %1, 0\n\t"
  49.         "s8i    %2, %0, 0\n\t"
  50.         "addi    %1, %1, 1\n\t"
  51.         "addi    %0, %0, 1\n\t"
  52.         "beqz    %2, 2f\n\t"
  53.         "bne    %1, %5, 1b\n"
  54.         "2:"
  55.         : "=r" (__dest), "=r" (__src), "=&r" (__dummy)
  56.         : "0" (__dest), "1" (__src), "r" (__src+__n)
  57.         : "memory");
  58.  
  59.     return __xdest;
  60. }
  61.  
  62. #define __HAVE_ARCH_STRCMP
  63. static inline int strcmp(const char *__cs, const char *__ct)
  64. {
  65.     register int __res;
  66.     unsigned long __dummy;
  67.  
  68.     __asm__ __volatile__(
  69.         "1:\n\t"
  70.         "l8ui    %3, %1, 0\n\t"
  71.         "addi    %1, %1, 1\n\t"
  72.         "l8ui    %2, %0, 0\n\t"
  73.         "addi    %0, %0, 1\n\t"
  74.         "beqz    %2, 2f\n\t"
  75.         "beq    %2, %3, 1b\n"
  76.         "2:\n\t"
  77.         "sub    %2, %3, %2"
  78.         : "=r" (__cs), "=r" (__ct), "=&r" (__res), "=&r" (__dummy)
  79.         : "0" (__cs), "1" (__ct));
  80.  
  81.     return __res;
  82. }
  83.  
  84. #define __HAVE_ARCH_STRNCMP
  85. static inline int strncmp(const char *__cs, const char *__ct, size_t __n)
  86. {
  87.     register int __res;
  88.     unsigned long __dummy;
  89.  
  90.     __asm__ __volatile__(
  91.         "mov    %2, %3\n"
  92.         "1:\n\t"
  93.         "beq    %0, %6, 2f\n\t"
  94.         "l8ui    %3, %1, 0\n\t"
  95.         "addi    %1, %1, 1\n\t"
  96.         "l8ui    %2, %0, 0\n\t"
  97.         "addi    %0, %0, 1\n\t"
  98.         "beqz    %2, 2f\n\t"
  99.         "beqz    %3, 2f\n\t"
  100.         "beq    %2, %3, 1b\n"
  101.         "2:\n\t"
  102.         "sub    %2, %3, %2"
  103.         : "=r" (__cs), "=r" (__ct), "=&r" (__res), "=&r" (__dummy)
  104.         : "0" (__cs), "1" (__ct), "r" (__cs+__n));
  105.  
  106.     return __res;
  107. }
  108.  
  109. #define __HAVE_ARCH_MEMSET
  110. extern void *memset(void *__s, int __c, size_t __count);
  111.  
  112. #define __HAVE_ARCH_MEMCPY
  113. extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
  114.  
  115. #define __HAVE_ARCH_MEMMOVE
  116. extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
  117.  
  118. /* Don't build bcopy at all ...  */
  119. #define __HAVE_ARCH_BCOPY
  120.  
  121. #define __HAVE_ARCH_MEMSCAN
  122. #define memscan memchr
  123.  
  124. #endif    /* _XTENSA_STRING_H */
  125.