vkd3d: Fix tzcnt64 on MSVC 32-bit and 64-bit.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2020-07-07 16:28:21 +02:00
parent 43a88b3ebe
commit 14ba2602ad
1 changed files with 13 additions and 2 deletions

View File

@ -87,8 +87,19 @@ static inline unsigned int vkd3d_bitmask_tzcnt64(uint64_t mask)
{
#ifdef _MSC_VER
unsigned long result;
_BitScanForward64(&result, mask) ? result : 64;
return result;
#ifdef _WIN64
return _BitScanForward64(&result, mask) ? result : 64;
#else
uint32_t lower, upper;
lower = (uint32_t)mask;
upper = (uint32_t)(mask >> 32);
if (_BitScanForward(&result, lower))
return result;
else if (_BitScanForward(&result, upper))
return result + 32;
else
return 64;
#endif
#elif defined (HAVE_BUILTIN_CTZLL)
return mask ? __builtin_ctzll(mask) : 64;
#else