129 |
*/ |
*/ |
130 |
# define JS_CEILING_LOG2(_log2,_n) \ |
# define JS_CEILING_LOG2(_log2,_n) \ |
131 |
JS_BEGIN_MACRO \ |
JS_BEGIN_MACRO \ |
|
JS_STATIC_ASSERT(sizeof(unsigned int) == sizeof(JSUint32)); \ |
|
132 |
unsigned int j_ = (unsigned int)(_n); \ |
unsigned int j_ = (unsigned int)(_n); \ |
133 |
(_log2) = (j_ <= 1 ? 0 : 32 - js_bitscan_clz32(j_ - 1)); \ |
(_log2) = (j_ <= 1 ? 0 : 32 - js_bitscan_clz32(j_ - 1)); \ |
134 |
JS_END_MACRO |
JS_END_MACRO |
166 |
*/ |
*/ |
167 |
# define JS_FLOOR_LOG2(_log2,_n) \ |
# define JS_FLOOR_LOG2(_log2,_n) \ |
168 |
JS_BEGIN_MACRO \ |
JS_BEGIN_MACRO \ |
|
JS_STATIC_ASSERT(sizeof(unsigned int) == sizeof(JSUint32)); \ |
|
169 |
(_log2) = 31 - js_bitscan_clz32(((unsigned int)(_n)) | 1); \ |
(_log2) = 31 - js_bitscan_clz32(((unsigned int)(_n)) | 1); \ |
170 |
JS_END_MACRO |
JS_END_MACRO |
171 |
#else |
#else |
205 |
#if JS_BYTES_PER_WORD == 4 |
#if JS_BYTES_PER_WORD == 4 |
206 |
|
|
207 |
# ifdef JS_HAS_BUILTIN_BITSCAN32 |
# ifdef JS_HAS_BUILTIN_BITSCAN32 |
|
JS_STATIC_ASSERT(sizeof(unsigned) == sizeof(JSUword)); |
|
208 |
# define js_FloorLog2wImpl(n) \ |
# define js_FloorLog2wImpl(n) \ |
209 |
((JSUword)(JS_BITS_PER_WORD - 1 - js_bitscan_clz32(n))) |
((JSUword)(JS_BITS_PER_WORD - 1 - js_bitscan_clz32(n))) |
210 |
# else |
# else |
214 |
#elif JS_BYTES_PER_WORD == 8 |
#elif JS_BYTES_PER_WORD == 8 |
215 |
|
|
216 |
# ifdef JS_HAS_BUILTIN_BITSCAN64 |
# ifdef JS_HAS_BUILTIN_BITSCAN64 |
|
JS_STATIC_ASSERT(sizeof(unsigned long long) == sizeof(JSUword)); |
|
217 |
# define js_FloorLog2wImpl(n) \ |
# define js_FloorLog2wImpl(n) \ |
218 |
((JSUword)(JS_BITS_PER_WORD - 1 - js_bitscan_clz64(n))) |
((JSUword)(JS_BITS_PER_WORD - 1 - js_bitscan_clz64(n))) |
219 |
# else |
# else |