Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 70660
b: refs/heads/master
c: b311e92
h: refs/heads/master
v: v3
  • Loading branch information
Robert P. J. Day authored and Linus Torvalds committed Oct 17, 2007
1 parent 8ddd3c9 commit 063a8b5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d9aacccf457d07d729cfc7bf20ff0c7428357a9f
refs/heads/master: b311e921b385b5a848f0806df16276aca1ecae07
25 changes: 25 additions & 0 deletions trunk/include/linux/log2.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,15 @@ unsigned long __roundup_pow_of_two(unsigned long n)
return 1UL << fls_long(n - 1);
}

/*
* round down to nearest power of two
*/
static inline __attribute__((const))
unsigned long __rounddown_pow_of_two(unsigned long n)
{
return 1UL << (fls_long(n) - 1);
}

/**
* ilog2 - log of base 2 of 32-bit or a 64-bit unsigned value
* @n - parameter
Expand Down Expand Up @@ -165,4 +174,20 @@ unsigned long __roundup_pow_of_two(unsigned long n)
__roundup_pow_of_two(n) \
)

/**
* rounddown_pow_of_two - round the given value down to nearest power of two
* @n - parameter
*
* round the given value down to the nearest power of two
* - the result is undefined when n == 0
* - this can be used to initialise global variables from constant data
*/
#define rounddown_pow_of_two(n) \
( \
__builtin_constant_p(n) ? ( \
(n == 1) ? 0 : \
(1UL << ilog2(n))) : \
__rounddown_pow_of_two(n) \
)

#endif /* _LINUX_LOG2_H */

0 comments on commit 063a8b5

Please sign in to comment.