<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>