Skip to content
  • Rasmus Villemoes's avatar
    lib: bitmap: change bitmap_shift_right to take unsigned parameters · 2fbad299
    Rasmus Villemoes authored
    
    
    I've previously changed the nbits parameter of most bitmap_* functions to
    unsigned; now it is bitmap_shift_{left,right}'s turn.  This alone saves
    some .text, but while at it I found that there were a few other things one
    could do.  The end result of these seven patches is
    
      $ scripts/bloat-o-meter /tmp/bitmap.o.{old,new}
      add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-328 (-328)
      function                                     old     new   delta
      __bitmap_shift_right                         384     226    -158
      __bitmap_shift_left                          306     136    -170
    
    and less importantly also a smaller stack footprint
    
      $ stack-o-meter.pl master bitmap
      file                 function                       old  new  delta
      lib/bitmap.o         __bitmap_shift_right             24    8  -16
      lib/bitmap.o         __bitmap_shift_left              24    0  -24
    
    For each pair of 0 <= shift <= nbits <= 256 I've tested the end result
    with a few randomly filled src buffers (including garbage beyond nbits),
    in each case verifying that the shift {left,right}-most bits of dst are
    zero and the remaining nbits-shift bits correspond to src, so I'm fairly
    confident I didn't screw up.  That hasn't stopped me from being wrong
    before, though.
    
    This patch (of 7):
    
    gcc can generate slightly better code for stuff like "nbits %
    BITS_PER_LONG" when it knows nbits is not negative.  Since negative size
    bitmaps or shift amounts don't make sense, change these parameters of
    bitmap_shift_right to unsigned.
    
    The expressions involving "lim - 1" are still ok, since if lim is 0 the
    loop is never executed.
    
    Also use "shift" and "nbits" consistently for the parameter names.
    
    Signed-off-by: default avatarRasmus Villemoes <linux@rasmusvillemoes.dk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2fbad299