mirror of
https://github.com/hrydgard/ppsspp.git
synced 2024-11-27 07:20:49 +00:00
37 lines
666 B
C
37 lines
666 B
C
|
#pragma once
|
||
|
|
||
|
#include "ppsspp_config.h"
|
||
|
|
||
|
#if PPSSPP_PLATFORM(WINDOWS)
|
||
|
#include "Common/CommonWindows.h"
|
||
|
|
||
|
// Use this if you know the value is non-zero.
|
||
|
inline uint32_t clz32_nonzero(uint32_t value) {
|
||
|
DWORD index;
|
||
|
BitScanReverse(&index, value);
|
||
|
return 31 ^ (uint32_t)index;
|
||
|
}
|
||
|
|
||
|
inline uint32_t clz32(uint32_t value) {
|
||
|
if (!value)
|
||
|
return 32;
|
||
|
DWORD index;
|
||
|
BitScanReverse(&index, value);
|
||
|
return 31 ^ (uint32_t)index;
|
||
|
}
|
||
|
|
||
|
#else
|
||
|
|
||
|
// Use this if you know the value is non-zero.
|
||
|
inline uint32_t clz32_nonzero(uint32_t value) {
|
||
|
return __builtin_clz(value);
|
||
|
}
|
||
|
|
||
|
inline uint32_t clz32(uint32_t value) {
|
||
|
if (!value)
|
||
|
return 32;
|
||
|
return __builtin_clz(value);
|
||
|
}
|
||
|
|
||
|
#endif
|