ppsspp/Common/BitScan.h
Henrik Rydgård f65a71d6d8 Compat: Option to use accurate dotprod for VMMUL.
Eliminates Tekken 6 leg shaking.
2019-08-05 11:44:52 -07:00

38 lines
685 B
C++

#pragma once
#include "ppsspp_config.h"
#include <cstdint>
#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