ARM Thumb hack patch

Robert Shideleff <[email protected]>
Newsgroups gmane.comp.emulators.sid.devel,gmane.comp.tools.cgen.devel
Message-ID <[email protected]>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

In the current SID CVS repository the ARM thumb instruction set does not work. 
It appears that a macro type thing is broken in the cgen code. I don't know 
the insides of cgen, and so I don't know how to fix it, but here is a patch 
that fixes the generated code in SID.

It is simply a repetitive removal of an extra 16 bit shift of the entire-insn 
in the thumb-decode function.

Bob
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFBHRMZ8XjOGQDr37YRAjdBAJ988HHCB8DexTdNOuwHdE2bI7KChwCdEr01
CcZGinKCy2ESgzzAiXSw9hU=
=qc/p
-----END PGP SIGNATURE-----
arm-thumb.diff (text/x-diff, 33.3 KB)
? .deps
? .libs
? CGEN.sh
? Makefile
? cgen-asm.lo
? cgen-dis.lo
? cgen-opc.lo
? compCGEN.lo
? config.h
? config.log
? config.status
? dis-buf.lo
? dis-init.lo
? fp.lo
? libcgencpu.la
? libtool
? stamp-h
? tracedis.lo
? arm7t/.deps
? arm7t/.libs
? arm7t/Makefile
? arm7t/arm-decode.lo
? arm7t/arm-sem.lo
? arm7t/arm-semsw.lo
? arm7t/arm7f.lo
? arm7t/config.log
? arm7t/config.status
? arm7t/libarm7t.la
? arm7t/libtool
? arm7t/thumb-decode.lo
? arm7t/thumb-sem.lo
? arm7t/thumb-semsw.lo
? m32r/.deps
? m32r/.libs
? m32r/Makefile
? m32r/config.log
? m32r/config.status
? m32r/libm32r.la
? m32r/libtool
? m32r/m32r-asm.lo
? m32r/m32r-decode.lo
? m32r/m32r-desc.lo
? m32r/m32r-dis.lo
? m32r/m32r-ibld.lo
? m32r/m32r-opc.lo
? m32r/m32r-sem.lo
? m32r/m32rbf.lo
? xstormy16/.deps
? xstormy16/.libs
? xstormy16/Makefile
? xstormy16/config.log
? xstormy16/config.status
? xstormy16/libtool
? xstormy16/libxstormy16.la
? xstormy16/xstormy16-asm.lo
? xstormy16/xstormy16-decode.lo
? xstormy16/xstormy16-desc.lo
? xstormy16/xstormy16-dis.lo
? xstormy16/xstormy16-ibld.lo
? xstormy16/xstormy16-opc.lo
? xstormy16/xstormy16-sem.lo
? xstormy16/xstormy16.lo
Index: arm7t/thumb-decode.cxx
===================================================================
RCS file: /cvs/src/src/sid/component/cgen-cpu/arm7t/thumb-decode.cxx,v
retrieving revision 1.5
diff -u -r1.5 thumb-decode.cxx
--- arm7t/thumb-decode.cxx	5 Jul 2003 17:07:20 -0000	1.5
+++ arm7t/thumb-decode.cxx	13 Aug 2004 19:04:31 -0000
@@ -280,7 +280,7 @@
       case 4 : /* fall through */
       case 5 : /* fall through */
       case 6 : /* fall through */
-      case 7 : itype = THUMB_INSN_LSL; entire_insn = base_insn >> 16; thumb_extract_sfmt_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 7 : itype = THUMB_INSN_LSL; thumb_extract_sfmt_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 8 : /* fall through */
       case 9 : /* fall through */
       case 10 : /* fall through */
@@ -288,7 +288,7 @@
       case 12 : /* fall through */
       case 13 : /* fall through */
       case 14 : /* fall through */
-      case 15 : itype = THUMB_INSN_LSR; entire_insn = base_insn >> 16; thumb_extract_sfmt_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 15 : itype = THUMB_INSN_LSR; thumb_extract_sfmt_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 16 : /* fall through */
       case 17 : /* fall through */
       case 18 : /* fall through */
@@ -296,15 +296,15 @@
       case 20 : /* fall through */
       case 21 : /* fall through */
       case 22 : /* fall through */
-      case 23 : itype = THUMB_INSN_ASR; entire_insn = base_insn >> 16; thumb_extract_sfmt_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 23 : itype = THUMB_INSN_ASR; thumb_extract_sfmt_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 24 : /* fall through */
-      case 25 : itype = THUMB_INSN_ADD; entire_insn = base_insn >> 16; thumb_extract_sfmt_add (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 25 : itype = THUMB_INSN_ADD; thumb_extract_sfmt_add (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 26 : /* fall through */
-      case 27 : itype = THUMB_INSN_SUB; entire_insn = base_insn >> 16; thumb_extract_sfmt_add (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 27 : itype = THUMB_INSN_SUB; thumb_extract_sfmt_add (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 28 : /* fall through */
-      case 29 : itype = THUMB_INSN_ADDI; entire_insn = base_insn >> 16; thumb_extract_sfmt_addi (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 29 : itype = THUMB_INSN_ADDI; thumb_extract_sfmt_addi (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 30 : /* fall through */
-      case 31 : itype = THUMB_INSN_SUBI; entire_insn = base_insn >> 16; thumb_extract_sfmt_addi (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 31 : itype = THUMB_INSN_SUBI; thumb_extract_sfmt_addi (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 32 : /* fall through */
       case 33 : /* fall through */
       case 34 : /* fall through */
@@ -312,7 +312,7 @@
       case 36 : /* fall through */
       case 37 : /* fall through */
       case 38 : /* fall through */
-      case 39 : itype = THUMB_INSN_MOV; entire_insn = base_insn >> 16; thumb_extract_sfmt_mov (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 39 : itype = THUMB_INSN_MOV; thumb_extract_sfmt_mov (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 40 : /* fall through */
       case 41 : /* fall through */
       case 42 : /* fall through */
@@ -320,7 +320,7 @@
       case 44 : /* fall through */
       case 45 : /* fall through */
       case 46 : /* fall through */
-      case 47 : itype = THUMB_INSN_CMP; entire_insn = base_insn >> 16; thumb_extract_sfmt_cmp (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 47 : itype = THUMB_INSN_CMP; thumb_extract_sfmt_cmp (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 48 : /* fall through */
       case 49 : /* fall through */
       case 50 : /* fall through */
@@ -328,7 +328,7 @@
       case 52 : /* fall through */
       case 53 : /* fall through */
       case 54 : /* fall through */
-      case 55 : itype = THUMB_INSN_ADDI8; entire_insn = base_insn >> 16; thumb_extract_sfmt_addi8 (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 55 : itype = THUMB_INSN_ADDI8; thumb_extract_sfmt_addi8 (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 56 : /* fall through */
       case 57 : /* fall through */
       case 58 : /* fall through */
@@ -336,16 +336,16 @@
       case 60 : /* fall through */
       case 61 : /* fall through */
       case 62 : /* fall through */
-      case 63 : itype = THUMB_INSN_SUBI8; entire_insn = base_insn >> 16; thumb_extract_sfmt_addi8 (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 63 : itype = THUMB_INSN_SUBI8; thumb_extract_sfmt_addi8 (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 64 :
         {
           unsigned int val = (((insn >> 6) & (3 << 0)));
           switch (val)
           {
-          case 0 : itype = THUMB_INSN_ALU_AND; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 1 : itype = THUMB_INSN_ALU_EOR; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 2 : itype = THUMB_INSN_ALU_LSL; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 3 : itype = THUMB_INSN_ALU_LSR; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 0 : itype = THUMB_INSN_ALU_AND; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_ALU_EOR; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 2 : itype = THUMB_INSN_ALU_LSL; thumb_extract_sfmt_alu_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 3 : itype = THUMB_INSN_ALU_LSR; thumb_extract_sfmt_alu_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
@@ -354,10 +354,10 @@
           unsigned int val = (((insn >> 6) & (3 << 0)));
           switch (val)
           {
-          case 0 : itype = THUMB_INSN_ALU_ASR; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 1 : itype = THUMB_INSN_ALU_ADC; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_adc (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 2 : itype = THUMB_INSN_ALU_SBC; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_adc (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 3 : itype = THUMB_INSN_ALU_ROR; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 0 : itype = THUMB_INSN_ALU_ASR; thumb_extract_sfmt_alu_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_ALU_ADC; thumb_extract_sfmt_alu_adc (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 2 : itype = THUMB_INSN_ALU_SBC; thumb_extract_sfmt_alu_adc (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 3 : itype = THUMB_INSN_ALU_ROR; thumb_extract_sfmt_alu_lsl (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
@@ -366,10 +366,10 @@
           unsigned int val = (((insn >> 6) & (3 << 0)));
           switch (val)
           {
-          case 0 : itype = THUMB_INSN_ALU_TST; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_tst (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 1 : itype = THUMB_INSN_ALU_NEG; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_neg (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 2 : itype = THUMB_INSN_ALU_CMP; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_cmp (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 3 : itype = THUMB_INSN_ALU_CMN; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_cmp (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 0 : itype = THUMB_INSN_ALU_TST; thumb_extract_sfmt_alu_tst (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_ALU_NEG; thumb_extract_sfmt_alu_neg (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 2 : itype = THUMB_INSN_ALU_CMP; thumb_extract_sfmt_alu_cmp (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 3 : itype = THUMB_INSN_ALU_CMN; thumb_extract_sfmt_alu_cmp (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
@@ -378,10 +378,10 @@
           unsigned int val = (((insn >> 6) & (3 << 0)));
           switch (val)
           {
-          case 0 : itype = THUMB_INSN_ALU_ORR; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 1 : itype = THUMB_INSN_ALU_MUL; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 2 : itype = THUMB_INSN_ALU_BIC; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 3 : itype = THUMB_INSN_ALU_MVN; entire_insn = base_insn >> 16; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 0 : itype = THUMB_INSN_ALU_ORR; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_ALU_MUL; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 2 : itype = THUMB_INSN_ALU_BIC; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 3 : itype = THUMB_INSN_ALU_MVN; thumb_extract_sfmt_alu_and (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
@@ -390,9 +390,9 @@
           unsigned int val = (((insn >> 6) & (3 << 0)));
           switch (val)
           {
-          case 1 : itype = THUMB_INSN_ADD_RD_HS; entire_insn = base_insn >> 16; thumb_extract_sfmt_add_rd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 2 : itype = THUMB_INSN_ADD_HD_RS; entire_insn = base_insn >> 16; thumb_extract_sfmt_add_hd_rs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 3 : itype = THUMB_INSN_ADD_HD_HS; entire_insn = base_insn >> 16; thumb_extract_sfmt_add_hd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_ADD_RD_HS; thumb_extract_sfmt_add_rd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 2 : itype = THUMB_INSN_ADD_HD_RS; thumb_extract_sfmt_add_hd_rs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 3 : itype = THUMB_INSN_ADD_HD_HS; thumb_extract_sfmt_add_hd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
@@ -401,9 +401,9 @@
           unsigned int val = (((insn >> 6) & (3 << 0)));
           switch (val)
           {
-          case 1 : itype = THUMB_INSN_CMP_RD_HS; entire_insn = base_insn >> 16; thumb_extract_sfmt_cmp_rd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 2 : itype = THUMB_INSN_CMP_HD_RS; entire_insn = base_insn >> 16; thumb_extract_sfmt_cmp_hd_rs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 3 : itype = THUMB_INSN_CMP_HD_HS; entire_insn = base_insn >> 16; thumb_extract_sfmt_cmp_hd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_CMP_RD_HS; thumb_extract_sfmt_cmp_rd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 2 : itype = THUMB_INSN_CMP_HD_RS; thumb_extract_sfmt_cmp_hd_rs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 3 : itype = THUMB_INSN_CMP_HD_HS; thumb_extract_sfmt_cmp_hd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
@@ -412,9 +412,9 @@
           unsigned int val = (((insn >> 6) & (3 << 0)));
           switch (val)
           {
-          case 1 : itype = THUMB_INSN_MOV_RD_HS; entire_insn = base_insn >> 16; thumb_extract_sfmt_mov_rd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 2 : itype = THUMB_INSN_MOV_HD_RS; entire_insn = base_insn >> 16; thumb_extract_sfmt_mov_hd_rs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 3 : itype = THUMB_INSN_MOV_HD_HS; entire_insn = base_insn >> 16; thumb_extract_sfmt_mov_hd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_MOV_RD_HS; thumb_extract_sfmt_mov_rd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 2 : itype = THUMB_INSN_MOV_HD_RS; thumb_extract_sfmt_mov_hd_rs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 3 : itype = THUMB_INSN_MOV_HD_HS; thumb_extract_sfmt_mov_hd_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
@@ -423,8 +423,8 @@
           unsigned int val = (((insn >> 6) & (1 << 0)));
           switch (val)
           {
-          case 0 : itype = THUMB_INSN_BX_RS; entire_insn = base_insn >> 16; thumb_extract_sfmt_bx_rs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 1 : itype = THUMB_INSN_BX_HS; entire_insn = base_insn >> 16; thumb_extract_sfmt_bx_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 0 : itype = THUMB_INSN_BX_RS; thumb_extract_sfmt_bx_rs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_BX_HS; thumb_extract_sfmt_bx_hs (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
@@ -435,23 +435,23 @@
       case 76 : /* fall through */
       case 77 : /* fall through */
       case 78 : /* fall through */
-      case 79 : itype = THUMB_INSN_LDR_PC; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldr_pc (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 79 : itype = THUMB_INSN_LDR_PC; thumb_extract_sfmt_ldr_pc (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 80 : /* fall through */
-      case 81 : itype = THUMB_INSN_STR; entire_insn = base_insn >> 16; thumb_extract_sfmt_str (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 81 : itype = THUMB_INSN_STR; thumb_extract_sfmt_str (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 82 : /* fall through */
-      case 83 : itype = THUMB_INSN_STRH; entire_insn = base_insn >> 16; thumb_extract_sfmt_strh (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 83 : itype = THUMB_INSN_STRH; thumb_extract_sfmt_strh (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 84 : /* fall through */
-      case 85 : itype = THUMB_INSN_STRB; entire_insn = base_insn >> 16; thumb_extract_sfmt_strb (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 85 : itype = THUMB_INSN_STRB; thumb_extract_sfmt_strb (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 86 : /* fall through */
-      case 87 : itype = THUMB_INSN_LDSB; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldrb (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 87 : itype = THUMB_INSN_LDSB; thumb_extract_sfmt_ldrb (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 88 : /* fall through */
-      case 89 : itype = THUMB_INSN_LDR; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldr (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 89 : itype = THUMB_INSN_LDR; thumb_extract_sfmt_ldr (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 90 : /* fall through */
-      case 91 : itype = THUMB_INSN_LDRH; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldrh (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 91 : itype = THUMB_INSN_LDRH; thumb_extract_sfmt_ldrh (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 92 : /* fall through */
-      case 93 : itype = THUMB_INSN_LDRB; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldrb (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 93 : itype = THUMB_INSN_LDRB; thumb_extract_sfmt_ldrb (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 94 : /* fall through */
-      case 95 : itype = THUMB_INSN_LDSH; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldrh (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 95 : itype = THUMB_INSN_LDSH; thumb_extract_sfmt_ldrh (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 96 : /* fall through */
       case 97 : /* fall through */
       case 98 : /* fall through */
@@ -459,7 +459,7 @@
       case 100 : /* fall through */
       case 101 : /* fall through */
       case 102 : /* fall through */
-      case 103 : itype = THUMB_INSN_STR_IMM; entire_insn = base_insn >> 16; thumb_extract_sfmt_str_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 103 : itype = THUMB_INSN_STR_IMM; thumb_extract_sfmt_str_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 104 : /* fall through */
       case 105 : /* fall through */
       case 106 : /* fall through */
@@ -467,7 +467,7 @@
       case 108 : /* fall through */
       case 109 : /* fall through */
       case 110 : /* fall through */
-      case 111 : itype = THUMB_INSN_LDR_IMM; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldr_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 111 : itype = THUMB_INSN_LDR_IMM; thumb_extract_sfmt_ldr_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 112 : /* fall through */
       case 113 : /* fall through */
       case 114 : /* fall through */
@@ -475,7 +475,7 @@
       case 116 : /* fall through */
       case 117 : /* fall through */
       case 118 : /* fall through */
-      case 119 : itype = THUMB_INSN_STRB_IMM; entire_insn = base_insn >> 16; thumb_extract_sfmt_strb_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 119 : itype = THUMB_INSN_STRB_IMM; thumb_extract_sfmt_strb_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 120 : /* fall through */
       case 121 : /* fall through */
       case 122 : /* fall through */
@@ -483,7 +483,7 @@
       case 124 : /* fall through */
       case 125 : /* fall through */
       case 126 : /* fall through */
-      case 127 : itype = THUMB_INSN_LDRB_IMM; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldrb_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 127 : itype = THUMB_INSN_LDRB_IMM; thumb_extract_sfmt_ldrb_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 128 : /* fall through */
       case 129 : /* fall through */
       case 130 : /* fall through */
@@ -491,7 +491,7 @@
       case 132 : /* fall through */
       case 133 : /* fall through */
       case 134 : /* fall through */
-      case 135 : itype = THUMB_INSN_STRH_IMM; entire_insn = base_insn >> 16; thumb_extract_sfmt_strh_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 135 : itype = THUMB_INSN_STRH_IMM; thumb_extract_sfmt_strh_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 136 : /* fall through */
       case 137 : /* fall through */
       case 138 : /* fall through */
@@ -499,7 +499,7 @@
       case 140 : /* fall through */
       case 141 : /* fall through */
       case 142 : /* fall through */
-      case 143 : itype = THUMB_INSN_LDRH_IMM; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldrh_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 143 : itype = THUMB_INSN_LDRH_IMM; thumb_extract_sfmt_ldrh_imm (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 144 : /* fall through */
       case 145 : /* fall through */
       case 146 : /* fall through */
@@ -507,7 +507,7 @@
       case 148 : /* fall through */
       case 149 : /* fall through */
       case 150 : /* fall through */
-      case 151 : itype = THUMB_INSN_STR_SPREL; entire_insn = base_insn >> 16; thumb_extract_sfmt_str_sprel (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 151 : itype = THUMB_INSN_STR_SPREL; thumb_extract_sfmt_str_sprel (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 152 : /* fall through */
       case 153 : /* fall through */
       case 154 : /* fall through */
@@ -515,7 +515,7 @@
       case 156 : /* fall through */
       case 157 : /* fall through */
       case 158 : /* fall through */
-      case 159 : itype = THUMB_INSN_LDR_SPREL; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldr_sprel (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 159 : itype = THUMB_INSN_LDR_SPREL; thumb_extract_sfmt_ldr_sprel (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 160 : /* fall through */
       case 161 : /* fall through */
       case 162 : /* fall through */
@@ -523,7 +523,7 @@
       case 164 : /* fall through */
       case 165 : /* fall through */
       case 166 : /* fall through */
-      case 167 : itype = THUMB_INSN_LDA_PC; entire_insn = base_insn >> 16; thumb_extract_sfmt_lda_pc (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 167 : itype = THUMB_INSN_LDA_PC; thumb_extract_sfmt_lda_pc (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 168 : /* fall through */
       case 169 : /* fall through */
       case 170 : /* fall through */
@@ -531,21 +531,21 @@
       case 172 : /* fall through */
       case 173 : /* fall through */
       case 174 : /* fall through */
-      case 175 : itype = THUMB_INSN_LDA_SP; entire_insn = base_insn >> 16; thumb_extract_sfmt_lda_sp (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 175 : itype = THUMB_INSN_LDA_SP; thumb_extract_sfmt_lda_sp (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 176 :
         {
           unsigned int val = (((insn >> 7) & (1 << 0)));
           switch (val)
           {
-          case 0 : itype = THUMB_INSN_ADD_SP; entire_insn = base_insn >> 16; thumb_extract_sfmt_add_sp (this, current_cpu, pc, base_insn, entire_insn); goto done;
-          case 1 : itype = THUMB_INSN_SUB_SP; entire_insn = base_insn >> 16; thumb_extract_sfmt_add_sp (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 0 : itype = THUMB_INSN_ADD_SP; thumb_extract_sfmt_add_sp (this, current_cpu, pc, base_insn, entire_insn); goto done;
+          case 1 : itype = THUMB_INSN_SUB_SP; thumb_extract_sfmt_add_sp (this, current_cpu, pc, base_insn, entire_insn); goto done;
           default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
           }
         }
-      case 180 : itype = THUMB_INSN_PUSH; entire_insn = base_insn >> 16; thumb_extract_sfmt_push (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 181 : itype = THUMB_INSN_PUSH_LR; entire_insn = base_insn >> 16; thumb_extract_sfmt_push_lr (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 188 : itype = THUMB_INSN_POP; entire_insn = base_insn >> 16; thumb_extract_sfmt_pop (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 189 : itype = THUMB_INSN_POP_PC; entire_insn = base_insn >> 16; thumb_extract_sfmt_pop_pc (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 180 : itype = THUMB_INSN_PUSH; thumb_extract_sfmt_push (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 181 : itype = THUMB_INSN_PUSH_LR; thumb_extract_sfmt_push_lr (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 188 : itype = THUMB_INSN_POP; thumb_extract_sfmt_pop (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 189 : itype = THUMB_INSN_POP_PC; thumb_extract_sfmt_pop_pc (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 192 : /* fall through */
       case 193 : /* fall through */
       case 194 : /* fall through */
@@ -553,7 +553,7 @@
       case 196 : /* fall through */
       case 197 : /* fall through */
       case 198 : /* fall through */
-      case 199 : itype = THUMB_INSN_STMIA; entire_insn = base_insn >> 16; thumb_extract_sfmt_stmia (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 199 : itype = THUMB_INSN_STMIA; thumb_extract_sfmt_stmia (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 200 : /* fall through */
       case 201 : /* fall through */
       case 202 : /* fall through */
@@ -561,22 +561,22 @@
       case 204 : /* fall through */
       case 205 : /* fall through */
       case 206 : /* fall through */
-      case 207 : itype = THUMB_INSN_LDMIA; entire_insn = base_insn >> 16; thumb_extract_sfmt_ldmia (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 208 : itype = THUMB_INSN_BEQ; entire_insn = base_insn >> 16; thumb_extract_sfmt_beq (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 209 : itype = THUMB_INSN_BNE; entire_insn = base_insn >> 16; thumb_extract_sfmt_beq (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 210 : itype = THUMB_INSN_BCS; entire_insn = base_insn >> 16; thumb_extract_sfmt_bcs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 211 : itype = THUMB_INSN_BCC; entire_insn = base_insn >> 16; thumb_extract_sfmt_bcs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 212 : itype = THUMB_INSN_BMI; entire_insn = base_insn >> 16; thumb_extract_sfmt_bmi (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 213 : itype = THUMB_INSN_BPL; entire_insn = base_insn >> 16; thumb_extract_sfmt_bmi (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 214 : itype = THUMB_INSN_BVS; entire_insn = base_insn >> 16; thumb_extract_sfmt_bvs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 215 : itype = THUMB_INSN_BVC; entire_insn = base_insn >> 16; thumb_extract_sfmt_bvs (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 216 : itype = THUMB_INSN_BHI; entire_insn = base_insn >> 16; thumb_extract_sfmt_bhi (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 217 : itype = THUMB_INSN_BLS; entire_insn = base_insn >> 16; thumb_extract_sfmt_bhi (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 218 : itype = THUMB_INSN_BGE; entire_insn = base_insn >> 16; thumb_extract_sfmt_bge (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 219 : itype = THUMB_INSN_BLT; entire_insn = base_insn >> 16; thumb_extract_sfmt_bge (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 220 : itype = THUMB_INSN_BGT; entire_insn = base_insn >> 16; thumb_extract_sfmt_bgt (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 221 : itype = THUMB_INSN_BLE; entire_insn = base_insn >> 16; thumb_extract_sfmt_bgt (this, current_cpu, pc, base_insn, entire_insn); goto done;
-      case 223 : itype = THUMB_INSN_SWI; entire_insn = base_insn >> 16; thumb_extract_sfmt_swi (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 207 : itype = THUMB_INSN_LDMIA; thumb_extract_sfmt_ldmia (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 208 : itype = THUMB_INSN_BEQ; thumb_extract_sfmt_beq (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 209 : itype = THUMB_INSN_BNE; thumb_extract_sfmt_beq (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 210 : itype = THUMB_INSN_BCS; thumb_extract_sfmt_bcs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 211 : itype = THUMB_INSN_BCC; thumb_extract_sfmt_bcs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 212 : itype = THUMB_INSN_BMI; thumb_extract_sfmt_bmi (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 213 : itype = THUMB_INSN_BPL; thumb_extract_sfmt_bmi (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 214 : itype = THUMB_INSN_BVS; thumb_extract_sfmt_bvs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 215 : itype = THUMB_INSN_BVC; thumb_extract_sfmt_bvs (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 216 : itype = THUMB_INSN_BHI; thumb_extract_sfmt_bhi (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 217 : itype = THUMB_INSN_BLS; thumb_extract_sfmt_bhi (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 218 : itype = THUMB_INSN_BGE; thumb_extract_sfmt_bge (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 219 : itype = THUMB_INSN_BLT; thumb_extract_sfmt_bge (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 220 : itype = THUMB_INSN_BGT; thumb_extract_sfmt_bgt (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 221 : itype = THUMB_INSN_BLE; thumb_extract_sfmt_bgt (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 223 : itype = THUMB_INSN_SWI; thumb_extract_sfmt_swi (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 224 : /* fall through */
       case 225 : /* fall through */
       case 226 : /* fall through */
@@ -584,7 +584,7 @@
       case 228 : /* fall through */
       case 229 : /* fall through */
       case 230 : /* fall through */
-      case 231 : itype = THUMB_INSN_B; entire_insn = base_insn >> 16; thumb_extract_sfmt_b (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 231 : itype = THUMB_INSN_B; thumb_extract_sfmt_b (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 240 : /* fall through */
       case 241 : /* fall through */
       case 242 : /* fall through */
@@ -592,7 +592,7 @@
       case 244 : /* fall through */
       case 245 : /* fall through */
       case 246 : /* fall through */
-      case 247 : itype = THUMB_INSN_BL_HI; entire_insn = base_insn >> 16; thumb_extract_sfmt_bl_hi (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 247 : itype = THUMB_INSN_BL_HI; thumb_extract_sfmt_bl_hi (this, current_cpu, pc, base_insn, entire_insn); goto done;
       case 248 : /* fall through */
       case 249 : /* fall through */
       case 250 : /* fall through */
@@ -600,7 +600,7 @@
       case 252 : /* fall through */
       case 253 : /* fall through */
       case 254 : /* fall through */
-      case 255 : itype = THUMB_INSN_BL_LO; entire_insn = base_insn >> 16; thumb_extract_sfmt_bl_lo (this, current_cpu, pc, base_insn, entire_insn); goto done;
+      case 255 : itype = THUMB_INSN_BL_LO; thumb_extract_sfmt_bl_lo (this, current_cpu, pc, base_insn, entire_insn); goto done;
       default : itype = THUMB_INSN_X_INVALID; thumb_extract_sfmt_empty (this, current_cpu, pc, base_insn, entire_insn);  goto done;
       }
     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.