On Fri, 2019-02-08 at 10:34 +0300, Alexey Dobriyan wrote: > Space savings on x86_64: > > add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-29 (-29) > Function old new delta > strncmp 67 38 -29 > > Space savings on arm: > > add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-60 (-60) > Function old new delta > strncmp 116 56 -60 [] > --- a/lib/string.c > +++ b/lib/string.c > @@ -344,16 +344,14 @@ EXPORT_SYMBOL(strcmp); > */ > int strncmp(const char *cs, const char *ct, size_t count) > { > - unsigned char c1, c2; > + while (count--) { > + unsigned int c1 = *(unsigned char *)cs++; > + unsigned int c2 = *(unsigned char *)ct++; > > - while (count) { > - c1 = *cs++; > - c2 = *ct++; > if (c1 != c2) > - return c1 < c2 ? -1 : 1; > + return c1 - c2;
This does change the return value for most comparisons. Wasn't there a specific reason for -1 and 1?