From 2e9e3e88b63a1c1321d51c499993cbfc3b34c18c Mon Sep 17 00:00:00 2001
From: Oliver Ford <oliford@NervousEnergy.(none)>
Date: Thu, 17 Apr 2008 22:09:45 +0100
Subject: [PATCH] Report multiword transfer instructions in getInsnName()

---
 src/arminsns.cpp |    9 ++++++++-
 1 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/src/arminsns.cpp b/src/arminsns.cpp
index 122a022..9487ab6 100644
--- a/src/arminsns.cpp
+++ b/src/arminsns.cpp
@@ -191,7 +191,7 @@ const char *
 getInsnName(uint32 insn)
 {
     const char *iname = "?";
-    int isLoad = insn & 0x00100000;
+    int isLoad = (insn >> 20) & 1;
     if ((insn & 0x0C000000) == 0x04000000) {
         if (isLoad) {
             if (insn & (1<<22))
@@ -204,6 +204,13 @@ getInsnName(uint32 insn)
             else
                 iname = "str";
         }
+    } else if ((insn & 0x0E000000) == 0x08000000) { //multiword instructions
+        const char *multiIns[] = {"stmda","stmdb","stmia","stmib",
+                                   "ldmda","ldmdb","ldmia","ldmib"};
+        int isPre = (insn >> 24) & 1;
+        int isInc = (insn >> 23) & 1;
+        iname = multiIns[isLoad*4 + isInc*2 + isPre];
+
     } else if ((insn & 0x0E000000) == 0x00000000) {
         int lowbyte = insn & 0xF0;
         if (isLoad) {
-- 
1.5.2.5

