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