From 0c0ff1195f63d068888a458956c01e098be4e8c5 Mon Sep 17 00:00:00 2001 From: jpark37 Date: Wed, 29 Sep 2021 01:24:16 -0700 Subject: [PATCH] libobs: Simplify util_mul_div64 for x64 on Windows Use intrinsics to perform 128-bit math directly. --- libobs/util/util_uint64.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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 }