if (bits > state->bits) {
bits -= state->bits;
- state->w |= v >> bits;
+ /* avoid shift by 64 if bits is 0 - bits is never 64 here: */
+ state->w |= (v >> 1) >> (bits - 1);
*state->p = state->w;
state->p = next_word(state->p);
}
state->bits -= bits;
-
- EBUG_ON(!state->bits);
- /* avoid shift by 64: */
- state->w |= (v << 1) << (state->bits - 1);
+ state->w |= v << state->bits;
return true;
}
if (bits > state->bits) {
bits -= state->bits;
- state->w |= v >> bits;
+ state->w |= (v >> 1) >> (bits - 1);
*state->p = state->w;
state->p = next_word(state->p);
}
state->bits -= bits;
- state->w |= (v << 1) << (state->bits - 1);
+ state->w |= v << state->bits;
return ret;
}