diff --git a/libobs/util/util_uint64.h b/libobs/util/util_uint64.h index f3c2be18c..654436b7a 100644 --- a/libobs/util/util_uint64.h +++ b/libobs/util/util_uint64.h @@ -16,9 +16,19 @@ #pragma once +#if defined(_MSC_VER) && defined(_M_X64) +#include +#endif + static inline uint64_t util_mul_div64(uint64_t num, uint64_t mul, uint64_t div) { +#if defined(_MSC_VER) && defined(_M_X64) + unsigned __int64 high; + const unsigned __int64 low = _umul128(num, mul, &high); + unsigned __int64 rem; + return _udiv128(high, low, div, &rem); +#else const uint64_t rem = num % div; - return (num / div) * mul + (rem * mul) / div; +#endif }