mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 07:21:25 +12:00
cntlz fix
This commit is contained in:
parent
7372583cab
commit
25672cdc47
1 changed files with 20 additions and 6 deletions
|
@ -289,9 +289,7 @@ static __forceinline uint64_t InterlockedXor(volatile uint64_t* dest, uint64_t v
|
||||||
|
|
||||||
static __forceinline uint32_t cntlz32(uint32_t arg)
|
static __forceinline uint32_t cntlz32(uint32_t arg)
|
||||||
{
|
{
|
||||||
#if defined(__GNUG__)
|
#if defined(_MSC_VER)
|
||||||
return __builtin_clzl(arg);
|
|
||||||
#else
|
|
||||||
unsigned long res;
|
unsigned long res;
|
||||||
if (!_BitScanReverse(&res, arg))
|
if (!_BitScanReverse(&res, arg))
|
||||||
{
|
{
|
||||||
|
@ -301,14 +299,21 @@ static __forceinline uint32_t cntlz32(uint32_t arg)
|
||||||
{
|
{
|
||||||
return res ^ 31;
|
return res ^ 31;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (arg)
|
||||||
|
{
|
||||||
|
return __builtin_clzll((uint64_t)arg) - 32;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 32;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static __forceinline uint64_t cntlz64(uint64_t arg)
|
static __forceinline uint64_t cntlz64(uint64_t arg)
|
||||||
{
|
{
|
||||||
#if defined(__GNUG__)
|
#if defined(_MSC_VER)
|
||||||
return __builtin_clzll(arg);
|
|
||||||
#else
|
|
||||||
unsigned long res;
|
unsigned long res;
|
||||||
if (!_BitScanReverse64(&res, arg))
|
if (!_BitScanReverse64(&res, arg))
|
||||||
{
|
{
|
||||||
|
@ -318,6 +323,15 @@ static __forceinline uint64_t cntlz64(uint64_t arg)
|
||||||
{
|
{
|
||||||
return res ^ 63;
|
return res ^ 63;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (arg)
|
||||||
|
{
|
||||||
|
return __builtin_clzll(arg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 64;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue