<p>Elyes HAOUAS has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/26359">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">device/oprom/x86emu/ops2.c: Fix coding style<br><br>Change-Id: I687b288b2a77129f8dfab3c0f2696438e76310f7<br>Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr><br>---<br>M src/device/oprom/x86emu/ops2.c<br>1 file changed, 1,318 insertions(+), 1,321 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/59/26359/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/device/oprom/x86emu/ops2.c b/src/device/oprom/x86emu/ops2.c</span><br><span>index 6089b1f..c72b711 100644</span><br><span>--- a/src/device/oprom/x86emu/ops2.c</span><br><span>+++ b/src/device/oprom/x86emu/ops2.c</span><br><span>@@ -51,13 +51,13 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_illegal_op(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    TRACE_REGS();</span><br><span style="color: hsl(0, 100%, 40%);">-    printf("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_CS, M.x86.R_IP-2, op2);</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+ START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");</span><br><span style="color: hsl(120, 100%, 40%);">+     TRACE_REGS();</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           M.x86.R_CS, M.x86.R_IP - 2, op2);</span><br><span style="color: hsl(120, 100%, 40%);">+      HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+   END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -67,51 +67,51 @@</span><br><span> </span><br><span> static void x86emuOp2_opc_01(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-  u16 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-  uint destoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+   int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      u16 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint destoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-  FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+     START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  switch(rh) {</span><br><span style="color: hsl(0, 100%, 40%);">-  case 4: // SMSW (Store Machine Status Word)</span><br><span style="color: hsl(0, 100%, 40%);">-          // Decode the mod byte to find the addressing</span><br><span style="color: hsl(0, 100%, 40%);">-          // Dummy implementation: Always returns 0x10 (initial value as per intel manual volume 3, figure 8-1)</span><br><span style="color: hsl(120, 100%, 40%);">+ switch (rh) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case 4: // SMSW (Store Machine Status Word)</span><br><span style="color: hsl(120, 100%, 40%);">+           // Decode the mod byte to find the addressing</span><br><span style="color: hsl(120, 100%, 40%);">+         // Dummy implementation: Always returns 0x10 (initial value as per intel manual volume 3, figure 8-1)</span><br><span> #define SMSW_INITIAL_VALUE     0x10</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("SMSW\t");</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%);">-      destoffset = decode_rm00_address(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-      store_data_word(destoffset, SMSW_INITIAL_VALUE);</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%);">-      destoffset = decode_rm01_address(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-      store_data_word(destoffset, SMSW_INITIAL_VALUE);</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%);">-      destoffset = decode_rm10_address(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-      store_data_word(destoffset, SMSW_INITIAL_VALUE);</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%);">-      destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-      *destreg = SMSW_INITIAL_VALUE;</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%);">-    TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("\n");</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%);">-    DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE IN 0F 01\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    TRACE_REGS();</span><br><span style="color: hsl(0, 100%, 40%);">-    printf("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_CS, M.x86.R_IP-2, op2);</span><br><span style="color: hsl(0, 100%, 40%);">-    HALT_SYS();</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(120, 100%, 40%);">+         DECODE_PRINTF("SMSW\t");</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%);">+                       destoffset = decode_rm00_address(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 store_data_word(destoffset, SMSW_INITIAL_VALUE);</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%);">+                       destoffset = decode_rm01_address(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 store_data_word(destoffset, SMSW_INITIAL_VALUE);</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%);">+                       destoffset = decode_rm10_address(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 store_data_word(destoffset, SMSW_INITIAL_VALUE);</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%);">+                       destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        *destreg = SMSW_INITIAL_VALUE;</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%);">+             TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+                DECODE_PRINTF("\n");</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%);">+              DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE IN 0F 01\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            TRACE_REGS();</span><br><span style="color: hsl(120, 100%, 40%);">+         printf("%04x:%04x: %02X ILLEGAL EXTENDED X86 OPCODE!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   M.x86.R_CS, M.x86.R_IP - 2, op2);</span><br><span style="color: hsl(120, 100%, 40%);">+              HALT_SYS();</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -120,11 +120,11 @@</span><br><span>  * ****************************************************************************/</span><br><span> static void x86emuOp2_invd(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_PRINTF("INVD\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-  END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+   START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("INVD\n");</span><br><span style="color: hsl(120, 100%, 40%);">+    TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -133,11 +133,11 @@</span><br><span>  * ****************************************************************************/</span><br><span> static void x86emuOp2_wbinvd(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_PRINTF("WBINVD\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-  END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("WBINVD\n");</span><br><span style="color: hsl(120, 100%, 40%);">+  TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -146,13 +146,13 @@</span><br><span>  * ****************************************************************************/</span><br><span> static void x86emuOp2_wrmsr(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  /* dummy implementation, does nothing */</span><br><span style="color: hsl(120, 100%, 40%);">+   /* dummy implementation, does nothing */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_PRINTF("WRMSR\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-  END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+      START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("WRMSR\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -162,31 +162,31 @@</span><br><span> static void x86emuOp2_rdtsc(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span> #ifdef __HAS_LONG_LONG__</span><br><span style="color: hsl(0, 100%, 40%);">-  static u64 counter = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     static u64 counter = 0;</span><br><span> #else</span><br><span style="color: hsl(0, 100%, 40%);">-  static u32 counter = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     static u32 counter = 0;</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  counter += 0x10000;</span><br><span style="color: hsl(120, 100%, 40%);">+    counter += 0x10000;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  /* read timestamp counter */</span><br><span style="color: hsl(0, 100%, 40%);">-  /*</span><br><span style="color: hsl(0, 100%, 40%);">-   * Note that instead of actually trying to accurately measure this, we just</span><br><span style="color: hsl(0, 100%, 40%);">-   * increase the counter by a fixed amount every time we hit one of these</span><br><span style="color: hsl(0, 100%, 40%);">-   * instructions.  Feel free to come up with a better method.</span><br><span style="color: hsl(0, 100%, 40%);">-   */</span><br><span style="color: hsl(0, 100%, 40%);">-  START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_PRINTF("RDTSC\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+        /* read timestamp counter */</span><br><span style="color: hsl(120, 100%, 40%);">+  /*</span><br><span style="color: hsl(120, 100%, 40%);">+     * Note that instead of actually trying to accurately measure this, we just</span><br><span style="color: hsl(120, 100%, 40%);">+    * increase the counter by a fixed amount every time we hit one of these</span><br><span style="color: hsl(120, 100%, 40%);">+       * instructions.  Feel free to come up with a better method.</span><br><span style="color: hsl(120, 100%, 40%);">+   */</span><br><span style="color: hsl(120, 100%, 40%);">+   START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("RDTSC\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   TRACE_AND_STEP();</span><br><span> #ifdef __HAS_LONG_LONG__</span><br><span style="color: hsl(0, 100%, 40%);">-  M.x86.R_EAX = counter & 0xffffffff;</span><br><span style="color: hsl(0, 100%, 40%);">-  M.x86.R_EDX = counter >> 32;</span><br><span style="color: hsl(120, 100%, 40%);">+    M.x86.R_EAX = counter & 0xffffffff;</span><br><span style="color: hsl(120, 100%, 40%);">+       M.x86.R_EDX = counter >> 32;</span><br><span> #else</span><br><span style="color: hsl(0, 100%, 40%);">-  M.x86.R_EAX = counter;</span><br><span style="color: hsl(0, 100%, 40%);">-  M.x86.R_EDX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+ M.x86.R_EAX = counter;</span><br><span style="color: hsl(120, 100%, 40%);">+        M.x86.R_EDX = 0;</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-  END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+   DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -195,18 +195,18 @@</span><br><span>  * ****************************************************************************/</span><br><span> static void x86emuOp2_rdmsr(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  /* dummy implementation, always return 0 */</span><br><span style="color: hsl(120, 100%, 40%);">+        /* dummy implementation, always return 0 */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_PRINTF("RDMSR\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-  M.x86.R_EDX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  M.x86.R_EAX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-  DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-  END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("RDMSR\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     M.x86.R_EDX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      M.x86.R_EAX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define xorl(a,b)   (((a) && !(b)) || (!(a) && (b)))</span><br><span style="color: hsl(120, 100%, 40%);">+#define xorl(a, b)   (((a) && !(b)) || (!(a) && (b)))</span><br><span> </span><br><span> /****************************************************************************</span><br><span> REMARKS:</span><br><span>@@ -214,92 +214,93 @@</span><br><span> ****************************************************************************/</span><br><span> int x86emu_check_jump_condition(u8 op)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (op) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x0:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JO\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return ACCESS_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x1:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JNO\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return !ACCESS_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x2:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JB\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return ACCESS_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x3:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JNB\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return !ACCESS_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x4:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JZ\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x5:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JNZ\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return !ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x6:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JBE\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x7:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JNBE\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return !(ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF));</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x8:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JS\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return ACCESS_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x9:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JNS\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return !ACCESS_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xa:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JP\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return ACCESS_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xb:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JNP\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return !ACCESS_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xc:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JL\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xd:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JNL\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return !xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xe:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("JLE\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return (xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||</span><br><span style="color: hsl(0, 100%, 40%);">-                ACCESS_FLAG(F_ZF));</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%);">-        DECODE_PRINTF("JNLE\t");</span><br><span style="color: hsl(0, 100%, 40%);">-        return !(xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||</span><br><span style="color: hsl(0, 100%, 40%);">-                 ACCESS_FLAG(F_ZF));</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (op) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case 0x0:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JO\t");</span><br><span style="color: hsl(120, 100%, 40%);">+              return ACCESS_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     case 0x1:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JNO\t");</span><br><span style="color: hsl(120, 100%, 40%);">+             return !ACCESS_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x2:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JB\t");</span><br><span style="color: hsl(120, 100%, 40%);">+              return ACCESS_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x3:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JNB\t");</span><br><span style="color: hsl(120, 100%, 40%);">+             return !ACCESS_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x4:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JZ\t");</span><br><span style="color: hsl(120, 100%, 40%);">+              return ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x5:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JNZ\t");</span><br><span style="color: hsl(120, 100%, 40%);">+             return !ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x6:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JBE\t");</span><br><span style="color: hsl(120, 100%, 40%);">+             return ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x7:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JNBE\t");</span><br><span style="color: hsl(120, 100%, 40%);">+            return !(ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF));</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x8:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JS\t");</span><br><span style="color: hsl(120, 100%, 40%);">+              return ACCESS_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x9:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JNS\t");</span><br><span style="color: hsl(120, 100%, 40%);">+             return !ACCESS_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xa:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JP\t");</span><br><span style="color: hsl(120, 100%, 40%);">+              return ACCESS_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xb:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JNP\t");</span><br><span style="color: hsl(120, 100%, 40%);">+             return !ACCESS_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xc:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JL\t");</span><br><span style="color: hsl(120, 100%, 40%);">+              return xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xd:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JNL\t");</span><br><span style="color: hsl(120, 100%, 40%);">+             return !xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xe:</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("JLE\t");</span><br><span style="color: hsl(120, 100%, 40%);">+             return (xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||</span><br><span style="color: hsl(120, 100%, 40%);">+                 ACCESS_FLAG(F_ZF));</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%);">+              DECODE_PRINTF("JNLE\t");</span><br><span style="color: hsl(120, 100%, 40%);">+            return !(xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||</span><br><span style="color: hsl(120, 100%, 40%);">+                         ACCESS_FLAG(F_ZF));</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span> }</span><br><span> </span><br><span> static void x86emuOp2_long_jump(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    s32 target;</span><br><span style="color: hsl(0, 100%, 40%);">-    int cond;</span><br><span style="color: hsl(120, 100%, 40%);">+        s32 target;</span><br><span style="color: hsl(120, 100%, 40%);">+   int cond;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* conditional jump to word offset. */</span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    cond = x86emu_check_jump_condition(op2 & 0xF);</span><br><span style="color: hsl(0, 100%, 40%);">-    target = (s16) fetch_word_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-    target += (s16) M.x86.R_IP;</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF2("%04x\n", target);</span><br><span style="color: hsl(0, 100%, 40%);">-    TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    if (cond) {</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_IP = (u16)target;</span><br><span style="color: hsl(0, 100%, 40%);">-       JMP_TRACE(M.x86.saved_cs, M.x86.saved_ip, M.x86.R_CS, M.x86.R_IP, " LONG COND ");</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+ /* conditional jump to word offset. */</span><br><span style="color: hsl(120, 100%, 40%);">+        START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     cond = x86emu_check_jump_condition(op2 & 0xF);</span><br><span style="color: hsl(120, 100%, 40%);">+    target = (s16) fetch_word_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+      target += (s16) M.x86.R_IP;</span><br><span style="color: hsl(120, 100%, 40%);">+   DECODE_PRINTF2("%04x\n", target);</span><br><span style="color: hsl(120, 100%, 40%);">+   TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     if (cond) {</span><br><span style="color: hsl(120, 100%, 40%);">+           M.x86.R_IP = (u16) target;</span><br><span style="color: hsl(120, 100%, 40%);">+            JMP_TRACE(M.x86.saved_cs, M.x86.saved_ip, M.x86.R_CS,</span><br><span style="color: hsl(120, 100%, 40%);">+                   M.x86.R_IP, " LONG COND ");</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -308,57 +309,55 @@</span><br><span> ****************************************************************************/</span><br><span> static s32 x86emu_bswap(s32 reg)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   // perform the byte swap</span><br><span style="color: hsl(0, 100%, 40%);">-   s32 temp = reg;</span><br><span style="color: hsl(0, 100%, 40%);">-   reg = (temp & 0xFF000000) >> 24 |</span><br><span style="color: hsl(0, 100%, 40%);">-         (temp & 0xFF0000) >> 8 |</span><br><span style="color: hsl(0, 100%, 40%);">-         (temp & 0xFF00) << 8 |</span><br><span style="color: hsl(0, 100%, 40%);">-         (temp & 0xFF) << 24;</span><br><span style="color: hsl(0, 100%, 40%);">-   return reg;</span><br><span style="color: hsl(120, 100%, 40%);">+       // perform the byte swap</span><br><span style="color: hsl(120, 100%, 40%);">+      s32 temp = reg;</span><br><span style="color: hsl(120, 100%, 40%);">+       reg = (temp & 0xFF000000) >> 24 |</span><br><span style="color: hsl(120, 100%, 40%);">+       (temp & 0xFF0000) >> 8 | (temp & 0xFF00) << 8 | (temp & 0xFF) << 24;</span><br><span style="color: hsl(120, 100%, 40%);">+        return reg;</span><br><span> }</span><br><span> </span><br><span> static void x86emuOp2_bswap(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    /* byte swap 32 bit register */</span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("BSWAP\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (op2) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xc8:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EAX\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EAX = x86emu_bswap(M.x86.R_EAX);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xc9:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ECX\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_ECX = x86emu_bswap(M.x86.R_ECX);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xca:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EDX\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EDX = x86emu_bswap(M.x86.R_EDX);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xcb:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EBX\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EBX = x86emu_bswap(M.x86.R_EBX);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xcc:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ESP\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_ESP = x86emu_bswap(M.x86.R_ESP);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xcd:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EBP\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EBP = x86emu_bswap(M.x86.R_EBP);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xce:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("ESI\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_ESI = x86emu_bswap(M.x86.R_ESI);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0xcf:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("EDI\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EDI = x86emu_bswap(M.x86.R_EDI);</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%);">-    TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+      /* byte swap 32 bit register */</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("BSWAP\t");</span><br><span style="color: hsl(120, 100%, 40%);">+   switch (op2) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xc8:</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("EAX\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_EAX = x86emu_bswap(M.x86.R_EAX);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xc9:</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("ECX\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_ECX = x86emu_bswap(M.x86.R_ECX);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xca:</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("EDX\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_EDX = x86emu_bswap(M.x86.R_EDX);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xcb:</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("EBX\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_EBX = x86emu_bswap(M.x86.R_EBX);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xcc:</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("ESP\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_ESP = x86emu_bswap(M.x86.R_ESP);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xcd:</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("EBP\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_EBP = x86emu_bswap(M.x86.R_EBP);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xce:</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("ESI\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_ESI = x86emu_bswap(M.x86.R_ESI);</span><br><span style="color: hsl(120, 100%, 40%);">+              break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0xcf:</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("EDI\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_EDI = x86emu_bswap(M.x86.R_EDI);</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%);">+     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -367,94 +366,94 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_set_byte(u8 op2)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint destoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    u8  *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-    const char *X86EMU_DEBUG_ONLY(name) = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-    int cond = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+    int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint destoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+      u8 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+  const char *X86EMU_DEBUG_ONLY(name) = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+   int cond = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (op2) {</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x90:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETO\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond =  ACCESS_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x91:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETNO\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = !ACCESS_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x92:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETB\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = ACCESS_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x93:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETNB\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = !ACCESS_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x94:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETZ\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x95:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETNZ\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = !ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x96:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETBE\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x97:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETNBE\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = !(ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF));</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x98:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETS\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = ACCESS_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x99:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETNS\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = !ACCESS_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x9a:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETP\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = ACCESS_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x9b:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETNP\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = !ACCESS_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x9c:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETL\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x9d:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETNL\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = !xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x9e:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETLE\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = (xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||</span><br><span style="color: hsl(0, 100%, 40%);">-                ACCESS_FLAG(F_ZF));</span><br><span style="color: hsl(0, 100%, 40%);">-        break;</span><br><span style="color: hsl(0, 100%, 40%);">-      case 0x9f:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = "SETNLE\t";</span><br><span style="color: hsl(0, 100%, 40%);">-        cond = !(xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||</span><br><span style="color: hsl(0, 100%, 40%);">-                 ACCESS_FLAG(F_ZF));</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%);">-    DECODE_PRINTF(name);</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        store_data_byte(destoffset, cond ? 0x01 : 0x00);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        destreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        *destreg = cond ? 0x01 : 0x00;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+ START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     switch (op2) {</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x90:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETO\t";</span><br><span style="color: hsl(120, 100%, 40%);">+            cond = ACCESS_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x91:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETNO\t";</span><br><span style="color: hsl(120, 100%, 40%);">+           cond = !ACCESS_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x92:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETB\t";</span><br><span style="color: hsl(120, 100%, 40%);">+            cond = ACCESS_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x93:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETNB\t";</span><br><span style="color: hsl(120, 100%, 40%);">+           cond = !ACCESS_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x94:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETZ\t";</span><br><span style="color: hsl(120, 100%, 40%);">+            cond = ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x95:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETNZ\t";</span><br><span style="color: hsl(120, 100%, 40%);">+           cond = !ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x96:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETBE\t";</span><br><span style="color: hsl(120, 100%, 40%);">+           cond = ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x97:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETNBE\t";</span><br><span style="color: hsl(120, 100%, 40%);">+          cond = !(ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF));</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x98:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETS\t";</span><br><span style="color: hsl(120, 100%, 40%);">+            cond = ACCESS_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x99:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETNS\t";</span><br><span style="color: hsl(120, 100%, 40%);">+           cond = !ACCESS_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x9a:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETP\t";</span><br><span style="color: hsl(120, 100%, 40%);">+            cond = ACCESS_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+             break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x9b:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETNP\t";</span><br><span style="color: hsl(120, 100%, 40%);">+           cond = !ACCESS_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x9c:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETL\t";</span><br><span style="color: hsl(120, 100%, 40%);">+            cond = xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x9d:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETNL\t";</span><br><span style="color: hsl(120, 100%, 40%);">+           cond = !xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF));</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x9e:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETLE\t";</span><br><span style="color: hsl(120, 100%, 40%);">+           cond = (xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||</span><br><span style="color: hsl(120, 100%, 40%);">+                 ACCESS_FLAG(F_ZF));</span><br><span style="color: hsl(120, 100%, 40%);">+           break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case 0x9f:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = "SETNLE\t";</span><br><span style="color: hsl(120, 100%, 40%);">+          cond = !(xorl(ACCESS_FLAG(F_SF), ACCESS_FLAG(F_OF)) ||</span><br><span style="color: hsl(120, 100%, 40%);">+                         ACCESS_FLAG(F_ZF));</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%);">+     DECODE_PRINTF(name);</span><br><span style="color: hsl(120, 100%, 40%);">+  FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+            TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             store_data_byte(destoffset, cond ? 0x01 : 0x00);</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            destreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             *destreg = cond ? 0x01 : 0x00;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -463,12 +462,12 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_push_FS(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("PUSH\tFS\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    push_word(M.x86.R_FS);</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+    START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("PUSH\tFS\n");</span><br><span style="color: hsl(120, 100%, 40%);">+        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     push_word(M.x86.R_FS);</span><br><span style="color: hsl(120, 100%, 40%);">+        DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -477,12 +476,12 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_pop_FS(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("POP\tFS\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_FS = pop_word();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+    START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("POP\tFS\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     M.x86.R_FS = pop_word();</span><br><span style="color: hsl(120, 100%, 40%);">+      DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -491,12 +490,12 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_cpuid(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("CPUID\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    x86emu_cpuid();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+        START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("CPUID\n");</span><br><span style="color: hsl(120, 100%, 40%);">+   TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     x86emu_cpuid();</span><br><span style="color: hsl(120, 100%, 40%);">+       DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -505,61 +504,61 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_bt_R(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    int bit,disp;</span><br><span style="color: hsl(120, 100%, 40%);">+  int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       int bit, disp;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("BT\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+     START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("BT\t");</span><br><span style="color: hsl(120, 100%, 40%);">+      FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            disp = (s16)*shiftreg >> 5;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_long(srcoffset+disp);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & (0x1 << bit),F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                  DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                   disp = (s16) * shiftreg >> 5;</span><br><span style="color: hsl(120, 100%, 40%);">+                   srcval = fetch_data_long(srcoffset + disp);</span><br><span style="color: hsl(120, 100%, 40%);">+                   CONDITIONAL_SET_FLAG(srcval & (0x1 << bit), F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+          } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+                   u16 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            disp = (s16)*shiftreg >> 4;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_word(srcoffset+disp);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & (0x1 << bit),F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *srcreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                   DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                    disp = (s16) * shiftreg >> 4;</span><br><span style="color: hsl(120, 100%, 40%);">+                   srcval = fetch_data_word(srcoffset + disp);</span><br><span style="color: hsl(120, 100%, 40%);">+                   CONDITIONAL_SET_FLAG(srcval & (0x1 << bit), F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *srcreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & (0x1 << bit),F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *srcreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                        srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                   CONDITIONAL_SET_FLAG(*srcreg & (0x1 << bit), F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+         } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *srcreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & (0x1 << bit),F_CF);</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                        srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(*srcreg & (0x1 << bit), F_CF);</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -568,69 +567,69 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_shld_IMM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint destoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 shift;</span><br><span style="color: hsl(120, 100%, 40%);">+ int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint destoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+      u8 shift;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("SHLD\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 destval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+      START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("SHLD\t");</span><br><span style="color: hsl(120, 100%, 40%);">+    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 destval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u32 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = fetch_data_long(destoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = shld_long(destval,*shiftreg,shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_long(destoffset, destval);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 destval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                   DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                      TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     destval = fetch_data_long(destoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                        destval = shld_long(destval, *shiftreg, shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                       store_data_long(destoffset, destval);</span><br><span style="color: hsl(120, 100%, 40%);">+         } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 destval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u16 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = fetch_data_word(destoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = shld_word(destval,*shiftreg,shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_word(destoffset, destval);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                   DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                      TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     destval = fetch_data_word(destoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                        destval = shld_word(destval, *shiftreg, shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                       store_data_word(destoffset, destval);</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = shld_long(*destreg,*shiftreg,shift);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                      TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = shld_long(*destreg, *shiftreg, shift);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = shld_word(*destreg,*shiftreg,shift);</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                      TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = shld_word(*destreg, *shiftreg, shift);</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -639,60 +638,60 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_shld_CL(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint destoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint destoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("SHLD\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 destval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("SHLD\t");</span><br><span style="color: hsl(120, 100%, 40%);">+    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 destval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u32 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = fetch_data_long(destoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = shld_long(destval,*shiftreg,M.x86.R_CL);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_long(destoffset, destval);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 destval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                   DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     destval = fetch_data_long(destoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                        destval = shld_long(destval, *shiftreg, M.x86.R_CL);</span><br><span style="color: hsl(120, 100%, 40%);">+                  store_data_long(destoffset, destval);</span><br><span style="color: hsl(120, 100%, 40%);">+         } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 destval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u16 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = fetch_data_word(destoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = shld_word(destval,*shiftreg,M.x86.R_CL);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_word(destoffset, destval);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                   DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     destval = fetch_data_word(destoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                        destval = shld_word(destval, *shiftreg, M.x86.R_CL);</span><br><span style="color: hsl(120, 100%, 40%);">+                  store_data_word(destoffset, destval);</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = shld_long(*destreg,*shiftreg,M.x86.R_CL);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = shld_long(*destreg, *shiftreg, M.x86.R_CL);</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = shld_word(*destreg,*shiftreg,M.x86.R_CL);</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = shld_word(*destreg, *shiftreg, M.x86.R_CL);</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -701,12 +700,12 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_push_GS(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("PUSH\tGS\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    push_word(M.x86.R_GS);</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+    START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("PUSH\tGS\n");</span><br><span style="color: hsl(120, 100%, 40%);">+        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     push_word(M.x86.R_GS);</span><br><span style="color: hsl(120, 100%, 40%);">+        DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -715,12 +714,12 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_pop_GS(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("POP\tGS\n");</span><br><span style="color: hsl(0, 100%, 40%);">-    TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_GS = pop_word();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+    START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("POP\tGS\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     M.x86.R_GS = pop_word();</span><br><span style="color: hsl(120, 100%, 40%);">+      DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -729,71 +728,71 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_bts_R(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    int bit,disp;</span><br><span style="color: hsl(120, 100%, 40%);">+ int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       int bit, disp;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("BTS\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval,mask;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("BTS\t");</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                     u32 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            disp = (s16)*shiftreg >> 5;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_long(srcoffset+disp);</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_long(srcoffset+disp, srcval | mask);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval,mask;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                  DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                   disp = (s16) * shiftreg >> 5;</span><br><span style="color: hsl(120, 100%, 40%);">+                   srcval = fetch_data_long(srcoffset + disp);</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(srcval & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                        store_data_long(srcoffset + disp, srcval | mask);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 srcval, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                     u16 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            disp = (s16)*shiftreg >> 4;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_word(srcoffset+disp);</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (u16)(0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_word(srcoffset+disp, srcval | mask);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *srcreg,*shiftreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                      DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                    disp = (s16) * shiftreg >> 4;</span><br><span style="color: hsl(120, 100%, 40%);">+                   srcval = fetch_data_word(srcoffset + disp);</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (u16) (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                      CONDITIONAL_SET_FLAG(srcval & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                        store_data_word(srcoffset + disp, srcval | mask);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *srcreg, *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       u32 mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            *srcreg |= mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *srcreg,*shiftreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(*srcreg & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       *srcreg |= mask;</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *srcreg, *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       u16 mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (u16)(0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            *srcreg |= mask;</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mask = (u16) (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                      CONDITIONAL_SET_FLAG(*srcreg & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       *srcreg |= mask;</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -802,69 +801,69 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_shrd_IMM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint destoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 shift;</span><br><span style="color: hsl(120, 100%, 40%);">+ int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint destoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+      u8 shift;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("SHLD\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 destval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+      START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("SHLD\t");</span><br><span style="color: hsl(120, 100%, 40%);">+    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 destval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u32 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = fetch_data_long(destoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = shrd_long(destval,*shiftreg,shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_long(destoffset, destval);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 destval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                   DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                      TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     destval = fetch_data_long(destoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                        destval = shrd_long(destval, *shiftreg, shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                       store_data_long(destoffset, destval);</span><br><span style="color: hsl(120, 100%, 40%);">+         } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 destval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u16 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = fetch_data_word(destoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = shrd_word(destval,*shiftreg,shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_word(destoffset, destval);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                   DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                      TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     destval = fetch_data_word(destoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                        destval = shrd_word(destval, *shiftreg, shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                       store_data_word(destoffset, destval);</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = shrd_long(*destreg,*shiftreg,shift);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                      TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = shrd_long(*destreg, *shiftreg, shift);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = shrd_word(*destreg,*shiftreg,shift);</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2("%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                      TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = shrd_word(*destreg, *shiftreg, shift);</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -873,59 +872,59 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_shrd_CL(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint destoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint destoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("SHLD\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 destval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+  START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("SHLD\t");</span><br><span style="color: hsl(120, 100%, 40%);">+    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             destoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 destval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u32 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = fetch_data_long(destoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = shrd_long(destval,*shiftreg,M.x86.R_CL);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_long(destoffset, destval);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 destval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                    shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     destval = fetch_data_long(destoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                        destval = shrd_long(destval, *shiftreg, M.x86.R_CL);</span><br><span style="color: hsl(120, 100%, 40%);">+                  store_data_long(destoffset, destval);</span><br><span style="color: hsl(120, 100%, 40%);">+         } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 destval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u16 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = fetch_data_word(destoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            destval = shrd_word(destval,*shiftreg,M.x86.R_CL);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_word(destoffset, destval);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                    shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     destval = fetch_data_word(destoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                        destval = shrd_word(destval, *shiftreg, M.x86.R_CL);</span><br><span style="color: hsl(120, 100%, 40%);">+                  store_data_word(destoffset, destval);</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = shrd_long(*destreg,*shiftreg,M.x86.R_CL);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg,*shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = shrd_long(*destreg, *shiftreg, M.x86.R_CL);</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg, *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = shrd_word(*destreg,*shiftreg,M.x86.R_CL);</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       DECODE_PRINTF(",CL\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = shrd_word(*destreg, *shiftreg, M.x86.R_CL);</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -934,90 +933,92 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_imul_R_RM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+      int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("IMUL\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 res_lo,res_hi;</span><br><span style="color: hsl(120, 100%, 40%);">+      START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("IMUL\t");</span><br><span style="color: hsl(120, 100%, 40%);">+    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u32 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 res_lo, res_hi;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_long(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            imul_long_direct(&res_lo,&res_hi,(s32)*destreg,(s32)srcval);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (res_hi != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-                SET_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-                CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = (u32)res_lo;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 res;</span><br><span style="color: hsl(120, 100%, 40%);">+                    destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = fetch_data_long(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     imul_long_direct(&res_lo, &res_hi, (s32) * destreg,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    (s32) srcval);</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (res_hi != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                               SET_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                             CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = (u32) res_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u16 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (s16)*destreg * (s16)srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-            if (res > 0xFFFF) {</span><br><span style="color: hsl(0, 100%, 40%);">-                SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-                SET_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-                CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = (u16)res;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg,*srcreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 res_lo,res_hi;</span><br><span style="color: hsl(120, 100%, 40%);">+                      destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = (s16) * destreg * (s16) srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+                 if (res > 0xFFFF) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                               SET_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                             CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = (u16) res;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg, *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                        u32 res_lo, res_hi;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            imul_long_direct(&res_lo,&res_hi,(s32)*destreg,(s32)*srcreg);</span><br><span style="color: hsl(0, 100%, 40%);">-            if (res_hi != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-                SET_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-                CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = (u32)res_lo;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg,*srcreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 res;</span><br><span style="color: hsl(120, 100%, 40%);">+                      destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     imul_long_direct(&res_lo, &res_hi, (s32) * destreg,</span><br><span style="color: hsl(120, 100%, 40%);">+                                    (s32) * srcreg);</span><br><span style="color: hsl(120, 100%, 40%);">+                     if (res_hi != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                            SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                               SET_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                             CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = (u32) res_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg, *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                        u32 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (s16)*destreg * (s16)*srcreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            if (res > 0xFFFF) {</span><br><span style="color: hsl(0, 100%, 40%);">-                SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-                SET_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-                CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-            }</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = (u16)res;</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                 destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 res = (s16) * destreg * (s16) * srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (res > 0xFFFF) {</span><br><span style="color: hsl(120, 100%, 40%);">+                                SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                               SET_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                              CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                             CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = (u16) res;</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1026,27 +1027,27 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_lss_R_IMM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rh, rl;</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 *dstreg;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+    int mod, rh, rl;</span><br><span style="color: hsl(120, 100%, 40%);">+      u16 *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint srcoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("LSS\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        *dstreg = fetch_data_word(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_SS = fetch_data_word(srcoffset + 2);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* UNDEFINED! */</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("LSS\t");</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+         DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             *dstreg = fetch_data_word(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+         M.x86.R_SS = fetch_data_word(srcoffset + 2);</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* UNDEFINED! */</span><br><span style="color: hsl(120, 100%, 40%);">+              TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1055,70 +1056,71 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_btr_R(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    int bit,disp;</span><br><span style="color: hsl(120, 100%, 40%);">+       int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       int bit, disp;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("BTR\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval,mask;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+  START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("BTR\t");</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                     u32 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            disp = (s16)*shiftreg >> 5;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_long(srcoffset+disp);</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_long(srcoffset+disp, srcval & ~mask);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval,mask;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                      shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                   disp = (s16) * shiftreg >> 5;</span><br><span style="color: hsl(120, 100%, 40%);">+                   srcval = fetch_data_long(srcoffset + disp);</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(srcval & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                        store_data_long(srcoffset + disp, srcval & ~mask);</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 srcval, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                     u16 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            disp = (s16)*shiftreg >> 4;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_word(srcoffset+disp);</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (u16)(0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_word(srcoffset+disp, (u16)(srcval & ~mask));</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *srcreg,*shiftreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                   shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                    disp = (s16) * shiftreg >> 4;</span><br><span style="color: hsl(120, 100%, 40%);">+                   srcval = fetch_data_word(srcoffset + disp);</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (u16) (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                      CONDITIONAL_SET_FLAG(srcval & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                        store_data_word(srcoffset + disp,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     (u16) (srcval & ~mask));</span><br><span style="color: hsl(120, 100%, 40%);">+          }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *srcreg, *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       u32 mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            *srcreg &= ~mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *srcreg,*shiftreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                        srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(*srcreg & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       *srcreg &= ~mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *srcreg, *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       u16 mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (u16)(0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            *srcreg &= ~mask;</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                        srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mask = (u16) (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                      CONDITIONAL_SET_FLAG(*srcreg & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       *srcreg &= ~mask;</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1127,27 +1129,27 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_lfs_R_IMM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rh, rl;</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 *dstreg;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+    int mod, rh, rl;</span><br><span style="color: hsl(120, 100%, 40%);">+      u16 *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint srcoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("LFS\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        *dstreg = fetch_data_word(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_FS = fetch_data_word(srcoffset + 2);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* UNDEFINED! */</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("LFS\t");</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+         DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             *dstreg = fetch_data_word(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+         M.x86.R_FS = fetch_data_word(srcoffset + 2);</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* UNDEFINED! */</span><br><span style="color: hsl(120, 100%, 40%);">+              TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1156,27 +1158,27 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_lgs_R_IMM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rh, rl;</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 *dstreg;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+    int mod, rh, rl;</span><br><span style="color: hsl(120, 100%, 40%);">+      u16 *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+  uint srcoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("LGS\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        *dstreg = fetch_data_word(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_GS = fetch_data_word(srcoffset + 2);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* UNDEFINED! */</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("LGS\t");</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+         DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             *dstreg = fetch_data_word(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+         M.x86.R_GS = fetch_data_word(srcoffset + 2);</span><br><span style="color: hsl(120, 100%, 40%);">+  } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* UNDEFINED! */</span><br><span style="color: hsl(120, 100%, 40%);">+              TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1185,61 +1187,61 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_movzx_byte_R_RM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+      int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("MOVZX\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+   START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("MOVZX\t");</span><br><span style="color: hsl(120, 100%, 40%);">+   FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u32 srcval;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_byte(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+                  destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = fetch_data_byte(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+            } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u16 srcval;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_byte(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u8  *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                  destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = fetch_data_byte(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u8 *srcreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = *srcreg;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u8  *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                    destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u8 *srcreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = *srcreg;</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                  destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = *srcreg;</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1248,33 +1250,33 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_movzx_word_R_RM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+      int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+   u16 *srcreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("MOVZX\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        *destreg = srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        *destreg = *srcreg;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+ START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("MOVZX\t");</span><br><span style="color: hsl(120, 100%, 40%);">+   FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+          DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             *destreg = srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+         DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             *destreg = *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1283,134 +1285,136 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_btX_I(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 shift;</span><br><span style="color: hsl(0, 100%, 40%);">-    int bit;</span><br><span style="color: hsl(120, 100%, 40%);">+     int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       u8 shift;</span><br><span style="color: hsl(120, 100%, 40%);">+     int bit;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    switch (rh) {</span><br><span style="color: hsl(0, 100%, 40%);">-    case 4:</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("BT\t");</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%);">-        DECODE_PRINTF("BTS\t");</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("BTR\t");</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("BTC\t");</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%);">-        DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_REGS();</span><br><span style="color: hsl(0, 100%, 40%);">-        printf("%04x:%04x: %02X%02X ILLEGAL EXTENDED X86 OPCODE EXTENSION!\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                M.x86.R_CS, M.x86.R_IP-3,op2, (mod<<6)|(rh<<3)|rl);</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%);">-    if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+   START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      switch (rh) {</span><br><span style="color: hsl(120, 100%, 40%);">+ case 4:</span><br><span style="color: hsl(120, 100%, 40%);">+               DECODE_PRINTF("BT\t");</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%);">+               DECODE_PRINTF("BTS\t");</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("BTR\t");</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("BTC\t");</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%);">+              DECODE_PRINTF("ILLEGAL EXTENDED X86 OPCODE\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             TRACE_REGS();</span><br><span style="color: hsl(120, 100%, 40%);">+         printf</span><br><span style="color: hsl(120, 100%, 40%);">+                    ("%04x:%04x: %02X%02X ILLEGAL EXTENDED X86 OPCODE EXTENSION!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     M.x86.R_CS, M.x86.R_IP - 3, op2,</span><br><span style="color: hsl(120, 100%, 40%);">+              (mod << 6) | (rh << 3) | rl);</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%);">+     if (mod < 3) {</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF2(",%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF2(",%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+             TRACE_AND_STEP();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval, mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            bit = shift & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_long(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            switch (rh) {</span><br><span style="color: hsl(0, 100%, 40%);">-            case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-                store_data_long(srcoffset, srcval | mask);</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%);">-                store_data_long(srcoffset, srcval & ~mask);</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%);">-                store_data_long(srcoffset, srcval ^ mask);</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%);">-                break;</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%);">-            u16 srcval, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                    bit = shift & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                       srcval = fetch_data_long(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(srcval & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                        switch (rh) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                               store_data_long(srcoffset, srcval | mask);</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%);">+                               store_data_long(srcoffset, srcval & ~mask);</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%);">+                               store_data_long(srcoffset, srcval ^ mask);</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%);">+                              break;</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%);">+                      u16 srcval, mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            bit = shift & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            switch (rh) {</span><br><span style="color: hsl(0, 100%, 40%);">-            case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-                store_data_word(srcoffset, srcval | mask);</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%);">-                store_data_word(srcoffset, srcval & ~mask);</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%);">-                store_data_word(srcoffset, srcval ^ mask);</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%);">-                break;</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%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *srcreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                      bit = shift & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                        srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(srcval & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                        switch (rh) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                               store_data_word(srcoffset, srcval | mask);</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%);">+                               store_data_word(srcoffset, srcval & ~mask);</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%);">+                               store_data_word(srcoffset, srcval ^ mask);</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%);">+                              break;</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%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u32 mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2(",%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = shift & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            switch (rh) {</span><br><span style="color: hsl(0, 100%, 40%);">-            case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-                *srcreg |= mask;</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%);">-                *srcreg &= ~mask;</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%);">-                *srcreg ^= mask;</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%);">-                break;</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%);">-            u16 *srcreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2(",%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = shift & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                       mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(*srcreg & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       switch (rh) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                               *srcreg |= mask;</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%);">+                               *srcreg &= ~mask;</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%);">+                               *srcreg ^= mask;</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%);">+                              break;</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%);">+                      u16 *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                  u16 mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            shift = fetch_byte_imm();</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF2(",%d\n", shift);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = shift & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            switch (rh) {</span><br><span style="color: hsl(0, 100%, 40%);">-            case 5:</span><br><span style="color: hsl(0, 100%, 40%);">-                *srcreg |= mask;</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%);">-                *srcreg &= ~mask;</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%);">-                *srcreg ^= mask;</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%);">-                break;</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%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                    srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 shift = fetch_byte_imm();</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF2(",%d\n", shift);</span><br><span style="color: hsl(120, 100%, 40%);">+                     TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = shift & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                        mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(*srcreg & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       switch (rh) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 case 5:</span><br><span style="color: hsl(120, 100%, 40%);">+                               *srcreg |= mask;</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%);">+                               *srcreg &= ~mask;</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%);">+                               *srcreg ^= mask;</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%);">+                              break;</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%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1419,70 +1423,71 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_btc_R(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    int bit,disp;</span><br><span style="color: hsl(120, 100%, 40%);">+       int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       int bit, disp;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("BTC\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval,mask;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+  START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("BTC\t");</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                     u32 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            disp = (s16)*shiftreg >> 5;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_long(srcoffset+disp);</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_long(srcoffset+disp, srcval ^ mask);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval,mask;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                   shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                   disp = (s16) * shiftreg >> 5;</span><br><span style="color: hsl(120, 100%, 40%);">+                   srcval = fetch_data_long(srcoffset + disp);</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(srcval & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                        store_data_long(srcoffset + disp, srcval ^ mask);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 srcval, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                     u16 *shiftreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            disp = (s16)*shiftreg >> 4;</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_word(srcoffset+disp);</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (u16)(0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            store_data_word(srcoffset+disp, (u16)(srcval ^ mask));</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *srcreg,*shiftreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                        shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                    disp = (s16) * shiftreg >> 4;</span><br><span style="color: hsl(120, 100%, 40%);">+                   srcval = fetch_data_word(srcoffset + disp);</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (u16) (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                      CONDITIONAL_SET_FLAG(srcval & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                        store_data_word(srcoffset + disp,</span><br><span style="color: hsl(120, 100%, 40%);">+                                     (u16) (srcval ^ mask));</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *srcreg, *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       u32 mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            *srcreg ^= mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *srcreg,*shiftreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcreg = DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0x1F;</span><br><span style="color: hsl(120, 100%, 40%);">+                   mask = (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                    CONDITIONAL_SET_FLAG(*srcreg & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       *srcreg ^= mask;</span><br><span style="color: hsl(120, 100%, 40%);">+              } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *srcreg, *shiftreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       u16 mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            bit = *shiftreg & 0xF;</span><br><span style="color: hsl(0, 100%, 40%);">-            mask = (u16)(0x1 << bit);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(*srcreg & mask,F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            *srcreg ^= mask;</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 shiftreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                       TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     bit = *shiftreg & 0xF;</span><br><span style="color: hsl(120, 100%, 40%);">+                    mask = (u16) (0x1 << bit);</span><br><span style="color: hsl(120, 100%, 40%);">+                      CONDITIONAL_SET_FLAG(*srcreg & mask, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       *srcreg ^= mask;</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1491,59 +1496,63 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_bsf(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+  int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("BSF\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval, *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("BSF\t");</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval, *dstreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            dstreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_long(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            for (*dstreg = 0; *dstreg < 32; (*dstreg)++)</span><br><span style="color: hsl(0, 100%, 40%);">-                if ((srcval >> *dstreg) & 1) break;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval, *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                    dstreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = fetch_data_long(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (*dstreg = 0; *dstreg < 32; (*dstreg)++)</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((srcval >> *dstreg) & 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                                        break;</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 srcval, *dstreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            for (*dstreg = 0; *dstreg < 16; (*dstreg)++)</span><br><span style="color: hsl(0, 100%, 40%);">-                if ((srcval >> *dstreg) & 1) break;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {             /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval, *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                     dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (*dstreg = 0; *dstreg < 16; (*dstreg)++)</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((srcval >> *dstreg) & 1)</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%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval, *dstreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = *DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            dstreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            for (*dstreg = 0; *dstreg < 32; (*dstreg)++)</span><br><span style="color: hsl(0, 100%, 40%);">-                if ((srcval >> *dstreg) & 1) break;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval, *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcval = *DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 dstreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (*dstreg = 0; *dstreg < 32; (*dstreg)++)</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((srcval >> *dstreg) & 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                                        break;</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 srcval, *dstreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = *DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            for (*dstreg = 0; *dstreg < 16; (*dstreg)++)</span><br><span style="color: hsl(0, 100%, 40%);">-                if ((srcval >> *dstreg) & 1) break;</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                      srcval = *DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (*dstreg = 0; *dstreg < 16; (*dstreg)++)</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((srcval >> *dstreg) & 1)</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%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1552,59 +1561,63 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_bsr(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+  int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("BSR\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval, *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+       START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("BSR\t");</span><br><span style="color: hsl(120, 100%, 40%);">+     FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval, *dstreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            dstreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_long(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            for (*dstreg = 31; *dstreg > 0; (*dstreg)--)</span><br><span style="color: hsl(0, 100%, 40%);">-                if ((srcval >> *dstreg) & 1) break;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval, *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                    dstreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = fetch_data_long(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (*dstreg = 31; *dstreg > 0; (*dstreg)--)</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((srcval >> *dstreg) & 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                                        break;</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 srcval, *dstreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            for (*dstreg = 15; *dstreg > 0; (*dstreg)--)</span><br><span style="color: hsl(0, 100%, 40%);">-                if ((srcval >> *dstreg) & 1) break;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {             /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval, *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                     dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = fetch_data_word(srcoffset);</span><br><span style="color: hsl(120, 100%, 40%);">+                  CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (*dstreg = 15; *dstreg > 0; (*dstreg)--)</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((srcval >> *dstreg) & 1)</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%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 srcval, *dstreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = *DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            dstreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            for (*dstreg = 31; *dstreg > 0; (*dstreg)--)</span><br><span style="color: hsl(0, 100%, 40%);">-                if ((srcval >> *dstreg) & 1) break;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval, *dstreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcval = *DECODE_RM_LONG_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 dstreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (*dstreg = 31; *dstreg > 0; (*dstreg)--)</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((srcval >> *dstreg) & 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                                        break;</span><br><span style="color: hsl(120, 100%, 40%);">+                } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 srcval, *dstreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = *DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            for (*dstreg = 15; *dstreg > 0; (*dstreg)--)</span><br><span style="color: hsl(0, 100%, 40%);">-                if ((srcval >> *dstreg) & 1) break;</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                      srcval = *DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 dstreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                 TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     CONDITIONAL_SET_FLAG(srcval == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                      for (*dstreg = 15; *dstreg > 0; (*dstreg)--)</span><br><span style="color: hsl(120, 100%, 40%);">+                               if ((srcval >> *dstreg) & 1)</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%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1613,61 +1626,61 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_movsx_byte_R_RM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+      int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("MOVSX\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+   START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("MOVSX\t");</span><br><span style="color: hsl(120, 100%, 40%);">+   FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u32 srcval;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = (s32)((s8)fetch_data_byte(srcoffset));</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = (s32) ((s8) fetch_data_byte(srcoffset));</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+            } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u16 srcval;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            srcval = (s16)((s8)fetch_data_byte(srcoffset));</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(0, 100%, 40%);">-            u32 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u8  *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                     srcval = (s16) ((s8) fetch_data_byte(srcoffset));</span><br><span style="color: hsl(120, 100%, 40%);">+                     DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            if (M.x86.mode & SYSMODE_PREFIX_DATA) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   u32 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u8 *srcreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = (s32)((s8)*srcreg);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            u16 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-            u8  *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = (s32) ((s8) * srcreg);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      u16 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+                 u8 *srcreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-            destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-            srcreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-            DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-            TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-            *destreg = (s16)((s8)*srcreg);</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%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+                       destreg = DECODE_RM_WORD_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                        DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+                 srcreg = DECODE_RM_BYTE_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+                 DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                        TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+                     *destreg = (s16) ((s8) * srcreg);</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%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1676,57 +1689,55 @@</span><br><span> ****************************************************************************/</span><br><span> static void x86emuOp2_movsx_word_R_RM(u8 X86EMU_UNUSED(op2))</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int mod, rl, rh;</span><br><span style="color: hsl(0, 100%, 40%);">-    uint srcoffset;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 *destreg;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 *srcreg;</span><br><span style="color: hsl(120, 100%, 40%);">+      int mod, rl, rh;</span><br><span style="color: hsl(120, 100%, 40%);">+      uint srcoffset;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 *destreg;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+   u16 *srcreg;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    START_OF_INSTR();</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_PRINTF("MOVSX\t");</span><br><span style="color: hsl(0, 100%, 40%);">-    FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (mod < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-        destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        srcval = (s32)((s16)fetch_data_word(srcoffset));</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        *destreg = srcval;</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {                     /* register to register */</span><br><span style="color: hsl(0, 100%, 40%);">-        destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF(",");</span><br><span style="color: hsl(0, 100%, 40%);">-        srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(0, 100%, 40%);">-        DECODE_PRINTF("\n");</span><br><span style="color: hsl(0, 100%, 40%);">-        TRACE_AND_STEP();</span><br><span style="color: hsl(0, 100%, 40%);">-        *destreg = (s32)((s16)*srcreg);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(0, 100%, 40%);">-    END_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+ START_OF_INSTR();</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_PRINTF("MOVSX\t");</span><br><span style="color: hsl(120, 100%, 40%);">+   FETCH_DECODE_MODRM(mod, rh, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (mod < 3) {</span><br><span style="color: hsl(120, 100%, 40%);">+             destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         srcoffset = decode_rmXX_address(mod, rl);</span><br><span style="color: hsl(120, 100%, 40%);">+             srcval = (s32) ((s16) fetch_data_word(srcoffset));</span><br><span style="color: hsl(120, 100%, 40%);">+            DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             *destreg = srcval;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else {        /* register to register */</span><br><span style="color: hsl(120, 100%, 40%);">+            destreg = DECODE_RM_LONG_REGISTER(rh);</span><br><span style="color: hsl(120, 100%, 40%);">+                DECODE_PRINTF(",");</span><br><span style="color: hsl(120, 100%, 40%);">+         srcreg = DECODE_RM_WORD_REGISTER(rl);</span><br><span style="color: hsl(120, 100%, 40%);">+         DECODE_PRINTF("\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                TRACE_AND_STEP();</span><br><span style="color: hsl(120, 100%, 40%);">+             *destreg = (s32) ((s16) * srcreg);</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span style="color: hsl(120, 100%, 40%);">+     DECODE_CLEAR_SEGOVR();</span><br><span style="color: hsl(120, 100%, 40%);">+        END_OF_INSTR();</span><br><span> }</span><br><span> </span><br><span> /***************************************************************************</span><br><span>  * Double byte operation code table:</span><br><span>  **************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void (*x86emu_optab2[256])(u8) =</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x00 */ x86emuOp2_illegal_op,  /* Group F (ring 0 PM)      */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x01 */ x86emuOp2_opc_01,      /* Group G (ring 0 PM)      */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x02 */ x86emuOp2_illegal_op,  /* lar (ring 0 PM)          */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x03 */ x86emuOp2_illegal_op,  /* lsl (ring 0 PM)          */</span><br><span style="color: hsl(120, 100%, 40%);">+void (*x86emu_optab2[256]) (u8) = {</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x00 */ x86emuOp2_illegal_op, /* Group F (ring 0 PM)      */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x01 */ x86emuOp2_opc_01,     /* Group G (ring 0 PM)      */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x02 */ x86emuOp2_illegal_op, /* lar (ring 0 PM)          */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x03 */ x86emuOp2_illegal_op, /* lsl (ring 0 PM)          */</span><br><span> /*  0x04 */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x05 */ x86emuOp2_illegal_op,  /* loadall (undocumented)   */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x06 */ x86emuOp2_illegal_op,  /* clts (ring 0 PM)         */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x07 */ x86emuOp2_illegal_op,  /* loadall (undocumented)   */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x08 */ x86emuOp2_invd,        /* invd (ring 0 PM)         */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x09 */ x86emuOp2_wbinvd,      /* wbinvd (ring 0 PM)       */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x05 */ x86emuOp2_illegal_op, /* loadall (undocumented)   */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x06 */ x86emuOp2_illegal_op, /* clts (ring 0 PM)         */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x07 */ x86emuOp2_illegal_op, /* loadall (undocumented)   */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x08 */ x86emuOp2_invd,       /* invd (ring 0 PM)         */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x09 */ x86emuOp2_wbinvd,     /* wbinvd (ring 0 PM)       */</span><br><span> /*  0x0a */ x86emuOp2_illegal_op,</span><br><span> /*  0x0b */ x86emuOp2_illegal_op,</span><br><span> /*  0x0c */ x86emuOp2_illegal_op,</span><br><span> /*  0x0d */ x86emuOp2_illegal_op,</span><br><span> /*  0x0e */ x86emuOp2_illegal_op,</span><br><span> /*  0x0f */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0x10 */ x86emuOp2_illegal_op,</span><br><span> /*  0x11 */ x86emuOp2_illegal_op,</span><br><span> /*  0x12 */ x86emuOp2_illegal_op,</span><br><span>@@ -1743,14 +1754,13 @@</span><br><span> /*  0x1d */ x86emuOp2_illegal_op,</span><br><span> /*  0x1e */ x86emuOp2_illegal_op,</span><br><span> /*  0x1f */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x20 */ x86emuOp2_illegal_op,  /* mov reg32,creg (ring 0 PM) */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x21 */ x86emuOp2_illegal_op,  /* mov reg32,dreg (ring 0 PM) */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x22 */ x86emuOp2_illegal_op,  /* mov creg,reg32 (ring 0 PM) */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x23 */ x86emuOp2_illegal_op,  /* mov dreg,reg32 (ring 0 PM) */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x24 */ x86emuOp2_illegal_op,  /* mov reg32,treg (ring 0 PM) */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x20 */ x86emuOp2_illegal_op, /* mov reg32,creg (ring 0 PM) */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x21 */ x86emuOp2_illegal_op, /* mov reg32,dreg (ring 0 PM) */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x22 */ x86emuOp2_illegal_op, /* mov creg,reg32 (ring 0 PM) */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x23 */ x86emuOp2_illegal_op, /* mov dreg,reg32 (ring 0 PM) */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x24 */ x86emuOp2_illegal_op, /* mov reg32,treg (ring 0 PM) */</span><br><span> /*  0x25 */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0x26 */ x86emuOp2_illegal_op,  /* mov treg,reg32 (ring 0 PM) */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0x26 */ x86emuOp2_illegal_op, /* mov treg,reg32 (ring 0 PM) */</span><br><span> /*  0x27 */ x86emuOp2_illegal_op,</span><br><span> /*  0x28 */ x86emuOp2_illegal_op,</span><br><span> /*  0x29 */ x86emuOp2_illegal_op,</span><br><span>@@ -1760,7 +1770,6 @@</span><br><span> /*  0x2d */ x86emuOp2_illegal_op,</span><br><span> /*  0x2e */ x86emuOp2_illegal_op,</span><br><span> /*  0x2f */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0x30 */ x86emuOp2_wrmsr,</span><br><span> /*  0x31 */ x86emuOp2_rdtsc,</span><br><span> /*  0x32 */ x86emuOp2_rdmsr,</span><br><span>@@ -1777,7 +1786,6 @@</span><br><span> /*  0x3d */ x86emuOp2_illegal_op,</span><br><span> /*  0x3e */ x86emuOp2_illegal_op,</span><br><span> /*  0x3f */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0x40 */ x86emuOp2_illegal_op,</span><br><span> /*  0x41 */ x86emuOp2_illegal_op,</span><br><span> /*  0x42 */ x86emuOp2_illegal_op,</span><br><span>@@ -1794,7 +1802,6 @@</span><br><span> /*  0x4d */ x86emuOp2_illegal_op,</span><br><span> /*  0x4e */ x86emuOp2_illegal_op,</span><br><span> /*  0x4f */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0x50 */ x86emuOp2_illegal_op,</span><br><span> /*  0x51 */ x86emuOp2_illegal_op,</span><br><span> /*  0x52 */ x86emuOp2_illegal_op,</span><br><span>@@ -1811,7 +1818,6 @@</span><br><span> /*  0x5d */ x86emuOp2_illegal_op,</span><br><span> /*  0x5e */ x86emuOp2_illegal_op,</span><br><span> /*  0x5f */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0x60 */ x86emuOp2_illegal_op,</span><br><span> /*  0x61 */ x86emuOp2_illegal_op,</span><br><span> /*  0x62 */ x86emuOp2_illegal_op,</span><br><span>@@ -1828,7 +1834,6 @@</span><br><span> /*  0x6d */ x86emuOp2_illegal_op,</span><br><span> /*  0x6e */ x86emuOp2_illegal_op,</span><br><span> /*  0x6f */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0x70 */ x86emuOp2_illegal_op,</span><br><span> /*  0x71 */ x86emuOp2_illegal_op,</span><br><span> /*  0x72 */ x86emuOp2_illegal_op,</span><br><span>@@ -1845,7 +1850,6 @@</span><br><span> /*  0x7d */ x86emuOp2_illegal_op,</span><br><span> /*  0x7e */ x86emuOp2_illegal_op,</span><br><span> /*  0x7f */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0x80 */ x86emuOp2_long_jump,</span><br><span> /*  0x81 */ x86emuOp2_long_jump,</span><br><span> /*  0x82 */ x86emuOp2_long_jump,</span><br><span>@@ -1862,7 +1866,6 @@</span><br><span> /*  0x8d */ x86emuOp2_long_jump,</span><br><span> /*  0x8e */ x86emuOp2_long_jump,</span><br><span> /*  0x8f */ x86emuOp2_long_jump,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0x90 */ x86emuOp2_set_byte,</span><br><span> /*  0x91 */ x86emuOp2_set_byte,</span><br><span> /*  0x92 */ x86emuOp2_set_byte,</span><br><span>@@ -1879,7 +1882,6 @@</span><br><span> /*  0x9d */ x86emuOp2_set_byte,</span><br><span> /*  0x9e */ x86emuOp2_set_byte,</span><br><span> /*  0x9f */ x86emuOp2_set_byte,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0xa0 */ x86emuOp2_push_FS,</span><br><span> /*  0xa1 */ x86emuOp2_pop_FS,</span><br><span> /*  0xa2 */ x86emuOp2_cpuid,</span><br><span>@@ -1896,9 +1898,8 @@</span><br><span> /*  0xad */ x86emuOp2_shrd_CL,</span><br><span> /*  0xae */ x86emuOp2_illegal_op,</span><br><span> /*  0xaf */ x86emuOp2_imul_R_RM,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0xb0 */ x86emuOp2_illegal_op,  /* TODO: cmpxchg */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0xb1 */ x86emuOp2_illegal_op,  /* TODO: cmpxchg */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0xb0 */ x86emuOp2_illegal_op, /* TODO: cmpxchg */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0xb1 */ x86emuOp2_illegal_op, /* TODO: cmpxchg */</span><br><span> /*  0xb2 */ x86emuOp2_lss_R_IMM,</span><br><span> /*  0xb3 */ x86emuOp2_btr_R,</span><br><span> /*  0xb4 */ x86emuOp2_lfs_R_IMM,</span><br><span>@@ -1913,9 +1914,8 @@</span><br><span> /*  0xbd */ x86emuOp2_bsr,</span><br><span> /*  0xbe */ x86emuOp2_movsx_byte_R_RM,</span><br><span> /*  0xbf */ x86emuOp2_movsx_word_R_RM,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0xc0 */ x86emuOp2_illegal_op,  /* TODO: xadd */</span><br><span style="color: hsl(0, 100%, 40%);">-/*  0xc1 */ x86emuOp2_illegal_op,  /* TODO: xadd */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0xc0 */ x86emuOp2_illegal_op, /* TODO: xadd */</span><br><span style="color: hsl(120, 100%, 40%);">+/*  0xc1 */ x86emuOp2_illegal_op, /* TODO: xadd */</span><br><span> /*  0xc2 */ x86emuOp2_illegal_op,</span><br><span> /*  0xc3 */ x86emuOp2_illegal_op,</span><br><span> /*  0xc4 */ x86emuOp2_illegal_op,</span><br><span>@@ -1930,7 +1930,6 @@</span><br><span> /*  0xcd */ x86emuOp2_bswap,</span><br><span> /*  0xce */ x86emuOp2_bswap,</span><br><span> /*  0xcf */ x86emuOp2_bswap,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0xd0 */ x86emuOp2_illegal_op,</span><br><span> /*  0xd1 */ x86emuOp2_illegal_op,</span><br><span> /*  0xd2 */ x86emuOp2_illegal_op,</span><br><span>@@ -1947,7 +1946,6 @@</span><br><span> /*  0xdd */ x86emuOp2_illegal_op,</span><br><span> /*  0xde */ x86emuOp2_illegal_op,</span><br><span> /*  0xdf */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0xe0 */ x86emuOp2_illegal_op,</span><br><span> /*  0xe1 */ x86emuOp2_illegal_op,</span><br><span> /*  0xe2 */ x86emuOp2_illegal_op,</span><br><span>@@ -1964,7 +1962,6 @@</span><br><span> /*  0xed */ x86emuOp2_illegal_op,</span><br><span> /*  0xee */ x86emuOp2_illegal_op,</span><br><span> /*  0xef */ x86emuOp2_illegal_op,</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /*  0xf0 */ x86emuOp2_illegal_op,</span><br><span> /*  0xf1 */ x86emuOp2_illegal_op,</span><br><span> /*  0xf2 */ x86emuOp2_illegal_op,</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/26359">change 26359</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/26359"/><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: I687b288b2a77129f8dfab3c0f2696438e76310f7 </div>
<div style="display:none"> Gerrit-Change-Number: 26359 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Elyes HAOUAS <ehaouas@noos.fr> </div>