Lines Matching refs:nbBits
57 MEM_STATIC void BIT_addBits(BIT_CStream_t* bitC, size_t value, unsigned nbBits);
97 MEM_STATIC size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits);
116 MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC, size_t value, unsigned nbBits);
117 /* faster, but works only if value is "clean", meaning all high bits above nbBits are 0 */
122 MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits);
123 /* faster, but works only if nbBits >= 1 */
185 size_t value, unsigned nbBits)
188 assert(nbBits < BIT_MASK_SIZE);
189 assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8);
190 bitC->bitContainer |= (value & BIT_mask[nbBits]) << bitC->bitPos;
191 bitC->bitPos += nbBits;
196 * meaning all high bits above nbBits are 0 */
198 size_t value, unsigned nbBits)
200 assert((value>>nbBits) == 0);
201 assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8);
203 bitC->bitPos += nbBits;
311 MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getMiddleBits(size_t bitContainer, U32 const start, U32 const nbBits)
315 assert(nbBits < BIT_MASK_SIZE);
316 /* x86 transform & ((1 << nbBits) - 1) to bzhi instruction, it is better
322 return (bitContainer >> (start & regMask)) & ((((U64)1) << nbBits) - 1);
324 return (bitContainer >> (start & regMask)) & BIT_mask[nbBits];
328 MEM_STATIC FORCE_INLINE_ATTR size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
330 assert(nbBits < BIT_MASK_SIZE);
331 return bitContainer & BIT_mask[nbBits];
340 MEM_STATIC FORCE_INLINE_ATTR size_t BIT_lookBits(const BIT_DStream_t* bitD, U32 nbBits)
344 /* if bitD->bitsConsumed + nbBits > sizeof(bitD->bitContainer)*8,
346 return BIT_getMiddleBits(bitD->bitContainer, (sizeof(bitD->bitContainer)*8) - bitD->bitsConsumed - nbBits, nbBits);
350 return ((bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> 1) >> ((regMask-nbBits) & regMask);
355 * unsafe version; only works if nbBits >= 1 */
356 MEM_STATIC size_t BIT_lookBitsFast(const BIT_DStream_t* bitD, U32 nbBits)
359 assert(nbBits >= 1);
360 return (bitD->bitContainer << (bitD->bitsConsumed & regMask)) >> (((regMask+1)-nbBits) & regMask);
363 MEM_STATIC FORCE_INLINE_ATTR void BIT_skipBits(BIT_DStream_t* bitD, U32 nbBits)
365 bitD->bitsConsumed += nbBits;
370 * Pay attention to not read more than nbBits contained into local register.
372 MEM_STATIC FORCE_INLINE_ATTR size_t BIT_readBits(BIT_DStream_t* bitD, unsigned nbBits)
374 size_t const value = BIT_lookBits(bitD, nbBits);
375 BIT_skipBits(bitD, nbBits);
380 * unsafe version; only works only if nbBits >= 1 */
381 MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits)
383 size_t const value = BIT_lookBitsFast(bitD, nbBits);
384 assert(nbBits >= 1);
385 BIT_skipBits(bitD, nbBits);