diff options
| author | guccigang420 <> | 2023-10-01 17:30:28 +0200 |
|---|---|---|
| committer | Triang3l <triang3l@yandex.ru> | 2025-07-30 23:47:17 +0300 |
| commit | 9ae3a7250040dd9abf7313534cd56e10e44b8640 (patch) | |
| tree | 5add04a90d20cfec77c7fabf2cb6a38544898e1b | |
| parent | 3d30b2eec3ab1f83140b09745bee881fb5d5dde2 (diff) | |
[CPU/HIR] Fixed MulHi in value.cc for Linux systems
| -rw-r--r-- | src/xenia/cpu/hir/value.cc | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/xenia/cpu/hir/value.cc b/src/xenia/cpu/hir/value.cc index 1a72ba22f..490398ff7 100644 --- a/src/xenia/cpu/hir/value.cc +++ b/src/xenia/cpu/hir/value.cc @@ -410,12 +410,14 @@ void Value::MulHi(Value* other, bool is_unsigned) { #else if (is_unsigned) { constant.i64 = static_cast<uint64_t>( - static_cast<unsigned __int128>(constant.i64) * - static_cast<unsigned __int128>(other->constant.i64)); + (static_cast<unsigned __int128>(constant.i64) * + static_cast<unsigned __int128>(other->constant.i64)) >> + 64); } else { - constant.i64 = - static_cast<uint64_t>(static_cast<__int128>(constant.i64) * - static_cast<__int128>(other->constant.i64)); + constant.i64 = static_cast<uint64_t>( + (static_cast<__int128>(constant.i64) * + static_cast<__int128>(other->constant.i64)) >> + 64); } #endif // XE_COMPILER_MSVC break; |
