summaryrefslogtreecommitdiff
path: root/src/common/uint128.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/uint128.cpp')
-rw-r--r--src/common/uint128.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/common/uint128.cpp b/src/common/uint128.cpp
new file mode 100644
index 000000000..aea7f03e2
--- /dev/null
+++ b/src/common/uint128.cpp
@@ -0,0 +1,18 @@
1
2namespace Common {
3
4std::pair<u64, u64> udiv128(u128 dividend, u64 divisor) {
5 u64 remainder = dividend[0] % divisor;
6 u64 accum = dividend[0] / divisor;
7 if (dividend[1] == 0)
8 return {accum, remainder};
9 // We ignore dividend[1] / divisor as that overflows
10 u64 first_segment = (dividend[1] % divisor) << 32;
11 accum += (first_segment / divisor) << 32;
12 u64 second_segment = (first_segment % divisor) << 32;
13 accum += (second_segment / divisor);
14 remainder += second_segment % divisor;
15 return {accum, remainder};
16}
17
18} // namespace Common