aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Normmatt <normmatt234@gmail.com>2014-12-17 03:01:42 -0500
committerGravatar Lioncash <mathew1800@gmail.com>2014-12-17 03:26:01 -0500
commit8045df14d2494e34c064b58bc1772101014172a2 (patch)
tree102049e08f52dba796ecf10c7bc0a84ef3306b16 /src
parentbc81cc94901b72bf68e8241cf65e0e830b43fc93 (diff)
armemu: Implement REVSH
Diffstat (limited to 'src')
-rw-r--r--src/core/arm/interpreter/armemu.cpp14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/core/arm/interpreter/armemu.cpp b/src/core/arm/interpreter/armemu.cpp
index a62658b7..71cae3db 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;
}