diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2016-09-26 15:47:03 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2016-09-26 15:47:03 -0400 |
commit | 1e1b37273cf719545da50b76f214f983a710aaf4 (patch) | |
tree | 033f6062325ef7aaeefe8559bb409ab7d2be3c76 /arch/s390/lib/string.c | |
parent | c183a603e8d8a5a189729b77d0c623a3d5950e5f (diff) | |
parent | c291b015158577be533dd5a959dfc09bab119eed (diff) |
Merge branch 'x86/urgent' into x86/apic
Bring in the upstream modifications so we can fixup the silent merge
conflict which is introduced by this merge.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
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); |