Fix BIONIC_ROUND_UP_POWER_OF_2 for 64 bit.

There were two bugs here:

- For 64 bit values, this did not properly round up.
- The macro rounded to the power of 2 less than value, not to the power
  of 2 greater than value.

Change-Id: If8cb41536a9d2f5c1bc213676f1e67a7903a36b0
This commit is contained in:
Christopher Ferris 2014-07-14 18:47:23 -07:00
parent 5656a0c494
commit 27047faf28

View File

@ -37,6 +37,8 @@
(((value) + (alignment) - 1) & ~((alignment) - 1))
#define BIONIC_ROUND_UP_POWER_OF_2(value) \
(1UL << (sizeof(value) * 8 - 1 - __builtin_clz(value)))
(sizeof(value) == 8) \
? (1UL << (64 - __builtin_clzl(static_cast<unsigned long>(value)))) \
: (1UL << (32 - __builtin_clz(static_cast<unsigned int>(value))))
#endif // _BIONIC_MACROS_H_