summaryrefslogtreecommitdiffstats
path: root/src/common/uint128.h
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2019-02-16 00:26:41 +0100
committerFernandoS27 <fsahmkow27@gmail.com>2019-02-16 03:55:31 +0100
commit3ea48e8ebe25686f2342cd79b32409fcd1bccb28 (patch)
treec9e5c3da2dec7ad2ef371a0d6fcd8c9cc11dc729 /src/common/uint128.h
parentCorrect CNTPCT to use Clock Cycles instead of Cpu Cycles. (diff)
downloadyuzu-3ea48e8ebe25686f2342cd79b32409fcd1bccb28.tar
yuzu-3ea48e8ebe25686f2342cd79b32409fcd1bccb28.tar.gz
yuzu-3ea48e8ebe25686f2342cd79b32409fcd1bccb28.tar.bz2
yuzu-3ea48e8ebe25686f2342cd79b32409fcd1bccb28.tar.lz
yuzu-3ea48e8ebe25686f2342cd79b32409fcd1bccb28.tar.xz
yuzu-3ea48e8ebe25686f2342cd79b32409fcd1bccb28.tar.zst
yuzu-3ea48e8ebe25686f2342cd79b32409fcd1bccb28.zip
Diffstat (limited to 'src/common/uint128.h')
-rw-r--r--src/common/uint128.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/common/uint128.h b/src/common/uint128.h
new file mode 100644
index 000000000..fda313bcc
--- /dev/null
+++ b/src/common/uint128.h
@@ -0,0 +1,30 @@
+#include <array>
+#include <cstdint>
+#include <utility>
+#include <cstring>
+#include "common/common_types.h"
+
+namespace Common {
+
+#ifdef _MSC_VER
+#include <intrin.h>
+
+#pragma intrinsic(_umul128)
+#endif
+
+inline u128 umul128(u64 a, u64 b) {
+#ifdef _MSC_VER
+u128 result;
+result[0] = _umul128(a, b, &result[1]);
+#else
+unsigned __int128 tmp = a;
+tmp *= b;
+u128 result;
+std::memcpy(&result, &tmp, sizeof(u128));
+#endif
+return result;
+}
+
+std::pair<u64, u64> udiv128(u128 dividend, u64 divisor);
+
+} // namespace Common