diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2019-02-16 00:26:41 +0100 |
---|---|---|
committer | FernandoS27 <fsahmkow27@gmail.com> | 2019-02-16 03:55:31 +0100 |
commit | 3ea48e8ebe25686f2342cd79b32409fcd1bccb28 (patch) | |
tree | c9e5c3da2dec7ad2ef371a0d6fcd8c9cc11dc729 /src/common/uint128.cpp | |
parent | Correct CNTPCT to use Clock Cycles instead of Cpu Cycles. (diff) | |
download | yuzu-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.cpp')
-rw-r--r-- | src/common/uint128.cpp | 18 |
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 @@ + +namespace Common { + +std::pair<u64, u64> udiv128(u128 dividend, u64 divisor) { + u64 remainder = dividend[0] % divisor; + u64 accum = dividend[0] / divisor; + if (dividend[1] == 0) + return {accum, remainder}; + // We ignore dividend[1] / divisor as that overflows + u64 first_segment = (dividend[1] % divisor) << 32; + accum += (first_segment / divisor) << 32; + u64 second_segment = (first_segment % divisor) << 32; + accum += (second_segment / divisor); + remainder += second_segment % divisor; + return {accum, remainder}; +} + +} // namespace Common |