summaryrefslogtreecommitdiffstats
path: root/src/core/arm/interpreter/armsupp.cpp
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2014-12-27 23:06:19 +0100
committerLioncash <mathew1800@gmail.com>2014-12-27 23:06:19 +0100
commit60523113a9301e16bae91af61063bd8833926e8c (patch)
tree772fa7009ce417b0388fa8f1e8fbf9bab0bfc631 /src/core/arm/interpreter/armsupp.cpp
parentMerge pull request #349 from lioncash/uhdync (diff)
downloadyuzu-60523113a9301e16bae91af61063bd8833926e8c.tar
yuzu-60523113a9301e16bae91af61063bd8833926e8c.tar.gz
yuzu-60523113a9301e16bae91af61063bd8833926e8c.tar.bz2
yuzu-60523113a9301e16bae91af61063bd8833926e8c.tar.lz
yuzu-60523113a9301e16bae91af61063bd8833926e8c.tar.xz
yuzu-60523113a9301e16bae91af61063bd8833926e8c.tar.zst
yuzu-60523113a9301e16bae91af61063bd8833926e8c.zip
Diffstat (limited to '')
-rw-r--r--src/core/arm/interpreter/armsupp.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/core/arm/interpreter/armsupp.cpp b/src/core/arm/interpreter/armsupp.cpp
index 6774f8a74..186b1bd73 100644
--- a/src/core/arm/interpreter/armsupp.cpp
+++ b/src/core/arm/interpreter/armsupp.cpp
@@ -469,6 +469,47 @@ ARMul_SubOverflow (ARMul_State * state, ARMword a, ARMword b, ARMword result)
ASSIGNV (SubOverflow (a, b, result));
}
+/* 8-bit unsigned saturated addition */
+u8 ARMul_UnsignedSaturatedAdd8(u8 left, u8 right)
+{
+ u8 result = left + right;
+
+ if (result < left)
+ result = 0xFF;
+
+ return result;
+}
+
+/* 16-bit unsigned saturated addition */
+u16 ARMul_UnsignedSaturatedAdd16(u16 left, u16 right)
+{
+ u16 result = left + right;
+
+ if (result < left)
+ result = 0xFFFF;
+
+ return result;
+}
+
+/* 8-bit unsigned saturated subtraction */
+u8 ARMul_UnsignedSaturatedSub8(u8 left, u8 right)
+{
+ if (left <= right)
+ return 0;
+
+ return left - right;
+}
+
+/* 16-bit unsigned saturated subtraction */
+u16 ARMul_UnsignedSaturatedSub16(u16 left, u16 right)
+{
+ if (left <= right)
+ return 0;
+
+ return left - right;
+}
+
+
/* This function does the work of generating the addresses used in an
LDC instruction. The code here is always post-indexed, it's up to the
caller to get the input address correct and to handle base register