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?


Reply via email to