summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/xenia/cpu/hir/value.cc12
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;