summaryrefslogtreecommitdiff
path: root/src/core/arm/interpreter/armsupp.cpp
diff options
context:
space:
mode:
authorGravatar bunnei2015-01-12 10:35:19 -0500
committerGravatar bunnei2015-01-12 10:35:19 -0500
commitf3a7b66267a243c9e1a8bcd37f39389e41703fef (patch)
tree01635c0131e1e5dfa94bfa67747f14e29ee4e203 /src/core/arm/interpreter/armsupp.cpp
parentMerge pull request #452 from darkf/mingwagain (diff)
parentdyncom: Get rid of unnecessary outer-scope variables in InterpreterMainLoop (diff)
downloadyuzu-f3a7b66267a243c9e1a8bcd37f39389e41703fef.tar.gz
yuzu-f3a7b66267a243c9e1a8bcd37f39389e41703fef.tar.xz
yuzu-f3a7b66267a243c9e1a8bcd37f39389e41703fef.zip
Merge pull request #472 from lioncash/overflow
dyncom: Fix some more V-flag setting ops. Plus some cleanup.
Diffstat (limited to 'src/core/arm/interpreter/armsupp.cpp')
-rw-r--r--src/core/arm/interpreter/armsupp.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/core/arm/interpreter/armsupp.cpp b/src/core/arm/interpreter/armsupp.cpp
index 68ac2a0ce..e2626eefb 100644
--- a/src/core/arm/interpreter/armsupp.cpp
+++ b/src/core/arm/interpreter/armsupp.cpp
@@ -418,6 +418,22 @@ ARMul_NegZero (ARMul_State * state, ARMword result)
418 } 418 }
419} 419}
420 420
421// Add with carry, indicates if a carry-out or signed overflow occurred.
422u32 AddWithCarry(u32 left, u32 right, u32 carry_in, bool* carry_out_occurred, bool* overflow_occurred)
423{
424 u64 unsigned_sum = (u64)left + (u64)right + (u64)carry_in;
425 s64 signed_sum = (s64)(s32)left + (s64)(s32)right + (s64)carry_in;
426 u64 result = (unsigned_sum & 0xFFFFFFFF);
427
428 if (carry_out_occurred)
429 *carry_out_occurred = (result != unsigned_sum);
430
431 if (overflow_occurred)
432 *overflow_occurred = ((s64)(s32)result != signed_sum);
433
434 return (u32)result;
435}
436
421// Compute whether an addition of A and B, giving RESULT, overflowed. 437// Compute whether an addition of A and B, giving RESULT, overflowed.
422bool AddOverflow(ARMword a, ARMword b, ARMword result) 438bool AddOverflow(ARMword a, ARMword b, ARMword result)
423{ 439{