From 8045df14d2494e34c064b58bc1772101014172a2 Mon Sep 17 00:00:00 2001
From: Normmatt <normmatt234@gmail.com>
Date: Wed, 17 Dec 2014 03:01:42 -0500
Subject: [PATCH] armemu: Implement REVSH

---
 src/core/arm/interpreter/armemu.cpp | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp
index a62658b7c..71cae3db0 100644
--- a/src/core/arm/interpreter/armemu.cpp
+++ b/src/core/arm/interpreter/armemu.cpp
@@ -6076,10 +6076,10 @@ L_stm_s_takeabort:
 					ror = 24;
 					break;
 
-				case 0xf3:
+				case 0xf3: // REV
 					DEST = ((RHS & 0xFF) << 24) | ((RHS & 0xFF00)) << 8 | ((RHS & 0xFF0000) >> 8) | ((RHS & 0xFF000000) >> 24);
 					return 1;
-				case 0xfb:
+				case 0xfb: // REV16
 					DEST = ((RHS & 0xFF) << 8) | ((RHS & 0xFF00)) >> 8 | ((RHS & 0xFF0000) << 8) | ((RHS & 0xFF000000) >> 8);
 					return 1;
 				default:
@@ -6206,9 +6206,13 @@ L_stm_s_takeabort:
 					ror = 24;
 					break;
 
-				case 0xfb:
-					printf("Unhandled v6 insn: revsh\n");
-					return 0;
+				case 0xfb: // REVSH
+				{
+					DEST = ((RHS & 0xFF) << 8) | ((RHS & 0xFF00) >> 8);
+					if (DEST & 0x8000)
+						DEST |= 0xffff0000;
+					return 1;
+				}
 				default:
 					break;
 			}