string.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *  include/asm-s390/string.h
  3.  *
  4.  *  S390 version
  5.  *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  6.  *    Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
  7.  */
  8. #ifndef _S390_STRING_H_
  9. #define _S390_STRING_H_
  10. #ifdef __KERNEL__
  11. #ifndef _LINUX_TYPES_H
  12. #include <linux/types.h>
  13. #endif
  14. #define __HAVE_ARCH_MEMCHR
  15. #define __HAVE_ARCH_MEMCPY
  16. #define __HAVE_ARCH_MEMSET
  17. #define __HAVE_ARCH_STRCAT
  18. #define __HAVE_ARCH_STRCMP
  19. #define __HAVE_ARCH_STRCPY
  20. #define __HAVE_ARCH_STRLEN
  21. #define __HAVE_ARCH_STRNCPY
  22. #undef __HAVE_ARCH_MEMMOVE
  23. #undef __HAVE_ARCH_STRNICMP
  24. #undef __HAVE_ARCH_STRNCAT
  25. #undef __HAVE_ARCH_STRNCMP
  26. #undef __HAVE_ARCH_STRCHR
  27. #undef __HAVE_ARCH_STRRCHR
  28. #undef __HAVE_ARCH_STRNLEN
  29. #undef __HAVE_ARCH_STRSPN
  30. #undef __HAVE_ARCH_STRPBRK
  31. #undef __HAVE_ARCH_STRTOK
  32. #undef __HAVE_ARCH_BCOPY
  33. #undef __HAVE_ARCH_MEMCMP
  34. #undef __HAVE_ARCH_MEMSCAN
  35. #undef __HAVE_ARCH_STRSTR
  36. extern void *memset(void *, int, size_t);
  37. extern void *memcpy(void *, const void *, size_t);
  38. extern void *memmove(void *, const void *, size_t);
  39. extern char *strncpy(char *, const char *, size_t);
  40. extern int strcmp(const char *,const char *);
  41. static inline void * memchr(const void * cs,int c,size_t count)
  42. {
  43.     void *ptr;
  44.     __asm__ __volatile__ ("   lr    0,%2n"
  45.                           "   lr    1,%1n"
  46.                           "   la    %0,0(%3,%1)n"
  47.                           "0: srst  %0,1n"
  48.                           "   jo    0bn"
  49.                           "   brc   13,1fn"
  50.                           "   slr   %0,%0n"
  51.                           "1:"
  52.                           : "=&a" (ptr) : "a" (cs), "d" (c), "d" (count)
  53.                           : "cc", "0", "1" );
  54.     return ptr;
  55. }
  56. static __inline__ char *strcpy(char *dest, const char *src)
  57. {
  58.     char *tmp = dest;
  59.     __asm__ __volatile__ ("   sr    0,0n"
  60.                           "0: mvst  %0,%1n"
  61.                           "   jo    0b"
  62.                           : "+&a" (dest), "+&a" (src) :
  63.                           : "cc", "memory", "0" );
  64.     return tmp;
  65. }
  66. static __inline__ size_t strlen(const char *s)
  67. {
  68.     size_t len;
  69.     __asm__ __volatile__ ("   sr    0,0n"
  70.                           "   lr    %0,%1n"
  71.                           "0: srst  0,%0n"
  72.                           "   jo    0bn"
  73.                           "   lr    %0,0n"
  74.                           "   sr    %0,%1"
  75.                           : "=&a" (len) : "a" (s) 
  76.                           : "cc", "0" );
  77.     return len;
  78. }
  79. static __inline__ char *strcat(char *dest, const char *src)
  80. {
  81.     char *tmp = dest;
  82.     __asm__ __volatile__ ("   sr    0,0n"
  83.                           "0: srst  0,%0n"
  84.                           "   jo    0bn"
  85.                           "   lr    %0,0n"
  86.                           "   sr    0,0n"
  87.                           "1: mvst  %0,%1n"
  88.                           "   jo    1b"
  89.                           : "+&a" (dest), "+&a" (src) :
  90.                           : "cc", "memory", "0" );
  91.     return tmp;
  92. }
  93. extern void *alloca(size_t);
  94. #endif /* __KERNEL__ */
  95. #endif /* __S390_STRING_H_ */