1
0
Эх сурвалжийг харах

libobs: Simplify util_mul_div64 for x64 on Windows

Use intrinsics to perform 128-bit math directly.
jpark37 4 жил өмнө
parent
commit
0c0ff1195f

+ 11 - 1
libobs/util/util_uint64.h

@@ -16,9 +16,19 @@
 
 #pragma once
 
+#if defined(_MSC_VER) && defined(_M_X64)
+#include <intrin.h>
+#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
 }