mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-02-28 07:54:14 +01:00
[util] Remove duplicate tzcnt function
This commit is contained in:
parent
37456d583e
commit
c7d2957d8f
@ -1970,7 +1970,7 @@ namespace dxvk {
|
|||||||
uint32_t bindingsSet = bindingMask;
|
uint32_t bindingsSet = bindingMask;
|
||||||
|
|
||||||
while (bindingsSet != bindingsUsed) {
|
while (bindingsSet != bindingsUsed) {
|
||||||
uint32_t binding = tzcnt(~bindingsSet);
|
uint32_t binding = bit::tzcnt(~bindingsSet);
|
||||||
|
|
||||||
buffers[binding] = m_device->dummyBufferHandle();
|
buffers[binding] = m_device->dummyBufferHandle();
|
||||||
offsets[binding] = 0;
|
offsets[binding] = 0;
|
||||||
|
@ -14,13 +14,29 @@ namespace dxvk::bit {
|
|||||||
: 0;
|
: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
inline uint32_t tzcnt(uint32_t n) {
|
||||||
T tzcnt(T value) {
|
#if defined(__BMI__)
|
||||||
uint32_t result = 0;
|
return __tzcnt_u32(n);
|
||||||
while ((result < sizeof(T) * 8)
|
#elif defined(__GNUC__)
|
||||||
&& (((value >> result) & 1) == 0))
|
uint32_t res;
|
||||||
result += 1;
|
uint32_t tmp;
|
||||||
return result;
|
asm (
|
||||||
|
"xor %1, %1;"
|
||||||
|
"bsf %2, %0;"
|
||||||
|
"cmovz %1, %0;"
|
||||||
|
: "=&r" (res), "=&r" (tmp)
|
||||||
|
: "r" (n));
|
||||||
|
return res;
|
||||||
|
#else
|
||||||
|
uint32_t r = 31;
|
||||||
|
n &= -n;
|
||||||
|
r -= (n & 0x0000FFFF) ? 16 : 0;
|
||||||
|
r -= (n & 0x00FF00FF) ? 8 : 0;
|
||||||
|
r -= (n & 0x0F0F0F0F) ? 4 : 0;
|
||||||
|
r -= (n & 0x33333333) ? 2 : 0;
|
||||||
|
r -= (n & 0x55555555) ? 1 : 0;
|
||||||
|
return n != 0 ? r : 32;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -18,29 +18,4 @@ namespace dxvk {
|
|||||||
return (what + to - 1) & ~(to - 1);
|
return (what + to - 1) & ~(to - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline uint32_t tzcnt(uint32_t n) {
|
|
||||||
#if defined(__BMI__)
|
|
||||||
return __tzcnt_u32(n);
|
|
||||||
#elif defined(__GNUC__)
|
|
||||||
uint32_t res;
|
|
||||||
uint32_t tmp;
|
|
||||||
asm (
|
|
||||||
"xor %1, %1;"
|
|
||||||
"bsf %2, %0;"
|
|
||||||
"cmovz %1, %0;"
|
|
||||||
: "=&r" (res), "=&r" (tmp)
|
|
||||||
: "r" (n));
|
|
||||||
return res;
|
|
||||||
#else
|
|
||||||
uint32_t r = 31;
|
|
||||||
n &= -n;
|
|
||||||
r -= (n & 0x0000FFFF) ? 16 : 0;
|
|
||||||
r -= (n & 0x00FF00FF) ? 8 : 0;
|
|
||||||
r -= (n & 0x0F0F0F0F) ? 4 : 0;
|
|
||||||
r -= (n & 0x33333333) ? 2 : 0;
|
|
||||||
r -= (n & 0x55555555) ? 1 : 0;
|
|
||||||
return n != 0 ? r : 32;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user