diff options
Diffstat (limited to 'include/asm-s390/string.h')
-rw-r--r-- | include/asm-s390/string.h | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/include/asm-s390/string.h b/include/asm-s390/string.h deleted file mode 100644 index d074673a6d9b..000000000000 --- a/include/asm-s390/string.h +++ /dev/null | |||
@@ -1,143 +0,0 @@ | |||
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 | |||
9 | #ifndef _S390_STRING_H_ | ||
10 | #define _S390_STRING_H_ | ||
11 | |||
12 | #ifdef __KERNEL__ | ||
13 | |||
14 | #ifndef _LINUX_TYPES_H | ||
15 | #include <linux/types.h> | ||
16 | #endif | ||
17 | |||
18 | #define __HAVE_ARCH_MEMCHR /* inline & arch function */ | ||
19 | #define __HAVE_ARCH_MEMCMP /* arch function */ | ||
20 | #define __HAVE_ARCH_MEMCPY /* gcc builtin & arch function */ | ||
21 | #define __HAVE_ARCH_MEMSCAN /* inline & arch function */ | ||
22 | #define __HAVE_ARCH_MEMSET /* gcc builtin & arch function */ | ||
23 | #define __HAVE_ARCH_STRCAT /* inline & arch function */ | ||
24 | #define __HAVE_ARCH_STRCMP /* arch function */ | ||
25 | #define __HAVE_ARCH_STRCPY /* inline & arch function */ | ||
26 | #define __HAVE_ARCH_STRLCAT /* arch function */ | ||
27 | #define __HAVE_ARCH_STRLCPY /* arch function */ | ||
28 | #define __HAVE_ARCH_STRLEN /* inline & arch function */ | ||
29 | #define __HAVE_ARCH_STRNCAT /* arch function */ | ||
30 | #define __HAVE_ARCH_STRNCPY /* arch function */ | ||
31 | #define __HAVE_ARCH_STRNLEN /* inline & arch function */ | ||
32 | #define __HAVE_ARCH_STRRCHR /* arch function */ | ||
33 | #define __HAVE_ARCH_STRSTR /* arch function */ | ||
34 | |||
35 | /* Prototypes for non-inlined arch strings functions. */ | ||
36 | extern int memcmp(const void *, const void *, size_t); | ||
37 | extern void *memcpy(void *, const void *, size_t); | ||
38 | extern void *memset(void *, int, size_t); | ||
39 | extern int strcmp(const char *,const char *); | ||
40 | extern size_t strlcat(char *, const char *, size_t); | ||
41 | extern size_t strlcpy(char *, const char *, size_t); | ||
42 | extern char *strncat(char *, const char *, size_t); | ||
43 | extern char *strncpy(char *, const char *, size_t); | ||
44 | extern char *strrchr(const char *, int); | ||
45 | extern char *strstr(const char *, const char *); | ||
46 | |||
47 | #undef __HAVE_ARCH_MEMMOVE | ||
48 | #undef __HAVE_ARCH_STRCHR | ||
49 | #undef __HAVE_ARCH_STRNCHR | ||
50 | #undef __HAVE_ARCH_STRNCMP | ||
51 | #undef __HAVE_ARCH_STRNICMP | ||
52 | #undef __HAVE_ARCH_STRPBRK | ||
53 | #undef __HAVE_ARCH_STRSEP | ||
54 | #undef __HAVE_ARCH_STRSPN | ||
55 | |||
56 | #if !defined(IN_ARCH_STRING_C) | ||
57 | |||
58 | static inline void *memchr(const void * s, int c, size_t n) | ||
59 | { | ||
60 | register int r0 asm("0") = (char) c; | ||
61 | const void *ret = s + n; | ||
62 | |||
63 | asm volatile( | ||
64 | "0: srst %0,%1\n" | ||
65 | " jo 0b\n" | ||
66 | " jl 1f\n" | ||
67 | " la %0,0\n" | ||
68 | "1:" | ||
69 | : "+a" (ret), "+&a" (s) : "d" (r0) : "cc"); | ||
70 | return (void *) ret; | ||
71 | } | ||
72 | |||
73 | static inline void *memscan(void *s, int c, size_t n) | ||
74 | { | ||
75 | register int r0 asm("0") = (char) c; | ||
76 | const void *ret = s + n; | ||
77 | |||
78 | asm volatile( | ||
79 | "0: srst %0,%1\n" | ||
80 | " jo 0b\n" | ||
81 | : "+a" (ret), "+&a" (s) : "d" (r0) : "cc"); | ||
82 | return (void *) ret; | ||
83 | } | ||
84 | |||
85 | static inline char *strcat(char *dst, const char *src) | ||
86 | { | ||
87 | register int r0 asm("0") = 0; | ||
88 | unsigned long dummy; | ||
89 | char *ret = dst; | ||
90 | |||
91 | asm volatile( | ||
92 | "0: srst %0,%1\n" | ||
93 | " jo 0b\n" | ||
94 | "1: mvst %0,%2\n" | ||
95 | " jo 1b" | ||
96 | : "=&a" (dummy), "+a" (dst), "+a" (src) | ||
97 | : "d" (r0), "0" (0) : "cc", "memory" ); | ||
98 | return ret; | ||
99 | } | ||
100 | |||
101 | static inline char *strcpy(char *dst, const char *src) | ||
102 | { | ||
103 | register int r0 asm("0") = 0; | ||
104 | char *ret = dst; | ||
105 | |||
106 | asm volatile( | ||
107 | "0: mvst %0,%1\n" | ||
108 | " jo 0b" | ||
109 | : "+&a" (dst), "+&a" (src) : "d" (r0) | ||
110 | : "cc", "memory"); | ||
111 | return ret; | ||
112 | } | ||
113 | |||
114 | static inline size_t strlen(const char *s) | ||
115 | { | ||
116 | register unsigned long r0 asm("0") = 0; | ||
117 | const char *tmp = s; | ||
118 | |||
119 | asm volatile( | ||
120 | "0: srst %0,%1\n" | ||
121 | " jo 0b" | ||
122 | : "+d" (r0), "+a" (tmp) : : "cc"); | ||
123 | return r0 - (unsigned long) s; | ||
124 | } | ||
125 | |||
126 | static inline size_t strnlen(const char * s, size_t n) | ||
127 | { | ||
128 | register int r0 asm("0") = 0; | ||
129 | const char *tmp = s; | ||
130 | const char *end = s + n; | ||
131 | |||
132 | asm volatile( | ||
133 | "0: srst %0,%1\n" | ||
134 | " jo 0b" | ||
135 | : "+a" (end), "+a" (tmp) : "d" (r0) : "cc"); | ||
136 | return end - s; | ||
137 | } | ||
138 | |||
139 | #endif /* !IN_ARCH_STRING_C */ | ||
140 | |||
141 | #endif /* __KERNEL__ */ | ||
142 | |||
143 | #endif /* __S390_STRING_H_ */ | ||