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