diff options
Diffstat (limited to 'arch/s390/lib/string.c')
-rw-r--r-- | arch/s390/lib/string.c | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/arch/s390/lib/string.c b/arch/s390/lib/string.c index e390bbb16443..48352bffbc92 100644 --- a/arch/s390/lib/string.c +++ b/arch/s390/lib/string.c | |||
@@ -237,11 +237,10 @@ char * strrchr(const char * s, int c) | |||
237 | EXPORT_SYMBOL(strrchr); | 237 | EXPORT_SYMBOL(strrchr); |
238 | 238 | ||
239 | static inline int clcle(const char *s1, unsigned long l1, | 239 | static inline int clcle(const char *s1, unsigned long l1, |
240 | const char *s2, unsigned long l2, | 240 | const char *s2, unsigned long l2) |
241 | int *diff) | ||
242 | { | 241 | { |
243 | register unsigned long r2 asm("2") = (unsigned long) s1; | 242 | register unsigned long r2 asm("2") = (unsigned long) s1; |
244 | register unsigned long r3 asm("3") = (unsigned long) l2; | 243 | register unsigned long r3 asm("3") = (unsigned long) l1; |
245 | register unsigned long r4 asm("4") = (unsigned long) s2; | 244 | register unsigned long r4 asm("4") = (unsigned long) s2; |
246 | register unsigned long r5 asm("5") = (unsigned long) l2; | 245 | register unsigned long r5 asm("5") = (unsigned long) l2; |
247 | int cc; | 246 | int cc; |
@@ -252,7 +251,6 @@ static inline int clcle(const char *s1, unsigned long l1, | |||
252 | " srl %0,28" | 251 | " srl %0,28" |
253 | : "=&d" (cc), "+a" (r2), "+a" (r3), | 252 | : "=&d" (cc), "+a" (r2), "+a" (r3), |
254 | "+a" (r4), "+a" (r5) : : "cc"); | 253 | "+a" (r4), "+a" (r5) : : "cc"); |
255 | *diff = *(char *)r2 - *(char *)r4; | ||
256 | return cc; | 254 | return cc; |
257 | } | 255 | } |
258 | 256 | ||
@@ -270,9 +268,9 @@ char * strstr(const char * s1,const char * s2) | |||
270 | return (char *) s1; | 268 | return (char *) s1; |
271 | l1 = __strend(s1) - s1; | 269 | l1 = __strend(s1) - s1; |
272 | while (l1-- >= l2) { | 270 | while (l1-- >= l2) { |
273 | int cc, dummy; | 271 | int cc; |
274 | 272 | ||
275 | cc = clcle(s1, l1, s2, l2, &dummy); | 273 | cc = clcle(s1, l2, s2, l2); |
276 | if (!cc) | 274 | if (!cc) |
277 | return (char *) s1; | 275 | return (char *) s1; |
278 | s1++; | 276 | s1++; |
@@ -313,11 +311,11 @@ EXPORT_SYMBOL(memchr); | |||
313 | */ | 311 | */ |
314 | int memcmp(const void *cs, const void *ct, size_t n) | 312 | int memcmp(const void *cs, const void *ct, size_t n) |
315 | { | 313 | { |
316 | int ret, diff; | 314 | int ret; |
317 | 315 | ||
318 | ret = clcle(cs, n, ct, n, &diff); | 316 | ret = clcle(cs, n, ct, n); |
319 | if (ret) | 317 | if (ret) |
320 | ret = diff; | 318 | ret = ret == 1 ? -1 : 1; |
321 | return ret; | 319 | return ret; |
322 | } | 320 | } |
323 | EXPORT_SYMBOL(memcmp); | 321 | EXPORT_SYMBOL(memcmp); |