<p>Elyes HAOUAS has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/26363">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">device/oprom/x86emu/decode.c: Fix coding style<br><br>Change-Id: Ib0d74d396193ec673972639ecd9d9fd7f7cf3f01<br>Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr><br>---<br>M src/device/oprom/x86emu/decode.c<br>1 file changed, 602 insertions(+), 633 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/63/26363/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/device/oprom/x86emu/decode.c b/src/device/oprom/x86emu/decode.c</span><br><span>index b7a6f35..6f7b1e0 100644</span><br><span>--- a/src/device/oprom/x86emu/decode.c</span><br><span>+++ b/src/device/oprom/x86emu/decode.c</span><br><span>@@ -1,10 +1,10 @@</span><br><span> /****************************************************************************</span><br><span> *</span><br><span style="color: hsl(0, 100%, 40%);">-*                       Realmode X86 Emulator Library</span><br><span style="color: hsl(120, 100%, 40%);">+*                   Realmode X86 Emulator Library</span><br><span> *</span><br><span style="color: hsl(0, 100%, 40%);">-*               Copyright (C) 1991-2004 SciTech Software, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">-*                    Copyright (C) David Mosberger-Tang</span><br><span style="color: hsl(0, 100%, 40%);">-*                      Copyright (C) 1999 Egbert Eich</span><br><span style="color: hsl(120, 100%, 40%);">+*         Copyright (C) 1991-2004 SciTech Software, Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+*               Copyright (C) David Mosberger-Tang</span><br><span style="color: hsl(120, 100%, 40%);">+*           Copyright (C) 1999 Egbert Eich</span><br><span> *</span><br><span> *  ========================================================================</span><br><span> *</span><br><span>@@ -28,12 +28,12 @@</span><br><span> *</span><br><span> *  ========================================================================</span><br><span> *</span><br><span style="color: hsl(0, 100%, 40%);">-* Language:     ANSI C</span><br><span style="color: hsl(0, 100%, 40%);">-* Environment:  Any</span><br><span style="color: hsl(0, 100%, 40%);">-* Developer:    Kendall Bennett</span><br><span style="color: hsl(120, 100%, 40%);">+* Language:     ANSI C</span><br><span style="color: hsl(120, 100%, 40%);">+* Environment:  Any</span><br><span style="color: hsl(120, 100%, 40%);">+* Developer:       Kendall Bennett</span><br><span> *</span><br><span style="color: hsl(0, 100%, 40%);">-* Description:  This file includes subroutines which are related to</span><br><span style="color: hsl(0, 100%, 40%);">-*               instruction decoding and accesses of immediate data via IP.  etc.</span><br><span style="color: hsl(120, 100%, 40%);">+* Description:        This file includes subroutines which are related to</span><br><span style="color: hsl(120, 100%, 40%);">+*          instruction decoding and accesses of immediate data via IP.  etc.</span><br><span> *</span><br><span> ****************************************************************************/</span><br><span> </span><br><span>@@ -47,23 +47,23 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emu_intr_handle(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u8  intno;</span><br><span style="color: hsl(120, 100%, 40%);">+ u8 intno;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.intr & INTR_SYNCH) {</span><br><span style="color: hsl(0, 100%, 40%);">-        intno = M.x86.intno;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (_X86EMU_intrTab[intno]) {</span><br><span style="color: hsl(0, 100%, 40%);">-            (*_X86EMU_intrTab[intno])(intno);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            push_word((u16)M.x86.R_FLG);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_IF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_TF);</span><br><span style="color: hsl(0, 100%, 40%);">-            push_word(M.x86.R_CS);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.R_CS = mem_access_word(intno * 4 + 2);</span><br><span style="color: hsl(0, 100%, 40%);">-            push_word(M.x86.R_IP);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.R_IP = mem_access_word(intno * 4);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.intr = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+  if (M.x86.intr & INTR_SYNCH) {</span><br><span style="color: hsl(120, 100%, 40%);">+            intno = M.x86.intno;</span><br><span style="color: hsl(120, 100%, 40%);">+          if (_X86EMU_intrTab[intno]) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 (*_X86EMU_intrTab[intno]) (intno);</span><br><span style="color: hsl(120, 100%, 40%);">+            } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      push_word((u16) M.x86.R_FLG);</span><br><span style="color: hsl(120, 100%, 40%);">+                 CLEAR_FLAG(F_IF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     CLEAR_FLAG(F_TF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     push_word(M.x86.R_CS);</span><br><span style="color: hsl(120, 100%, 40%);">+                        M.x86.R_CS = mem_access_word(intno * 4 + 2);</span><br><span style="color: hsl(120, 100%, 40%);">+                  push_word(M.x86.R_IP);</span><br><span style="color: hsl(120, 100%, 40%);">+                        M.x86.R_IP = mem_access_word(intno * 4);</span><br><span style="color: hsl(120, 100%, 40%);">+                      M.x86.intr = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -74,13 +74,12 @@</span><br><span> Raise the specified interrupt to be handled before the execution of the</span><br><span> next instruction.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void x86emu_intr_raise(</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 intrnum)</span><br><span style="color: hsl(120, 100%, 40%);">+void x86emu_intr_raise(u8 intrnum)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    printf("%s, raising exception %x\n", __func__, intrnum);</span><br><span style="color: hsl(0, 100%, 40%);">-    x86emu_dump_regs();</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.intno = intrnum;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.intr |= INTR_SYNCH;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("%s, raising exception %x\n", __func__, intrnum);</span><br><span style="color: hsl(120, 100%, 40%);">+    x86emu_dump_regs();</span><br><span style="color: hsl(120, 100%, 40%);">+   M.x86.intno = intrnum;</span><br><span style="color: hsl(120, 100%, 40%);">+        M.x86.intr |= INTR_SYNCH;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -91,41 +90,42 @@</span><br><span> ****************************************************************************/</span><br><span> void X86EMU_exec(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 op1;</span><br><span style="color: hsl(120, 100%, 40%);">+  u8 op1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.intr = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-    DB(x86emu_end_instr();)</span><br><span style="color: hsl(120, 100%, 40%);">+     M.x86.intr = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       DB(x86emu_end_instr();</span><br><span style="color: hsl(120, 100%, 40%);">+            )</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    for (;;) {</span><br><span style="color: hsl(0, 100%, 40%);">-DB(     if (CHECK_IP_FETCH())</span><br><span style="color: hsl(0, 100%, 40%);">-            x86emu_check_ip_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-        /* If debugging, save the IP and CS values. */</span><br><span style="color: hsl(0, 100%, 40%);">-        SAVE_IP_CS(M.x86.R_CS, M.x86.R_IP);</span><br><span style="color: hsl(0, 100%, 40%);">-        INC_DECODED_INST_LEN(1);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.intr) {</span><br><span style="color: hsl(0, 100%, 40%);">-            if (M.x86.intr & INTR_HALTED) {</span><br><span style="color: hsl(0, 100%, 40%);">-DB(             if (M.x86.R_SP != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    printf("halted\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                    X86EMU_trace_regs();</span><br><span style="color: hsl(0, 100%, 40%);">-                    }</span><br><span style="color: hsl(0, 100%, 40%);">-                else {</span><br><span style="color: hsl(0, 100%, 40%);">-                    if (M.x86.debug)</span><br><span style="color: hsl(0, 100%, 40%);">-                        printf("Service completed successfully\n");</span><br><span style="color: hsl(0, 100%, 40%);">-                    })</span><br><span style="color: hsl(0, 100%, 40%);">-                return;</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-            if (((M.x86.intr & INTR_SYNCH) && (M.x86.intno == 0 || M.x86.intno == 2)) ||</span><br><span style="color: hsl(0, 100%, 40%);">-                !ACCESS_FLAG(F_IF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                x86emu_intr_handle();</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        op1 = (*sys_rdb)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP++));</span><br><span style="color: hsl(0, 100%, 40%);">-        (*x86emu_optab[op1])(op1);</span><br><span style="color: hsl(0, 100%, 40%);">-        //if (M.x86.debug & DEBUG_EXIT) {</span><br><span style="color: hsl(0, 100%, 40%);">-        //    M.x86.debug &= ~DEBUG_EXIT;</span><br><span style="color: hsl(0, 100%, 40%);">-        //    return;</span><br><span style="color: hsl(0, 100%, 40%);">-        //}</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+ for (;;) {</span><br><span style="color: hsl(120, 100%, 40%);">+            DB(if (CHECK_IP_FETCH())</span><br><span style="color: hsl(120, 100%, 40%);">+                 x86emu_check_ip_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* If debugging, save the IP and CS values. */</span><br><span style="color: hsl(120, 100%, 40%);">+                        SAVE_IP_CS(M.x86.R_CS, M.x86.R_IP);</span><br><span style="color: hsl(120, 100%, 40%);">+           INC_DECODED_INST_LEN(1);</span><br><span style="color: hsl(120, 100%, 40%);">+              if (M.x86.intr) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (M.x86.intr & INTR_HALTED) {</span><br><span style="color: hsl(120, 100%, 40%);">+                           DB(if (M.x86.R_SP != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                      printf("halted\n"); X86EMU_trace_regs();</span><br><span style="color: hsl(120, 100%, 40%);">+                              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                                    if (M.x86.debug)</span><br><span style="color: hsl(120, 100%, 40%);">+                                             printf("Service completed successfully\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                            }</span><br><span style="color: hsl(120, 100%, 40%);">+                            )</span><br><span style="color: hsl(120, 100%, 40%);">+                           return;</span><br><span style="color: hsl(120, 100%, 40%);">+                       }</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (((M.x86.intr & INTR_SYNCH)</span><br><span style="color: hsl(120, 100%, 40%);">+                         && (M.x86.intno == 0 || M.x86.intno == 2))</span><br><span style="color: hsl(120, 100%, 40%);">+                           || !ACCESS_FLAG(F_IF)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                          x86emu_intr_handle();</span><br><span style="color: hsl(120, 100%, 40%);">+                 }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+             op1 = (*sys_rdb) (((u32) M.x86.R_CS << 4) + (M.x86.R_IP++));</span><br><span style="color: hsl(120, 100%, 40%);">+            (*x86emu_optab[op1]) (op1);</span><br><span style="color: hsl(120, 100%, 40%);">+           //if (M.x86.debug & DEBUG_EXIT) {</span><br><span style="color: hsl(120, 100%, 40%);">+         //    M.x86.debug &= ~DEBUG_EXIT;</span><br><span style="color: hsl(120, 100%, 40%);">+         //    return;</span><br><span style="color: hsl(120, 100%, 40%);">+         //}</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -134,7 +134,7 @@</span><br><span> ****************************************************************************/</span><br><span> void X86EMU_halt_sys(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.intr |= INTR_HALTED;</span><br><span style="color: hsl(120, 100%, 40%);">+   M.x86.intr |= INTR_HALTED;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -149,20 +149,17 @@</span><br><span> </span><br><span> NOTE: Do not inline this function, as (*sys_rdb) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void fetch_decode_modrm(</span><br><span style="color: hsl(0, 100%, 40%);">-    int *mod,</span><br><span style="color: hsl(0, 100%, 40%);">-    int *regh,</span><br><span style="color: hsl(0, 100%, 40%);">-    int *regl)</span><br><span style="color: hsl(120, 100%, 40%);">+void fetch_decode_modrm(int *mod, int *regh, int *regl)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int fetched;</span><br><span style="color: hsl(120, 100%, 40%);">+       int fetched;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_IP_FETCH())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_ip_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-    fetched = (*sys_rdb)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP++));</span><br><span style="color: hsl(0, 100%, 40%);">-    INC_DECODED_INST_LEN(1);</span><br><span style="color: hsl(0, 100%, 40%);">-    *mod  = (fetched >> 6) & 0x03;</span><br><span style="color: hsl(0, 100%, 40%);">-    *regh = (fetched >> 3) & 0x07;</span><br><span style="color: hsl(0, 100%, 40%);">-    *regl = (fetched >> 0) & 0x07;</span><br><span style="color: hsl(120, 100%, 40%);">+   DB(if (CHECK_IP_FETCH())</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_check_ip_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+         fetched = (*sys_rdb) (((u32) M.x86.R_CS << 4) + (M.x86.R_IP++));</span><br><span style="color: hsl(120, 100%, 40%);">+        INC_DECODED_INST_LEN(1);</span><br><span style="color: hsl(120, 100%, 40%);">+      *mod = (fetched >> 6) & 0x03;</span><br><span style="color: hsl(120, 100%, 40%);">+       *regh = (fetched >> 3) & 0x07;</span><br><span style="color: hsl(120, 100%, 40%);">+      *regl = (fetched >> 0) & 0x07;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -177,13 +174,13 @@</span><br><span> ****************************************************************************/</span><br><span> u8 fetch_byte_imm(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 fetched;</span><br><span style="color: hsl(120, 100%, 40%);">+    u8 fetched;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_IP_FETCH())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_ip_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-    fetched = (*sys_rdb)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP++));</span><br><span style="color: hsl(0, 100%, 40%);">-    INC_DECODED_INST_LEN(1);</span><br><span style="color: hsl(0, 100%, 40%);">-    return fetched;</span><br><span style="color: hsl(120, 100%, 40%);">+     DB(if (CHECK_IP_FETCH())</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_check_ip_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+         fetched = (*sys_rdb) (((u32) M.x86.R_CS << 4) + (M.x86.R_IP++));</span><br><span style="color: hsl(120, 100%, 40%);">+        INC_DECODED_INST_LEN(1);</span><br><span style="color: hsl(120, 100%, 40%);">+      return fetched;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -198,14 +195,14 @@</span><br><span> ****************************************************************************/</span><br><span> u16 fetch_word_imm(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 fetched;</span><br><span style="color: hsl(120, 100%, 40%);">+   u16 fetched;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_IP_FETCH())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_ip_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-    fetched = (*sys_rdw)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP));</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_IP += 2;</span><br><span style="color: hsl(0, 100%, 40%);">-    INC_DECODED_INST_LEN(2);</span><br><span style="color: hsl(0, 100%, 40%);">-    return fetched;</span><br><span style="color: hsl(120, 100%, 40%);">+  DB(if (CHECK_IP_FETCH())</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_check_ip_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+         fetched = (*sys_rdw) (((u32) M.x86.R_CS << 4) + (M.x86.R_IP));</span><br><span style="color: hsl(120, 100%, 40%);">+  M.x86.R_IP += 2;</span><br><span style="color: hsl(120, 100%, 40%);">+      INC_DECODED_INST_LEN(2);</span><br><span style="color: hsl(120, 100%, 40%);">+      return fetched;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -220,14 +217,14 @@</span><br><span> ****************************************************************************/</span><br><span> u32 fetch_long_imm(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 fetched;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 fetched;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_IP_FETCH())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_ip_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-    fetched = (*sys_rdl)(((u32)M.x86.R_CS << 4) + (M.x86.R_IP));</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_IP += 4;</span><br><span style="color: hsl(0, 100%, 40%);">-    INC_DECODED_INST_LEN(4);</span><br><span style="color: hsl(0, 100%, 40%);">-    return fetched;</span><br><span style="color: hsl(120, 100%, 40%);">+  DB(if (CHECK_IP_FETCH())</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_check_ip_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+         fetched = (*sys_rdl) (((u32) M.x86.R_CS << 4) + (M.x86.R_IP));</span><br><span style="color: hsl(120, 100%, 40%);">+  M.x86.R_IP += 4;</span><br><span style="color: hsl(120, 100%, 40%);">+      INC_DECODED_INST_LEN(4);</span><br><span style="color: hsl(120, 100%, 40%);">+      return fetched;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -262,35 +259,35 @@</span><br><span> _INLINE u32 get_data_segment(void)</span><br><span> {</span><br><span> #define GET_SEGMENT(segment)</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (M.x86.mode & SYSMODE_SEGMASK) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0:                   /* default case: use ds register */</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_DS:</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_DS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(0, 100%, 40%);">-        return  M.x86.R_DS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEG_DS_SS:   /* non-overridden, use ss register */</span><br><span style="color: hsl(0, 100%, 40%);">-        return  M.x86.R_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_CS:</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_CS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(0, 100%, 40%);">-        return  M.x86.R_CS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_ES:</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_ES | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(0, 100%, 40%);">-        return  M.x86.R_ES;</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_FS:</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_FS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(0, 100%, 40%);">-        return  M.x86.R_FS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_GS:</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_GS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(0, 100%, 40%);">-        return  M.x86.R_GS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_SS:</span><br><span style="color: hsl(0, 100%, 40%);">-      case SYSMODE_SEGOVR_SS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(0, 100%, 40%);">-        return  M.x86.R_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-      default:</span><br><span style="color: hsl(120, 100%, 40%);">+    switch (M.x86.mode & SYSMODE_SEGMASK) {</span><br><span style="color: hsl(120, 100%, 40%);">+   case 0:         /* default case: use ds register */</span><br><span style="color: hsl(120, 100%, 40%);">+   case SYSMODE_SEGOVR_DS:</span><br><span style="color: hsl(120, 100%, 40%);">+       case SYSMODE_SEGOVR_DS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(120, 100%, 40%);">+           return M.x86.R_DS;</span><br><span style="color: hsl(120, 100%, 40%);">+    case SYSMODE_SEG_DS_SS: /* non-overridden, use ss register */</span><br><span style="color: hsl(120, 100%, 40%);">+         return M.x86.R_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+    case SYSMODE_SEGOVR_CS:</span><br><span style="color: hsl(120, 100%, 40%);">+       case SYSMODE_SEGOVR_CS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(120, 100%, 40%);">+           return M.x86.R_CS;</span><br><span style="color: hsl(120, 100%, 40%);">+    case SYSMODE_SEGOVR_ES:</span><br><span style="color: hsl(120, 100%, 40%);">+       case SYSMODE_SEGOVR_ES | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(120, 100%, 40%);">+           return M.x86.R_ES;</span><br><span style="color: hsl(120, 100%, 40%);">+    case SYSMODE_SEGOVR_FS:</span><br><span style="color: hsl(120, 100%, 40%);">+       case SYSMODE_SEGOVR_FS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(120, 100%, 40%);">+           return M.x86.R_FS;</span><br><span style="color: hsl(120, 100%, 40%);">+    case SYSMODE_SEGOVR_GS:</span><br><span style="color: hsl(120, 100%, 40%);">+       case SYSMODE_SEGOVR_GS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(120, 100%, 40%);">+           return M.x86.R_GS;</span><br><span style="color: hsl(120, 100%, 40%);">+    case SYSMODE_SEGOVR_SS:</span><br><span style="color: hsl(120, 100%, 40%);">+       case SYSMODE_SEGOVR_SS | SYSMODE_SEG_DS_SS:</span><br><span style="color: hsl(120, 100%, 40%);">+           return M.x86.R_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+    default:</span><br><span> #ifdef  DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("error: should not happen:  multiple overrides.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                printf("error: should not happen:  multiple overrides.\n");</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-        HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-        return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+              HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+           return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -302,14 +299,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_rdX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u8 fetch_data_byte(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset)</span><br><span style="color: hsl(120, 100%, 40%);">+u8 fetch_data_byte(uint offset)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access((u16)get_data_segment(), offset);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access((u16) get_data_segment(), offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    return (*sys_rdb)((get_data_segment() << 4) + offset);</span><br><span style="color: hsl(120, 100%, 40%);">+ return (*sys_rdb) ((get_data_segment() << 4) + offset);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -321,14 +317,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_rdX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u16 fetch_data_word(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset)</span><br><span style="color: hsl(120, 100%, 40%);">+u16 fetch_data_word(uint offset)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access((u16)get_data_segment(), offset);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access((u16) get_data_segment(), offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    return (*sys_rdw)((get_data_segment() << 4) + offset);</span><br><span style="color: hsl(120, 100%, 40%);">+ return (*sys_rdw) ((get_data_segment() << 4) + offset);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -340,14 +335,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_rdX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u32 fetch_data_long(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset)</span><br><span style="color: hsl(120, 100%, 40%);">+u32 fetch_data_long(uint offset)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access((u16)get_data_segment(), offset);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access((u16) get_data_segment(), offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    return (*sys_rdl)((get_data_segment() << 4) + offset);</span><br><span style="color: hsl(120, 100%, 40%);">+ return (*sys_rdl) ((get_data_segment() << 4) + offset);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -360,15 +354,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_rdX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u8 fetch_data_byte_abs(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint segment,</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset)</span><br><span style="color: hsl(120, 100%, 40%);">+u8 fetch_data_byte_abs(uint segment, uint offset)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access(segment, offset);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access(segment, offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    return (*sys_rdb)(((u32)segment << 4) + offset);</span><br><span style="color: hsl(120, 100%, 40%);">+        return (*sys_rdb) (((u32) segment << 4) + offset);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -381,15 +373,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_rdX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u16 fetch_data_word_abs(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint segment,</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset)</span><br><span style="color: hsl(120, 100%, 40%);">+u16 fetch_data_word_abs(uint segment, uint offset)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access(segment, offset);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access(segment, offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    return (*sys_rdw)(((u32)segment << 4) + offset);</span><br><span style="color: hsl(120, 100%, 40%);">+        return (*sys_rdw) (((u32) segment << 4) + offset);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -402,15 +392,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_rdX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u32 fetch_data_long_abs(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint segment,</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset)</span><br><span style="color: hsl(120, 100%, 40%);">+u32 fetch_data_long_abs(uint segment, uint offset)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access(segment, offset);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access(segment, offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    return (*sys_rdl)(((u32)segment << 4) + offset);</span><br><span style="color: hsl(120, 100%, 40%);">+        return (*sys_rdl) (((u32) segment << 4) + offset);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -424,15 +412,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_wrX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void store_data_byte(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset,</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 val)</span><br><span style="color: hsl(120, 100%, 40%);">+void store_data_byte(uint offset, u8 val)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access((u16)get_data_segment(), offset);</span><br><span style="color: hsl(120, 100%, 40%);">+   if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access((u16) get_data_segment(), offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    (*sys_wrb)((get_data_segment() << 4) + offset, val);</span><br><span style="color: hsl(120, 100%, 40%);">+   (*sys_wrb) ((get_data_segment() << 4) + offset, val);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -446,15 +432,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_wrX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void store_data_word(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset,</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 val)</span><br><span style="color: hsl(120, 100%, 40%);">+void store_data_word(uint offset, u16 val)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access((u16)get_data_segment(), offset);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access((u16) get_data_segment(), offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    (*sys_wrw)((get_data_segment() << 4) + offset, val);</span><br><span style="color: hsl(120, 100%, 40%);">+   (*sys_wrw) ((get_data_segment() << 4) + offset, val);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -468,15 +452,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_wrX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void store_data_long(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset,</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 val)</span><br><span style="color: hsl(120, 100%, 40%);">+void store_data_long(uint offset, u32 val)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access((u16)get_data_segment(), offset);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access((u16) get_data_segment(), offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    (*sys_wrl)((get_data_segment() << 4) + offset, val);</span><br><span style="color: hsl(120, 100%, 40%);">+   (*sys_wrl) ((get_data_segment() << 4) + offset, val);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -490,16 +472,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_wrX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void store_data_byte_abs(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint segment,</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset,</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 val)</span><br><span style="color: hsl(120, 100%, 40%);">+void store_data_byte_abs(uint segment, uint offset, u8 val)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access(segment, offset);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access(segment, offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    (*sys_wrb)(((u32)segment << 4) + offset, val);</span><br><span style="color: hsl(120, 100%, 40%);">+  (*sys_wrb) (((u32) segment << 4) + offset, val);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -513,16 +492,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_wrX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void store_data_word_abs(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint segment,</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset,</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 val)</span><br><span style="color: hsl(120, 100%, 40%);">+void store_data_word_abs(uint segment, uint offset, u16 val)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access(segment, offset);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access(segment, offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    (*sys_wrw)(((u32)segment << 4) + offset, val);</span><br><span style="color: hsl(120, 100%, 40%);">+  (*sys_wrw) (((u32) segment << 4) + offset, val);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -536,16 +512,13 @@</span><br><span> </span><br><span> NOTE: Do not inline this function as (*sys_wrX) is already inline!</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void store_data_long_abs(</span><br><span style="color: hsl(0, 100%, 40%);">-    uint segment,</span><br><span style="color: hsl(0, 100%, 40%);">-    uint offset,</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 val)</span><br><span style="color: hsl(120, 100%, 40%);">+void store_data_long_abs(uint segment, uint offset, u32 val)</span><br><span> {</span><br><span> #ifdef DEBUG</span><br><span style="color: hsl(0, 100%, 40%);">-    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_check_data_access(segment, offset);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (CHECK_DATA_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+              x86emu_check_data_access(segment, offset);</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    (*sys_wrl)(((u32)segment << 4) + offset, val);</span><br><span style="color: hsl(120, 100%, 40%);">+  (*sys_wrl) (((u32) segment << 4) + offset, val);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -559,37 +532,36 @@</span><br><span> Return a pointer to the register given by the R/RM field of the</span><br><span> modrm byte, for byte operands. Also enables the decoding of instructions.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u8* decode_rm_byte_register(</span><br><span style="color: hsl(0, 100%, 40%);">-    int reg)</span><br><span style="color: hsl(120, 100%, 40%);">+u8 *decode_rm_byte_register(int reg)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (reg) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("AL");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_AL;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("CL");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_CL;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("DL");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_DL;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("BL");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_BL;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("AH");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_AH;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("CH");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_CH;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("DH");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_DH;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("BH");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_BH;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    return NULL;                /* NOT REACHED OR REACHED ON ERROR */</span><br><span style="color: hsl(120, 100%, 40%);">+       switch (reg) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("AL");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_AL;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("CL");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_CL;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("DL");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_DL;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("BL");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_BL;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("AH");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_AH;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("CH");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_CH;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("DH");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_DH;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("BH");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_BH;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   return NULL;            /* NOT REACHED OR REACHED ON ERROR */</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -603,37 +575,36 @@</span><br><span> Return a pointer to the register given by the R/RM field of the</span><br><span> modrm byte, for word operands.  Also enables the decoding of instructions.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u16* decode_rm_word_register(</span><br><span style="color: hsl(0, 100%, 40%);">-    int reg)</span><br><span style="color: hsl(120, 100%, 40%);">+u16 *decode_rm_word_register(int reg)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (reg) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("AX");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_AX;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("CX");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_CX;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("DX");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_DX;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("BX");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_BX;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("SP");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_SP;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("BP");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_BP;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("SI");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_SI;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("DI");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_DI;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    return NULL;                /* NOTREACHED OR REACHED ON ERROR */</span><br><span style="color: hsl(120, 100%, 40%);">+      switch (reg) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("AX");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_AX;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("CX");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_CX;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("DX");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_DX;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("BX");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_BX;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("SP");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_SP;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("BP");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_BP;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("SI");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_SI;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("DI");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_DI;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   return NULL;            /* NOTREACHED OR REACHED ON ERROR */</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -647,37 +618,36 @@</span><br><span> Return a pointer to the register given by the R/RM field of the</span><br><span> modrm byte, for dword operands.  Also enables the decoding of instructions.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u32* decode_rm_long_register(</span><br><span style="color: hsl(0, 100%, 40%);">-    int reg)</span><br><span style="color: hsl(120, 100%, 40%);">+u32 *decode_rm_long_register(int reg)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (reg) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EAX");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_EAX;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ECX");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_ECX;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EDX");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_EDX;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EBX");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_EBX;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ESP");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_ESP;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EBP");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_EBP;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ESI");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_ESI;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EDI");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_EDI;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    return NULL;                /* NOTREACHED OR REACHED ON ERROR */</span><br><span style="color: hsl(120, 100%, 40%);">+      switch (reg) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EAX");</span><br><span style="color: hsl(120, 100%, 40%);">+               return &M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+      case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("ECX");</span><br><span style="color: hsl(120, 100%, 40%);">+               return &M.x86.R_ECX;</span><br><span style="color: hsl(120, 100%, 40%);">+      case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EDX");</span><br><span style="color: hsl(120, 100%, 40%);">+               return &M.x86.R_EDX;</span><br><span style="color: hsl(120, 100%, 40%);">+      case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EBX");</span><br><span style="color: hsl(120, 100%, 40%);">+               return &M.x86.R_EBX;</span><br><span style="color: hsl(120, 100%, 40%);">+      case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("ESP");</span><br><span style="color: hsl(120, 100%, 40%);">+               return &M.x86.R_ESP;</span><br><span style="color: hsl(120, 100%, 40%);">+      case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EBP");</span><br><span style="color: hsl(120, 100%, 40%);">+               return &M.x86.R_EBP;</span><br><span style="color: hsl(120, 100%, 40%);">+      case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("ESI");</span><br><span style="color: hsl(120, 100%, 40%);">+               return &M.x86.R_ESI;</span><br><span style="color: hsl(120, 100%, 40%);">+      case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EDI");</span><br><span style="color: hsl(120, 100%, 40%);">+               return &M.x86.R_EDI;</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span style="color: hsl(120, 100%, 40%);">+     HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   return NULL;            /* NOTREACHED OR REACHED ON ERROR */</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -692,35 +662,34 @@</span><br><span> modrm byte, for word operands, modified from above for the weirdo</span><br><span> special case of segreg operands.  Also enables the decoding of instructions.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u16* decode_rm_seg_register(</span><br><span style="color: hsl(0, 100%, 40%);">-    int reg)</span><br><span style="color: hsl(120, 100%, 40%);">+u16 *decode_rm_seg_register(int reg)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (reg) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ES");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_ES;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("CS");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_CS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("SS");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("DS");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_DS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("FS");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_FS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("GS");</span><br><span style="color: hsl(0, 100%, 40%);">-        return &M.x86.R_GS;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-      case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ILLEGAL SEGREG");</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    return NULL;                /* NOT REACHED OR REACHED ON ERROR */</span><br><span style="color: hsl(120, 100%, 40%);">+      switch (reg) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("ES");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_ES;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("CS");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_CS;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("SS");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("DS");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_DS;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("FS");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_FS;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("GS");</span><br><span style="color: hsl(120, 100%, 40%);">+                return &M.x86.R_GS;</span><br><span style="color: hsl(120, 100%, 40%);">+       case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+       case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("ILLEGAL SEGREG");</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   return NULL;            /* NOT REACHED OR REACHED ON ERROR */</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -735,44 +704,41 @@</span><br><span> Decodes scale/index of SIB byte and returns relevant offset part of</span><br><span> effective address.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-static unsigned decode_sib_si(</span><br><span style="color: hsl(0, 100%, 40%);">-    int scale,</span><br><span style="color: hsl(0, 100%, 40%);">-    int index)</span><br><span style="color: hsl(120, 100%, 40%);">+static unsigned decode_sib_si(int scale, int index)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    scale = 1 << scale;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (scale > 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF2("[%d*", scale);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[");</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (index) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EAX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        return M.x86.R_EAX * index;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ECX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        return M.x86.R_ECX * index;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EDX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        return M.x86.R_EDX * index;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EBX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        return M.x86.R_EBX * index;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("0]");</span><br><span style="color: hsl(0, 100%, 40%);">-        return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EBP]");</span><br><span style="color: hsl(0, 100%, 40%);">-        return M.x86.R_EBP * index;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ESI]");</span><br><span style="color: hsl(0, 100%, 40%);">-        return M.x86.R_ESI * index;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EDI]");</span><br><span style="color: hsl(0, 100%, 40%);">-        return M.x86.R_EDI * index;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    return 0;                   /* NOT REACHED OR REACHED ON ERROR */</span><br><span style="color: hsl(120, 100%, 40%);">+  scale = 1 << scale;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (scale > 1)</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF2("[%d*", scale);</span><br><span style="color: hsl(120, 100%, 40%);">+      else</span><br><span style="color: hsl(120, 100%, 40%);">+          DECODE_PRINTF("[");</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (index) {</span><br><span style="color: hsl(120, 100%, 40%);">+      case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EAX]");</span><br><span style="color: hsl(120, 100%, 40%);">+              return M.x86.R_EAX * index;</span><br><span style="color: hsl(120, 100%, 40%);">+   case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("ECX]");</span><br><span style="color: hsl(120, 100%, 40%);">+              return M.x86.R_ECX * index;</span><br><span style="color: hsl(120, 100%, 40%);">+   case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EDX]");</span><br><span style="color: hsl(120, 100%, 40%);">+              return M.x86.R_EDX * index;</span><br><span style="color: hsl(120, 100%, 40%);">+   case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EBX]");</span><br><span style="color: hsl(120, 100%, 40%);">+              return M.x86.R_EBX * index;</span><br><span style="color: hsl(120, 100%, 40%);">+   case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("0]");</span><br><span style="color: hsl(120, 100%, 40%);">+                return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EBP]");</span><br><span style="color: hsl(120, 100%, 40%);">+              return M.x86.R_EBP * index;</span><br><span style="color: hsl(120, 100%, 40%);">+   case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("ESI]");</span><br><span style="color: hsl(120, 100%, 40%);">+              return M.x86.R_ESI * index;</span><br><span style="color: hsl(120, 100%, 40%);">+   case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("EDI]");</span><br><span style="color: hsl(120, 100%, 40%);">+              return M.x86.R_EDI * index;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;               /* NOT REACHED OR REACHED ON ERROR */</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -785,73 +751,72 @@</span><br><span> REMARKS:</span><br><span> Decodes SIB addressing byte and returns calculated effective address.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-static unsigned decode_sib_address(</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod)</span><br><span style="color: hsl(120, 100%, 40%);">+static unsigned decode_sib_address(int mod)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int sib   = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-    int ss    = (sib >> 6) & 0x03;</span><br><span style="color: hsl(0, 100%, 40%);">-    int index = (sib >> 3) & 0x07;</span><br><span style="color: hsl(0, 100%, 40%);">-    int base  = sib & 0x07;</span><br><span style="color: hsl(0, 100%, 40%);">-    int offset = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-    int displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+        int sib = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+   int ss = (sib >> 6) & 0x03;</span><br><span style="color: hsl(120, 100%, 40%);">+ int index = (sib >> 3) & 0x07;</span><br><span style="color: hsl(120, 100%, 40%);">+      int base = sib & 0x07;</span><br><span style="color: hsl(120, 100%, 40%);">+    int offset = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       int displacement;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    switch (base) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[EAX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        offset = M.x86.R_EAX;</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[ECX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        offset = M.x86.R_ECX;</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[EDX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        offset = M.x86.R_EDX;</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[EBX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        offset = M.x86.R_EBX;</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[ESP]");</span><br><span style="color: hsl(0, 100%, 40%);">-        offset = M.x86.R_ESP;</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-        switch (mod) {</span><br><span style="color: hsl(0, 100%, 40%);">-          case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = (s32)fetch_long_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("[%d]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            offset = displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-            break;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = (s8)fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("[%d][EBP]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            offset = M.x86.R_EBP + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-            break;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = (s32)fetch_long_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("[%d][EBP]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            offset = M.x86.R_EBP + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-            break;</span><br><span style="color: hsl(0, 100%, 40%);">-          default:</span><br><span style="color: hsl(0, 100%, 40%);">-            HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[EAX]");</span><br><span style="color: hsl(0, 100%, 40%);">-        offset = M.x86.R_EAX;</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[ESI]");</span><br><span style="color: hsl(0, 100%, 40%);">-        offset = M.x86.R_ESI;</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("[EDI]");</span><br><span style="color: hsl(0, 100%, 40%);">-        offset = M.x86.R_EDI;</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      default:</span><br><span style="color: hsl(0, 100%, 40%);">-        HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    offset += decode_sib_si(ss, index);</span><br><span style="color: hsl(0, 100%, 40%);">-    return offset;</span><br><span style="color: hsl(120, 100%, 40%);">+       switch (base) {</span><br><span style="color: hsl(120, 100%, 40%);">+       case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("[EAX]");</span><br><span style="color: hsl(120, 100%, 40%);">+             offset = M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("[ECX]");</span><br><span style="color: hsl(120, 100%, 40%);">+             offset = M.x86.R_ECX;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("[EDX]");</span><br><span style="color: hsl(120, 100%, 40%);">+             offset = M.x86.R_EDX;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("[EBX]");</span><br><span style="color: hsl(120, 100%, 40%);">+             offset = M.x86.R_EBX;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("[ESP]");</span><br><span style="color: hsl(120, 100%, 40%);">+             offset = M.x86.R_ESP;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (mod) {</span><br><span style="color: hsl(120, 100%, 40%);">+                case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+                       displacement = (s32) fetch_long_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF2("[%d]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                       offset = displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+                        break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+                       displacement = (s8) fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF2("[%d][EBP]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  offset = M.x86.R_EBP + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+                  break;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+                       displacement = (s32) fetch_long_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF2("[%d][EBP]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  offset = M.x86.R_EBP + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+                  break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("[EAX]");</span><br><span style="color: hsl(120, 100%, 40%);">+             offset = M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("[ESI]");</span><br><span style="color: hsl(120, 100%, 40%);">+             offset = M.x86.R_ESI;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("[EDI]");</span><br><span style="color: hsl(120, 100%, 40%);">+             offset = M.x86.R_EDI;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span style="color: hsl(120, 100%, 40%);">+              HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     offset += decode_sib_si(ss, index);</span><br><span style="color: hsl(120, 100%, 40%);">+   return offset;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -874,73 +839,72 @@</span><br><span>         if a SS access is needed, set this bit.  Otherwise, DS access</span><br><span>         occurs (unless any of the segment override bits are set).</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-unsigned decode_rm00_address(</span><br><span style="color: hsl(0, 100%, 40%);">-    int rm)</span><br><span style="color: hsl(120, 100%, 40%);">+unsigned decode_rm00_address(int rm)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned offset;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned offset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.mode & SYSMODE_PREFIX_ADDR) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* 32-bit addressing */</span><br><span style="color: hsl(0, 100%, 40%);">-        switch (rm) {</span><br><span style="color: hsl(0, 100%, 40%);">-          case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[EAX]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EAX;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[ECX]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_ECX;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[EDX]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EDX;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[EBX]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EBX;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-            return decode_sib_address(0);</span><br><span style="color: hsl(0, 100%, 40%);">-          case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-            offset = fetch_long_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("[%08x]", offset);</span><br><span style="color: hsl(0, 100%, 40%);">-            return offset;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[ESI]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_ESI;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[EDI]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EDI;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* 16-bit addressing */</span><br><span style="color: hsl(0, 100%, 40%);">-        switch (rm) {</span><br><span style="color: hsl(0, 100%, 40%);">-          case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[BX+SI]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BX + M.x86.R_SI) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[BX+DI]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BX + M.x86.R_DI) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[BP+SI]");</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BP + M.x86.R_SI) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[BP+DI]");</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BP + M.x86.R_DI) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[SI]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_SI;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[DI]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_DI;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-            offset = fetch_word_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("[%04x]", offset);</span><br><span style="color: hsl(0, 100%, 40%);">-            return offset;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("[BX]");</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_BX;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (M.x86.mode & SYSMODE_PREFIX_ADDR) {</span><br><span style="color: hsl(120, 100%, 40%);">+           /* 32-bit addressing */</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (rm) {</span><br><span style="color: hsl(120, 100%, 40%);">+         case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[EAX]");</span><br><span style="color: hsl(120, 100%, 40%);">+                     return M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[ECX]");</span><br><span style="color: hsl(120, 100%, 40%);">+                     return M.x86.R_ECX;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[EDX]");</span><br><span style="color: hsl(120, 100%, 40%);">+                     return M.x86.R_EDX;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[EBX]");</span><br><span style="color: hsl(120, 100%, 40%);">+                     return M.x86.R_EBX;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+                       return decode_sib_address(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                       offset = fetch_long_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                    DECODE_PRINTF2("[%08x]", offset);</span><br><span style="color: hsl(120, 100%, 40%);">+                   return offset;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[ESI]");</span><br><span style="color: hsl(120, 100%, 40%);">+                     return M.x86.R_ESI;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[EDI]");</span><br><span style="color: hsl(120, 100%, 40%);">+                     return M.x86.R_EDI;</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* 16-bit addressing */</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (rm) {</span><br><span style="color: hsl(120, 100%, 40%);">+         case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[BX+SI]");</span><br><span style="color: hsl(120, 100%, 40%);">+                   return (M.x86.R_BX + M.x86.R_SI) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[BX+DI]");</span><br><span style="color: hsl(120, 100%, 40%);">+                   return (M.x86.R_BX + M.x86.R_DI) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[BP+SI]");</span><br><span style="color: hsl(120, 100%, 40%);">+                   M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+                      return (M.x86.R_BP + M.x86.R_SI) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[BP+DI]");</span><br><span style="color: hsl(120, 100%, 40%);">+                   M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+                      return (M.x86.R_BP + M.x86.R_DI) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[SI]");</span><br><span style="color: hsl(120, 100%, 40%);">+                      return M.x86.R_SI;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[DI]");</span><br><span style="color: hsl(120, 100%, 40%);">+                      return M.x86.R_DI;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+                       offset = fetch_word_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                    DECODE_PRINTF2("[%04x]", offset);</span><br><span style="color: hsl(120, 100%, 40%);">+                   return offset;</span><br><span style="color: hsl(120, 100%, 40%);">+                case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF("[BX]");</span><br><span style="color: hsl(120, 100%, 40%);">+                      return M.x86.R_BX;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -954,82 +918,85 @@</span><br><span> Return the offset given by mod=01 addressing.  Also enables the</span><br><span> decoding of instructions.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-unsigned decode_rm01_address(</span><br><span style="color: hsl(0, 100%, 40%);">-    int rm)</span><br><span style="color: hsl(120, 100%, 40%);">+unsigned decode_rm01_address(int rm)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+  int displacement;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.mode & SYSMODE_PREFIX_ADDR) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* 32-bit addressing */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (rm != 4)</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = (s8)fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-        else</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (M.x86.mode & SYSMODE_PREFIX_ADDR) {</span><br><span style="color: hsl(120, 100%, 40%);">+           /* 32-bit addressing */</span><br><span style="color: hsl(120, 100%, 40%);">+               if (rm != 4)</span><br><span style="color: hsl(120, 100%, 40%);">+                  displacement = (s8) fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+         else</span><br><span style="color: hsl(120, 100%, 40%);">+                  displacement = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        switch (rm) {</span><br><span style="color: hsl(0, 100%, 40%);">-          case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EAX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EAX + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[ECX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_ECX + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EDX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EDX + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EBX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EBX + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 4: {</span><br><span style="color: hsl(0, 100%, 40%);">-            int offset = decode_sib_address(1);</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = (s8)fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("[%d]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return offset + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-          case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EBP]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EBP + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[ESI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_ESI + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EDI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EDI + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* 16-bit addressing */</span><br><span style="color: hsl(0, 100%, 40%);">-        displacement = (s8)fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-        switch (rm) {</span><br><span style="color: hsl(0, 100%, 40%);">-          case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BX+SI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BX + M.x86.R_SI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BX+DI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BX + M.x86.R_DI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BP+SI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BP + M.x86.R_SI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BP+DI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BP + M.x86.R_DI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[SI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_SI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[DI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_DI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BP]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BP + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BX + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    return 0;                   /* SHOULD NOT HAPPEN */</span><br><span style="color: hsl(120, 100%, 40%);">+           switch (rm) {</span><br><span style="color: hsl(120, 100%, 40%);">+         case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EAX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EAX + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[ECX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_ECX + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EDX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EDX + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EBX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EBX + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 4:{</span><br><span style="color: hsl(120, 100%, 40%);">+                              int offset = decode_sib_address(1);</span><br><span style="color: hsl(120, 100%, 40%);">+                           displacement = (s8) fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                         DECODE_PRINTF2("[%d]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                               return offset + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+                 }</span><br><span style="color: hsl(120, 100%, 40%);">+             case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EBP]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EBP + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[ESI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_ESI + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EDI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EDI + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* 16-bit addressing */</span><br><span style="color: hsl(120, 100%, 40%);">+               displacement = (s8) fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+         switch (rm) {</span><br><span style="color: hsl(120, 100%, 40%);">+         case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BX+SI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  return (M.x86.R_BX + M.x86.R_SI +</span><br><span style="color: hsl(120, 100%, 40%);">+                             displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BX+DI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  return (M.x86.R_BX + M.x86.R_DI +</span><br><span style="color: hsl(120, 100%, 40%);">+                             displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BP+SI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+                      return (M.x86.R_BP + M.x86.R_SI +</span><br><span style="color: hsl(120, 100%, 40%);">+                             displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BP+DI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+                      return (M.x86.R_BP + M.x86.R_DI +</span><br><span style="color: hsl(120, 100%, 40%);">+                             displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[SI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return (M.x86.R_SI + displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[DI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return (M.x86.R_DI + displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BP]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                     M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+                      return (M.x86.R_BP + displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return (M.x86.R_BX + displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;               /* SHOULD NOT HAPPEN */</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1043,86 +1010,88 @@</span><br><span> Return the offset given by mod=10 addressing.  Also enables the</span><br><span> decoding of instructions.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-unsigned decode_rm10_address(</span><br><span style="color: hsl(0, 100%, 40%);">-    int rm)</span><br><span style="color: hsl(120, 100%, 40%);">+unsigned decode_rm10_address(int rm)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.mode & SYSMODE_PREFIX_ADDR) {</span><br><span style="color: hsl(0, 100%, 40%);">-        int displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (M.x86.mode & SYSMODE_PREFIX_ADDR) {</span><br><span style="color: hsl(120, 100%, 40%);">+           int displacement;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* 32-bit addressing */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (rm != 4)</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = (s32)fetch_long_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-        else</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+            /* 32-bit addressing */</span><br><span style="color: hsl(120, 100%, 40%);">+               if (rm != 4)</span><br><span style="color: hsl(120, 100%, 40%);">+                  displacement = (s32) fetch_long_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                else</span><br><span style="color: hsl(120, 100%, 40%);">+                  displacement = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        switch (rm) {</span><br><span style="color: hsl(0, 100%, 40%);">-          case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EAX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EAX + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[ECX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_ECX + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EDX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EDX + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EBX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EBX + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 4: {</span><br><span style="color: hsl(0, 100%, 40%);">-            int offset = decode_sib_address(2);</span><br><span style="color: hsl(0, 100%, 40%);">-            displacement = (s32)fetch_long_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("[%d]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return offset + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-          case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EBP]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EBP + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[ESI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_ESI + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[EDI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return M.x86.R_EDI + displacement;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        int displacement = (s16)fetch_word_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+         switch (rm) {</span><br><span style="color: hsl(120, 100%, 40%);">+         case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EAX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EAX + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[ECX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_ECX + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EDX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EDX + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EBX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EBX + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 4:{</span><br><span style="color: hsl(120, 100%, 40%);">+                              int offset = decode_sib_address(2);</span><br><span style="color: hsl(120, 100%, 40%);">+                           displacement = (s32) fetch_long_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                                DECODE_PRINTF2("[%d]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                               return offset + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+                 }</span><br><span style="color: hsl(120, 100%, 40%);">+             case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EBP]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EBP + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[ESI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_ESI + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[EDI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                    return M.x86.R_EDI + displacement;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              int displacement = (s16) fetch_word_imm();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* 16-bit addressing */</span><br><span style="color: hsl(0, 100%, 40%);">-        switch (rm) {</span><br><span style="color: hsl(0, 100%, 40%);">-          case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BX+SI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BX + M.x86.R_SI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 1:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BX+DI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BX + M.x86.R_DI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 2:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BP+SI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BP + M.x86.R_SI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 3:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BP+DI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BP + M.x86.R_DI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[SI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_SI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[DI]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_DI + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 6:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BP]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BP + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-          case 7:</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d[BX]", displacement);</span><br><span style="color: hsl(0, 100%, 40%);">-            return (M.x86.R_BX + displacement) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    return 0;                   /* SHOULD NOT HAPPEN */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* 16-bit addressing */</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (rm) {</span><br><span style="color: hsl(120, 100%, 40%);">+         case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BX+SI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  return (M.x86.R_BX + M.x86.R_SI +</span><br><span style="color: hsl(120, 100%, 40%);">+                             displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 1:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BX+DI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  return (M.x86.R_BX + M.x86.R_DI +</span><br><span style="color: hsl(120, 100%, 40%);">+                             displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 2:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BP+SI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+                      return (M.x86.R_BP + M.x86.R_SI +</span><br><span style="color: hsl(120, 100%, 40%);">+                             displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 3:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BP+DI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                  M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+                      return (M.x86.R_BP + M.x86.R_DI +</span><br><span style="color: hsl(120, 100%, 40%);">+                             displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+           case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[SI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return (M.x86.R_SI + displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[DI]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return (M.x86.R_DI + displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              case 6:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BP]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                     M.x86.mode |= SYSMODE_SEG_DS_SS;</span><br><span style="color: hsl(120, 100%, 40%);">+                      return (M.x86.R_BP + displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              case 7:</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF2("%d[BX]", displacement);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return (M.x86.R_BX + displacement) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   return 0;               /* SHOULD NOT HAPPEN */</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /****************************************************************************</span><br><span> PARAMETERS:</span><br><span> mod - modifier</span><br><span>@@ -1138,9 +1107,9 @@</span><br><span> </span><br><span> unsigned decode_rmXX_address(int mod, int rm)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  if (mod == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-    return decode_rm00_address(rm);</span><br><span style="color: hsl(0, 100%, 40%);">-  if (mod == 1)</span><br><span style="color: hsl(0, 100%, 40%);">-    return decode_rm01_address(rm);</span><br><span style="color: hsl(0, 100%, 40%);">-  return decode_rm10_address(rm);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (mod == 0)</span><br><span style="color: hsl(120, 100%, 40%);">+         return decode_rm00_address(rm);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (mod == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+         return decode_rm01_address(rm);</span><br><span style="color: hsl(120, 100%, 40%);">+       return decode_rm10_address(rm);</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/26363">change 26363</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/26363"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ib0d74d396193ec673972639ecd9d9fd7f7cf3f01 </div>
<div style="display:none"> Gerrit-Change-Number: 26363 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Elyes HAOUAS <ehaouas@noos.fr> </div>