43 lines
732 B
C
43 lines
732 B
C
/*
|
|
* Copyright 2013 Haiku, Inc. All rights reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Paweł Dziepak, pdziepak@quarnos.org
|
|
*/
|
|
#ifndef KERNEL_UTIL_BITUTIL_H
|
|
#define KERNEL_UTIL_BITUTIL_H
|
|
|
|
|
|
#include <SupportDefs.h>
|
|
|
|
|
|
// http://graphics.stanford.edu/~seander/bithacks.html
|
|
static inline uint32
|
|
nextPowerOf2(uint32 v)
|
|
{
|
|
v--;
|
|
v |= v >> 1;
|
|
v |= v >> 2;
|
|
v |= v >> 4;
|
|
v |= v >> 8;
|
|
v |= v >> 16;
|
|
v++;
|
|
|
|
return v;
|
|
}
|
|
|
|
|
|
// http://graphics.stanford.edu/~seander/bithacks.html
|
|
static inline uint32
|
|
countSetBits(uint32 v)
|
|
{
|
|
v = v - ((v >> 1) & 0x55555555);
|
|
v = (v & 0x33333333) + ((v >> 2) & 0x33333333);
|
|
return (((v + (v >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24;
|
|
}
|
|
|
|
|
|
#endif // KERNEL_UTIL_RANDOM_H
|
|
|