kernel/util: Add bit hack utilities
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2013 Haiku, Inc. All rights reserved.
|
||||||
|
* Distributed under the terms of the MIT License.
|
||||||
|
*
|
||||||
|
* Authors:
|
||||||
|
* Paweł Dziepak, [email protected]
|
||||||
|
*/
|
||||||
|
#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
|
||||||
|
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
#include <elf.h>
|
#include <elf.h>
|
||||||
#include <smp.h>
|
#include <smp.h>
|
||||||
|
#include <util/BitUtils.h>
|
||||||
#include <vm/vm.h>
|
#include <vm/vm.h>
|
||||||
#include <vm/vm_types.h>
|
#include <vm/vm_types.h>
|
||||||
#include <vm/VMAddressSpace.h>
|
#include <vm/VMAddressSpace.h>
|
||||||
@@ -129,32 +130,6 @@ static uint32 sHierarchyMask[CPU_TOPOLOGY_LEVELS];
|
|||||||
static uint32 sHierarchyShift[CPU_TOPOLOGY_LEVELS];
|
static uint32 sHierarchyShift[CPU_TOPOLOGY_LEVELS];
|
||||||
|
|
||||||
|
|
||||||
// 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
static status_t
|
||||||
acpi_shutdown(bool rebootSystem)
|
acpi_shutdown(bool rebootSystem)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user