<p>Elyes HAOUAS has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/26353">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">device/oprom/x86emu/prim_ops.c: Fix coding style<br><br>Change-Id: I010f3e02813d38293a7ab7fc84f60b8c2ec098a7<br>Signed-off-by: Elyes HAOUAS <ehaouas@noos.fr><br>---<br>M src/device/oprom/x86emu/prim_ops.c<br>1 file changed, 1,377 insertions(+), 1,415 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/53/26353/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/device/oprom/x86emu/prim_ops.c b/src/device/oprom/x86emu/prim_ops.c</span><br><span>index 8b2c38a..a110733 100644</span><br><span>--- a/src/device/oprom/x86emu/prim_ops.c</span><br><span>+++ b/src/device/oprom/x86emu/prim_ops.c</span><br><span>@@ -100,32 +100,30 @@</span><br><span> #define PRIM_OPS_NO_REDEFINE_ASM</span><br><span> #include "x86emui.h"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define abs(x) ({                               \</span><br><span style="color: hsl(0, 100%, 40%);">-                int __x = (x);                  \</span><br><span style="color: hsl(0, 100%, 40%);">-                (__x < 0) ? -__x : __x;         \</span><br><span style="color: hsl(0, 100%, 40%);">-        })</span><br><span style="color: hsl(120, 100%, 40%);">+#define abs(x) ({                                \</span><br><span style="color: hsl(120, 100%, 40%);">+             int __x = (x);                  \</span><br><span style="color: hsl(120, 100%, 40%);">+             (__x < 0) ? -__x : __x;              \</span><br><span style="color: hsl(120, 100%, 40%);">+     })</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#define labs(x) ({                              \</span><br><span style="color: hsl(0, 100%, 40%);">-                long __x = (x);                 \</span><br><span style="color: hsl(0, 100%, 40%);">-                (__x < 0) ? -__x : __x;         \</span><br><span style="color: hsl(0, 100%, 40%);">-        })</span><br><span style="color: hsl(120, 100%, 40%);">+#define labs(x) ({                              \</span><br><span style="color: hsl(120, 100%, 40%);">+             long __x = (x);                 \</span><br><span style="color: hsl(120, 100%, 40%);">+             (__x < 0) ? -__x : __x;              \</span><br><span style="color: hsl(120, 100%, 40%);">+     })</span><br><span> </span><br><span> /*------------------------- Global Variables ------------------------------*/</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-static u32 x86emu_parity_tab[8] =</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-    0x96696996,</span><br><span style="color: hsl(0, 100%, 40%);">-    0x69969669,</span><br><span style="color: hsl(0, 100%, 40%);">-    0x69969669,</span><br><span style="color: hsl(0, 100%, 40%);">-    0x96696996,</span><br><span style="color: hsl(0, 100%, 40%);">-    0x69969669,</span><br><span style="color: hsl(0, 100%, 40%);">-    0x96696996,</span><br><span style="color: hsl(0, 100%, 40%);">-    0x96696996,</span><br><span style="color: hsl(0, 100%, 40%);">-    0x69969669,</span><br><span style="color: hsl(120, 100%, 40%);">+static u32 x86emu_parity_tab[8] = {</span><br><span style="color: hsl(120, 100%, 40%);">+        0x96696996,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x69969669,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x69969669,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x96696996,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x69969669,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x96696996,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x96696996,</span><br><span style="color: hsl(120, 100%, 40%);">+   0x69969669,</span><br><span> };</span><br><span> </span><br><span> #define PARITY(x)   (((x86emu_parity_tab[(x) / 32] >> ((x) % 32)) & 1) == 0)</span><br><span style="color: hsl(0, 100%, 40%);">-#define XOR2(x)     (((x) ^ ((x)>>1)) & 0x1)</span><br><span style="color: hsl(120, 100%, 40%);">+#define XOR2(x)   (((x) ^ ((x)>>1)) & 0x1)</span><br><span> </span><br><span> /*----------------------------- Implementation ----------------------------*/</span><br><span> </span><br><span>@@ -139,76 +137,74 @@</span><br><span> </span><br><span> static void set_parity_flag(u32 res)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(PARITY(res & 0xFF), F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+  CONDITIONAL_SET_FLAG(PARITY(res & 0xFF), F_PF);</span><br><span> }</span><br><span> </span><br><span> static void set_szp_flags_8(u8 res)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(res & 0x80, F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(res == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_parity_flag(res);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(res & 0x80, F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+   CONDITIONAL_SET_FLAG(res == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+ set_parity_flag(res);</span><br><span> }</span><br><span> </span><br><span> static void set_szp_flags_16(u16 res)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(res == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_parity_flag(res);</span><br><span style="color: hsl(120, 100%, 40%);">+       CONDITIONAL_SET_FLAG(res & 0x8000, F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+ CONDITIONAL_SET_FLAG(res == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+ set_parity_flag(res);</span><br><span> }</span><br><span> </span><br><span> static void set_szp_flags_32(u32 res)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(res == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_parity_flag(res);</span><br><span style="color: hsl(120, 100%, 40%);">+   CONDITIONAL_SET_FLAG(res & 0x80000000, F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(res == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+ set_parity_flag(res);</span><br><span> }</span><br><span> </span><br><span> static void no_carry_byte_side_eff(u8 res)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_OF);</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_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8(res);</span><br><span style="color: hsl(120, 100%, 40%);">+     CLEAR_FLAG(F_OF);</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_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     set_szp_flags_8(res);</span><br><span> }</span><br><span> </span><br><span> static void no_carry_word_side_eff(u16 res)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_OF);</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_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16(res);</span><br><span style="color: hsl(120, 100%, 40%);">+   CLEAR_FLAG(F_OF);</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_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     set_szp_flags_16(res);</span><br><span> }</span><br><span> </span><br><span> static void no_carry_long_side_eff(u32 res)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_OF);</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_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  CLEAR_FLAG(F_OF);</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_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     set_szp_flags_32(res);</span><br><span> }</span><br><span> </span><br><span> static void calc_carry_chain(int bits, u32 d, u32 s, u32 res, int set_carry)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 cc;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 cc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    cc = (s & d) | ((~res) & (s | d));</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(XOR2(cc >> (bits - 2)), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (set_carry) {</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & (1 << bits), F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+  cc = (s & d) | ((~res) & (s | d));</span><br><span style="color: hsl(120, 100%, 40%);">+    CONDITIONAL_SET_FLAG(XOR2(cc >> (bits - 2)), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(cc & 0x8, F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (set_carry)</span><br><span style="color: hsl(120, 100%, 40%);">+                CONDITIONAL_SET_FLAG(res & (1 << bits), F_CF);</span><br><span> }</span><br><span> </span><br><span> static void calc_borrow_chain(int bits, u32 d, u32 s, u32 res, int set_carry)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 bc;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 bc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(XOR2(bc >> (bits - 2)), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (set_carry) {</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(bc & (1 << (bits - 1)), F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+      bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(XOR2(bc >> (bits - 2)), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     if (set_carry)</span><br><span style="color: hsl(120, 100%, 40%);">+                CONDITIONAL_SET_FLAG(bc & (1 << (bits - 1)), F_CF);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -217,19 +213,19 @@</span><br><span> ****************************************************************************/</span><br><span> u16 aaa_word(u16 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 res;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((d & 0xf) > 0x9 || ACCESS_FLAG(F_AF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        d += 0x6;</span><br><span style="color: hsl(0, 100%, 40%);">-        d += 0x100;</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_CF);</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_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    res = (u16)(d & 0xFF0F);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+  u16 res;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((d & 0xf) > 0x9 || ACCESS_FLAG(F_AF)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            d += 0x6;</span><br><span style="color: hsl(120, 100%, 40%);">+             d += 0x100;</span><br><span style="color: hsl(120, 100%, 40%);">+           SET_FLAG(F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_CF);</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_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     res = (u16)(d & 0xFF0F);</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -238,19 +234,19 @@</span><br><span> ****************************************************************************/</span><br><span> u16 aas_word(u16 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 res;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((d & 0xf) > 0x9 || ACCESS_FLAG(F_AF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        d -= 0x6;</span><br><span style="color: hsl(0, 100%, 40%);">-        d -= 0x100;</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_CF);</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_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    res = (u16)(d & 0xFF0F);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+    u16 res;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((d & 0xf) > 0x9 || ACCESS_FLAG(F_AF)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            d -= 0x6;</span><br><span style="color: hsl(120, 100%, 40%);">+             d -= 0x100;</span><br><span style="color: hsl(120, 100%, 40%);">+           SET_FLAG(F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_CF);</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_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     res = (u16)(d & 0xFF0F);</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -259,15 +255,15 @@</span><br><span> ****************************************************************************/</span><br><span> u16 aad_word(u16 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 l;</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 hb, lb;</span><br><span style="color: hsl(120, 100%, 40%);">+    u16 l;</span><br><span style="color: hsl(120, 100%, 40%);">+        u8 hb, lb;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    hb = (u8)((d >> 8) & 0xff);</span><br><span style="color: hsl(0, 100%, 40%);">-    lb = (u8)((d & 0xff));</span><br><span style="color: hsl(0, 100%, 40%);">-    l = (u16)((lb + 10 * hb) & 0xFF);</span><br><span style="color: hsl(120, 100%, 40%);">+        hb = (u8)((d >> 8) & 0xff);</span><br><span style="color: hsl(120, 100%, 40%);">+ lb = (u8)((d & 0xff));</span><br><span style="color: hsl(120, 100%, 40%);">+    l = (u16)((lb + 10 * hb) & 0xFF);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_byte_side_eff(l & 0xFF);</span><br><span style="color: hsl(0, 100%, 40%);">-    return l;</span><br><span style="color: hsl(120, 100%, 40%);">+       no_carry_byte_side_eff(l & 0xFF);</span><br><span style="color: hsl(120, 100%, 40%);">+ return l;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -276,14 +272,14 @@</span><br><span> ****************************************************************************/</span><br><span> u16 aam_word(u8 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 h, l;</span><br><span style="color: hsl(120, 100%, 40%);">+  u16 h, l;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    h = (u16)(d / 10);</span><br><span style="color: hsl(0, 100%, 40%);">-    l = (u16)(d % 10);</span><br><span style="color: hsl(0, 100%, 40%);">-    l |= (u16)(h << 8);</span><br><span style="color: hsl(120, 100%, 40%);">+        h = (u16)(d / 10);</span><br><span style="color: hsl(120, 100%, 40%);">+    l = (u16)(d % 10);</span><br><span style="color: hsl(120, 100%, 40%);">+    l |= (u16)(h << 8);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_byte_side_eff(l & 0xFF);</span><br><span style="color: hsl(0, 100%, 40%);">-    return l;</span><br><span style="color: hsl(120, 100%, 40%);">+   no_carry_byte_side_eff(l & 0xFF);</span><br><span style="color: hsl(120, 100%, 40%);">+ return l;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -292,15 +288,16 @@</span><br><span> ****************************************************************************/</span><br><span> u8 adc_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + s;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (ACCESS_FLAG(F_CF)) res++;</span><br><span style="color: hsl(120, 100%, 40%);">+      res = d + s;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(120, 100%, 40%);">+                res++;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(8,s,d,res,1);</span><br><span style="color: hsl(120, 100%, 40%);">+ set_szp_flags_8(res);</span><br><span style="color: hsl(120, 100%, 40%);">+ calc_carry_chain(8, s, d, res, 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -309,16 +306,16 @@</span><br><span> ****************************************************************************/</span><br><span> u16 adc_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + s;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(0, 100%, 40%);">-        res++;</span><br><span style="color: hsl(120, 100%, 40%);">+       res = d + s;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(120, 100%, 40%);">+                res++;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(16,s,d,res,1);</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+   calc_carry_chain(16, s, d, res, 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+   return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -327,26 +324,26 @@</span><br><span> ****************************************************************************/</span><br><span> u32 adc_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 lo;    /* all operands in native machine order */</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 hi;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 lo; /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 hi;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    lo = (d & 0xFFFF) + (s & 0xFFFF);</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + s;</span><br><span style="color: hsl(120, 100%, 40%);">+     lo = (d & 0xFFFF) + (s & 0xFFFF);</span><br><span style="color: hsl(120, 100%, 40%);">+     res = d + s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (ACCESS_FLAG(F_CF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        lo++;</span><br><span style="color: hsl(0, 100%, 40%);">-        res++;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+  if (ACCESS_FLAG(F_CF)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              lo++;</span><br><span style="color: hsl(120, 100%, 40%);">+         res++;</span><br><span style="color: hsl(120, 100%, 40%);">+        }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    hi = (lo >> 16) + (d >> 16) + (s >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+   hi = (lo >> 16) + (d >> 16) + (s >> 16);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(32,s,d,res,0);</span><br><span style="color: hsl(120, 100%, 40%);">+   set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        calc_carry_chain(32, s, d, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(hi & 0x10000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+      CONDITIONAL_SET_FLAG(hi & 0x10000, F_CF);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+      return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -355,13 +352,13 @@</span><br><span> ****************************************************************************/</span><br><span> u8 add_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(8,s,d,res,1);</span><br><span style="color: hsl(120, 100%, 40%);">+        res = d + s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+     calc_carry_chain(8, s, d, res, 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -370,13 +367,13 @@</span><br><span> ****************************************************************************/</span><br><span> u16 add_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(16,s,d,res,1);</span><br><span style="color: hsl(120, 100%, 40%);">+     res = d + s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+   calc_carry_chain(16, s, d, res, 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+   return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -385,15 +382,15 @@</span><br><span> ****************************************************************************/</span><br><span> u32 add_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(32,s,d,res,0);</span><br><span style="color: hsl(120, 100%, 40%);">+     res = d + s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        calc_carry_chain(32, s, d, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(res < d || res < s, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+      CONDITIONAL_SET_FLAG(res < d || res < s, F_CF);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+      return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -402,12 +399,12 @@</span><br><span> ****************************************************************************/</span><br><span> u8 and_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 res;    /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+       u8 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d & s;</span><br><span style="color: hsl(120, 100%, 40%);">+    res = d & s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_byte_side_eff(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+   no_carry_byte_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -416,12 +413,12 @@</span><br><span> ****************************************************************************/</span><br><span> u16 and_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+    u16 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d & s;</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d & s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_word_side_eff(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+   no_carry_word_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -430,11 +427,11 @@</span><br><span> ****************************************************************************/</span><br><span> u32 and_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d & s;</span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_long_side_eff(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+    res = d & s;</span><br><span style="color: hsl(120, 100%, 40%);">+      no_carry_long_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -443,13 +440,13 @@</span><br><span> ****************************************************************************/</span><br><span> u8 cmp_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(8, d, s, res, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+     calc_borrow_chain(8, d, s, res, 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return d;</span><br><span style="color: hsl(120, 100%, 40%);">+  return d;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -458,13 +455,13 @@</span><br><span> ****************************************************************************/</span><br><span> u16 cmp_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(16, d, s, res, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+        res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+   calc_borrow_chain(16, d, s, res, 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return d;</span><br><span style="color: hsl(120, 100%, 40%);">+ return d;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -473,13 +470,13 @@</span><br><span> ****************************************************************************/</span><br><span> u32 cmp_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(32, d, s, res, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+     res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        calc_borrow_chain(32, d, s, res, 1);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return d;</span><br><span style="color: hsl(120, 100%, 40%);">+ return d;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -488,17 +485,17 @@</span><br><span> ****************************************************************************/</span><br><span> u8 daa_byte(u8 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((d & 0xf) > 9 || ACCESS_FLAG(F_AF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        res += 6;</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    if (res > 0x9F || ACCESS_FLAG(F_CF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        res += 0x60;</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+  if ((d & 0xf) > 9 || ACCESS_FLAG(F_AF)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              res += 6;</span><br><span style="color: hsl(120, 100%, 40%);">+             SET_FLAG(F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (res > 0x9F || ACCESS_FLAG(F_CF)) {</span><br><span style="color: hsl(120, 100%, 40%);">+             res += 0x60;</span><br><span style="color: hsl(120, 100%, 40%);">+          SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -507,16 +504,16 @@</span><br><span> ****************************************************************************/</span><br><span> u8 das_byte(u8 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((d & 0xf) > 9 || ACCESS_FLAG(F_AF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        d -= 6;</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    if (d > 0x9F || ACCESS_FLAG(F_CF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        d -= 0x60;</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8(d);</span><br><span style="color: hsl(0, 100%, 40%);">-    return d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((d & 0xf) > 9 || ACCESS_FLAG(F_AF)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              d -= 6;</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (d > 0x9F || ACCESS_FLAG(F_CF)) {</span><br><span style="color: hsl(120, 100%, 40%);">+               d -= 0x60;</span><br><span style="color: hsl(120, 100%, 40%);">+            SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     set_szp_flags_8(d);</span><br><span style="color: hsl(120, 100%, 40%);">+   return d;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -525,13 +522,13 @@</span><br><span> ****************************************************************************/</span><br><span> u8 dec_byte(u8 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(8, d, 1, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+     calc_borrow_chain(8, d, 1, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+    return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -540,13 +537,13 @@</span><br><span> ****************************************************************************/</span><br><span> u16 dec_word(u16 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(16, d, 1, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+        res = d - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+   calc_borrow_chain(16, d, 1, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+  return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -555,14 +552,14 @@</span><br><span> ****************************************************************************/</span><br><span> u32 dec_long(u32 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+       res = d - 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(32, d, 1, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        calc_borrow_chain(32, d, 1, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+       return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -571,13 +568,13 @@</span><br><span> ****************************************************************************/</span><br><span> u8 inc_byte(u8 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(8, d, 1, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+    res = d + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+     calc_carry_chain(8, d, 1, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -586,13 +583,13 @@</span><br><span> ****************************************************************************/</span><br><span> u16 inc_word(u16 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(16, d, 1, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ res = d + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+   calc_carry_chain(16, d, 1, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+   return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -601,13 +598,13 @@</span><br><span> ****************************************************************************/</span><br><span> u32 inc_long(u32 d)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d + 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_carry_chain(32, d, 1, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+      res = d + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        calc_carry_chain(32, d, 1, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+        return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -616,12 +613,12 @@</span><br><span> ****************************************************************************/</span><br><span> u8 or_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 res;    /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+        u8 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d | s;</span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_byte_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        res = d | s;</span><br><span style="color: hsl(120, 100%, 40%);">+  no_carry_byte_side_eff(res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+       return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -630,11 +627,11 @@</span><br><span> ****************************************************************************/</span><br><span> u16 or_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+     u16 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d | s;</span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_word_side_eff(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+        res = d | s;</span><br><span style="color: hsl(120, 100%, 40%);">+  no_carry_word_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -643,11 +640,11 @@</span><br><span> ****************************************************************************/</span><br><span> u32 or_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d | s;</span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_long_side_eff(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+        res = d | s;</span><br><span style="color: hsl(120, 100%, 40%);">+  no_carry_long_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -656,14 +653,14 @@</span><br><span> ****************************************************************************/</span><br><span> u8 neg_byte(u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 res;</span><br><span style="color: hsl(120, 100%, 40%);">+   u8 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(s != 0, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    res = (u8)-s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(8, 0, s, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+   CONDITIONAL_SET_FLAG(s != 0, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+   res = (u8)-s;</span><br><span style="color: hsl(120, 100%, 40%);">+ set_szp_flags_8(res);</span><br><span style="color: hsl(120, 100%, 40%);">+ calc_borrow_chain(8, 0, s, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+        return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -672,14 +669,14 @@</span><br><span> ****************************************************************************/</span><br><span> u16 neg_word(u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 res;</span><br><span style="color: hsl(120, 100%, 40%);">+        u16 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(s != 0, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    res = (u16)-s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(16, 0, s, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+  CONDITIONAL_SET_FLAG(s != 0, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+   res = (u16)-s;</span><br><span style="color: hsl(120, 100%, 40%);">+        set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+   calc_borrow_chain(16, 0, s, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+       return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -688,14 +685,14 @@</span><br><span> ****************************************************************************/</span><br><span> u32 neg_long(u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(s != 0, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    res = (u32)-s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    calc_borrow_chain(32, 0, s, res, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+       CONDITIONAL_SET_FLAG(s != 0, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+   res = (u32)-s;</span><br><span style="color: hsl(120, 100%, 40%);">+        set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        calc_borrow_chain(32, 0, s, res, 0);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+       return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -704,7 +701,7 @@</span><br><span> ****************************************************************************/</span><br><span> u8 not_byte(u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    return ~s;</span><br><span style="color: hsl(120, 100%, 40%);">+  return ~s;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -713,7 +710,7 @@</span><br><span> ****************************************************************************/</span><br><span> u16 not_word(u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    return ~s;</span><br><span style="color: hsl(120, 100%, 40%);">+ return ~s;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -722,7 +719,7 @@</span><br><span> ****************************************************************************/</span><br><span> u32 not_long(u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    return ~s;</span><br><span style="color: hsl(120, 100%, 40%);">+ return ~s;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -731,71 +728,70 @@</span><br><span> ****************************************************************************/</span><br><span> u8 rcl_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int res, cnt, mask, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+     unsigned int res, cnt, mask, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* s is the rotate distance.  It varies from 0 - 8. */</span><br><span style="color: hsl(0, 100%, 40%);">-    /* have</span><br><span style="color: hsl(120, 100%, 40%);">+     /* s is the rotate distance.  It varies from 0 - 8. */</span><br><span style="color: hsl(120, 100%, 40%);">+        /* have</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       CF  B_7 B_6 B_5 B_4 B_3 B_2 B_1 B_0</span><br><span style="color: hsl(120, 100%, 40%);">+    CF  B_7 B_6 B_5 B_4 B_3 B_2 B_1 B_0</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       want to rotate through the carry by "s" bits.  We could</span><br><span style="color: hsl(0, 100%, 40%);">-       loop, but that's inefficient.  So the width is 9,</span><br><span style="color: hsl(0, 100%, 40%);">-       and we split into three parts:</span><br><span style="color: hsl(120, 100%, 40%);">+      want to rotate through the carry by "s" bits.  We could</span><br><span style="color: hsl(120, 100%, 40%);">+     loop, but that's inefficient.  So the width is 9,</span><br><span style="color: hsl(120, 100%, 40%);">+         and we split into three parts:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       The new carry flag   (was B_n)</span><br><span style="color: hsl(0, 100%, 40%);">-       the stuff in B_n-1 .. B_0</span><br><span style="color: hsl(0, 100%, 40%);">-       the stuff in B_7 .. B_n+1</span><br><span style="color: hsl(120, 100%, 40%);">+       The new carry flag   (was B_n)</span><br><span style="color: hsl(120, 100%, 40%);">+        the stuff in B_n-1 .. B_0</span><br><span style="color: hsl(120, 100%, 40%);">+     the stuff in B_7 .. B_n+1</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       The new rotate is done mod 9, and given this,</span><br><span style="color: hsl(0, 100%, 40%);">-       for a rotation of n bits (mod 9) the new carry flag is</span><br><span style="color: hsl(0, 100%, 40%);">-       then located n bits from the MSB.  The low part is</span><br><span style="color: hsl(0, 100%, 40%);">-       then shifted up cnt bits, and the high part is or'd</span><br><span style="color: hsl(0, 100%, 40%);">-       in.  Using CAPS for new values, and lowercase for the</span><br><span style="color: hsl(0, 100%, 40%);">-       original values, this can be expressed as:</span><br><span style="color: hsl(120, 100%, 40%);">+    The new rotate is done mod 9, and given this,</span><br><span style="color: hsl(120, 100%, 40%);">+         for a rotation of n bits (mod 9) the new carry flag is</span><br><span style="color: hsl(120, 100%, 40%);">+        then located n bits from the MSB.  The low part is</span><br><span style="color: hsl(120, 100%, 40%);">+    then shifted up cnt bits, and the high part is or'd</span><br><span style="color: hsl(120, 100%, 40%);">+       in.  Using CAPS for new values, and lowercase for the</span><br><span style="color: hsl(120, 100%, 40%);">+         original values, this can be expressed as:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       IF n > 0</span><br><span style="color: hsl(0, 100%, 40%);">-       1) CF <-  b_(8-n)</span><br><span style="color: hsl(0, 100%, 40%);">-       2) B_(7) .. B_(n)  <-  b_(8-(n+1)) .. b_0</span><br><span style="color: hsl(0, 100%, 40%);">-       3) B_(n-1) <- cf</span><br><span style="color: hsl(0, 100%, 40%);">-       4) B_(n-2) .. B_0 <-  b_7 .. b_(8-(n-1))</span><br><span style="color: hsl(0, 100%, 40%);">-     */</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 9) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* extract the new CARRY FLAG. */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* CF <-  b_(8-n)             */</span><br><span style="color: hsl(0, 100%, 40%);">-        cf = (d >> (8 - cnt)) & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+          IF n > 0</span><br><span style="color: hsl(120, 100%, 40%);">+           1) CF <-  b_(8-n)</span><br><span style="color: hsl(120, 100%, 40%);">+          2) B_(7) .. B_(n)  <-  b_(8-(n+1)) .. b_0</span><br><span style="color: hsl(120, 100%, 40%);">+          3) B_(n-1) <- cf</span><br><span style="color: hsl(120, 100%, 40%);">+           4) B_(n-2) .. B_0 <-  b_7 .. b_(8-(n-1))</span><br><span style="color: hsl(120, 100%, 40%);">+         */</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 9) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* extract the new CARRY FLAG. */</span><br><span style="color: hsl(120, 100%, 40%);">+             /* CF <-  b_(8-n)                     */</span><br><span style="color: hsl(120, 100%, 40%);">+           cf = (d >> (8 - cnt)) & 0x1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* get the low stuff which rotated</span><br><span style="color: hsl(0, 100%, 40%);">-           into the range B_7 .. B_cnt */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* B_(7) .. B_(n)  <-  b_(8-(n+1)) .. b_0  */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* note that the right hand side done by the mask */</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << cnt) & 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+           /* get the low stuff which rotated</span><br><span style="color: hsl(120, 100%, 40%);">+               into the range B_7 .. B_cnt */</span><br><span style="color: hsl(120, 100%, 40%);">+             /* B_(7) .. B_(n)  <-  b_(8-(n+1)) .. b_0  */</span><br><span style="color: hsl(120, 100%, 40%);">+              /* note that the right hand side done by the mask */</span><br><span style="color: hsl(120, 100%, 40%);">+          res = (d << cnt) & 0xff;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* now the high stuff which rotated around</span><br><span style="color: hsl(0, 100%, 40%);">-           into the positions B_cnt-2 .. B_0 */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* B_(n-2) .. B_0 <-  b_7 .. b_(8-(n-1)) */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* shift it downward, 7-(n-2) = 9-n positions.</span><br><span style="color: hsl(0, 100%, 40%);">-           and mask off the result before or'ing in.</span><br><span style="color: hsl(0, 100%, 40%);">-         */</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (cnt - 1)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (9 - cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+             /* now the high stuff which rotated around</span><br><span style="color: hsl(120, 100%, 40%);">+               into the positions B_cnt-2 .. B_0 */</span><br><span style="color: hsl(120, 100%, 40%);">+               /* B_(n-2) .. B_0 <-  b_7 .. b_(8-(n-1)) */</span><br><span style="color: hsl(120, 100%, 40%);">+                /* shift it downward, 7-(n-2) = 9-n positions.</span><br><span style="color: hsl(120, 100%, 40%);">+                   and mask off the result before or'ing in.</span><br><span style="color: hsl(120, 100%, 40%);">+               */</span><br><span style="color: hsl(120, 100%, 40%);">+           mask = (1 << (cnt - 1)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            res |= (d >> (9 - cnt)) & mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* if the carry flag was set, or it in.  */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (ACCESS_FLAG(F_CF)) {     /* carry flag is set */</span><br><span style="color: hsl(0, 100%, 40%);">-            /*  B_(n-1) <- cf */</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= 1 << (cnt - 1);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, based on the variable "cf" */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        /* OVERFLOW is set *IFF* cnt==1, then it is the</span><br><span style="color: hsl(0, 100%, 40%);">-           xor of CF and the most significant bit.  Blecck. */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* parenthesized this expression since it appears to</span><br><span style="color: hsl(0, 100%, 40%);">-           be causing OF to be missed */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 6) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                             F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                /* if the carry flag was set, or it in.  */</span><br><span style="color: hsl(120, 100%, 40%);">+           if (ACCESS_FLAG(F_CF))   /* carry flag is set */</span><br><span style="color: hsl(120, 100%, 40%);">+                      /*  B_(n-1) <- cf */</span><br><span style="color: hsl(120, 100%, 40%);">+                       res |= 1 << (cnt - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+          /* set the new carry flag, based on the variable "cf" */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               /* OVERFLOW is set *IFF* cnt==1, then it is the</span><br><span style="color: hsl(120, 100%, 40%);">+                  xor of CF and the most significant bit.  Blecck. */</span><br><span style="color: hsl(120, 100%, 40%);">+                /* parenthesized this expression since it appears to</span><br><span style="color: hsl(120, 100%, 40%);">+             be causing OF to be missed */</span><br><span style="color: hsl(120, 100%, 40%);">+              CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 6) & 0x2)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                  F_OF);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -804,22 +800,21 @@</span><br><span> ****************************************************************************/</span><br><span> u16 rcl_word(u16 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int res, cnt, mask, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+      unsigned int res, cnt, mask, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 17) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cf = (d >> (16 - cnt)) & 0x1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << cnt) & 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (cnt - 1)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (17 - cnt)) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (ACCESS_FLAG(F_CF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= 1 << (cnt - 1);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 14) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                             F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 17) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            cf = (d >> (16 - cnt)) & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+               res = (d << cnt) & 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+          mask = (1 << (cnt - 1)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            res |= (d >> (17 - cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(120, 100%, 40%);">+                        res |= 1 << (cnt - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+          CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 14) & 0x2)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -828,22 +823,21 @@</span><br><span> ****************************************************************************/</span><br><span> u32 rcl_long(u32 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res, cnt, mask, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 res, cnt, mask, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 33) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cf = (d >> (32 - cnt)) & 0x1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << cnt) & 0xffffffff;</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (cnt - 1)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (33 - cnt)) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (ACCESS_FLAG(F_CF)) {     /* carry flag is set */</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= 1 << (cnt - 1);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 30) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                             F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+ res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 33) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            cf = (d >> (32 - cnt)) & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+               res = (d << cnt) & 0xffffffff;</span><br><span style="color: hsl(120, 100%, 40%);">+              mask = (1 << (cnt - 1)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            res |= (d >> (33 - cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            if (ACCESS_FLAG(F_CF)) /* carry flag is set */</span><br><span style="color: hsl(120, 100%, 40%);">+                        res |= 1 << (cnt - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+          CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               CONDITIONAL_SET_FLAG(cnt == 1 && XOR2(cf + ((res >> 30) & 0x2)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                     F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -852,82 +846,80 @@</span><br><span> ****************************************************************************/</span><br><span> u8 rcr_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res, cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 mask, cf, ocf = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 res, cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 mask, cf, ocf = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* rotate right through carry */</span><br><span style="color: hsl(0, 100%, 40%);">-    /*</span><br><span style="color: hsl(0, 100%, 40%);">-       s is the rotate distance.  It varies from 0 - 8.</span><br><span style="color: hsl(0, 100%, 40%);">-       d is the byte object rotated.</span><br><span style="color: hsl(120, 100%, 40%);">+       /* rotate right through carry */</span><br><span style="color: hsl(120, 100%, 40%);">+      /*</span><br><span style="color: hsl(120, 100%, 40%);">+       s is the rotate distance.  It varies from 0 - 8.</span><br><span style="color: hsl(120, 100%, 40%);">+      d is the byte object rotated.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       have</span><br><span style="color: hsl(120, 100%, 40%);">+          have</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       CF  B_7 B_6 B_5 B_4 B_3 B_2 B_1 B_0</span><br><span style="color: hsl(120, 100%, 40%);">+    CF  B_7 B_6 B_5 B_4 B_3 B_2 B_1 B_0</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       The new rotate is done mod 9, and given this,</span><br><span style="color: hsl(0, 100%, 40%);">-       for a rotation of n bits (mod 9) the new carry flag is</span><br><span style="color: hsl(0, 100%, 40%);">-       then located n bits from the LSB.  The low part is</span><br><span style="color: hsl(0, 100%, 40%);">-       then shifted up cnt bits, and the high part is or'd</span><br><span style="color: hsl(0, 100%, 40%);">-       in.  Using CAPS for new values, and lowercase for the</span><br><span style="color: hsl(0, 100%, 40%);">-       original values, this can be expressed as:</span><br><span style="color: hsl(120, 100%, 40%);">+          The new rotate is done mod 9, and given this,</span><br><span style="color: hsl(120, 100%, 40%);">+         for a rotation of n bits (mod 9) the new carry flag is</span><br><span style="color: hsl(120, 100%, 40%);">+        then located n bits from the LSB.  The low part is</span><br><span style="color: hsl(120, 100%, 40%);">+    then shifted up cnt bits, and the high part is or'd</span><br><span style="color: hsl(120, 100%, 40%);">+       in.  Using CAPS for new values, and lowercase for the</span><br><span style="color: hsl(120, 100%, 40%);">+         original values, this can be expressed as:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       IF n > 0</span><br><span style="color: hsl(0, 100%, 40%);">-       1) CF <-  b_(n-1)</span><br><span style="color: hsl(0, 100%, 40%);">-       2) B_(8-(n+1)) .. B_(0)  <-  b_(7) .. b_(n)</span><br><span style="color: hsl(0, 100%, 40%);">-       3) B_(8-n) <- cf</span><br><span style="color: hsl(0, 100%, 40%);">-       4) B_(7) .. B_(8-(n-1)) <-  b_(n-2) .. b_(0)</span><br><span style="color: hsl(0, 100%, 40%);">-     */</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 9) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* extract the new CARRY FLAG. */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* CF <-  b_(n-1)              */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & 0x1;</span><br><span style="color: hsl(0, 100%, 40%);">-            /* note hackery here.  Access_flag(..) evaluates to either</span><br><span style="color: hsl(0, 100%, 40%);">-               0 if flag not set</span><br><span style="color: hsl(0, 100%, 40%);">-               non-zero if flag is set.</span><br><span style="color: hsl(0, 100%, 40%);">-               doing access_flag(..) != 0 casts that into either</span><br><span style="color: hsl(0, 100%, 40%);">-               0..1 in any representation of the flags register</span><br><span style="color: hsl(0, 100%, 40%);">-               (i.e. packed bit array or unpacked.)</span><br><span style="color: hsl(0, 100%, 40%);">-             */</span><br><span style="color: hsl(0, 100%, 40%);">-            ocf = ACCESS_FLAG(F_CF) != 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = (d >> (cnt - 1)) & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+      IF n > 0</span><br><span style="color: hsl(120, 100%, 40%);">+           1) CF <-  b_(n-1)</span><br><span style="color: hsl(120, 100%, 40%);">+          2) B_(8-(n+1)) .. B_(0)  <-  b_(7) .. b_(n)</span><br><span style="color: hsl(120, 100%, 40%);">+        3) B_(8-n) <- cf</span><br><span style="color: hsl(120, 100%, 40%);">+           4) B_(7) .. B_(8-(n-1)) <-  b_(n-2) .. b_(0)</span><br><span style="color: hsl(120, 100%, 40%);">+     */</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 9) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* extract the new CARRY FLAG. */</span><br><span style="color: hsl(120, 100%, 40%);">+             /* CF <-  b_(n-1)                      */</span><br><span style="color: hsl(120, 100%, 40%);">+          if (cnt == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       cf = d & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* note hackery here.  Access_flag(..) evaluates to either</span><br><span style="color: hsl(120, 100%, 40%);">+                       0 if flag not set</span><br><span style="color: hsl(120, 100%, 40%);">+                     non-zero if flag is set.</span><br><span style="color: hsl(120, 100%, 40%);">+                      doing access_flag(..) != 0 casts that into either</span><br><span style="color: hsl(120, 100%, 40%);">+                     0..1 in any representation of the flags register</span><br><span style="color: hsl(120, 100%, 40%);">+                      (i.e. packed bit array or unpacked.)</span><br><span style="color: hsl(120, 100%, 40%);">+                        */</span><br><span style="color: hsl(120, 100%, 40%);">+                   ocf = ACCESS_FLAG(F_CF) != 0;</span><br><span style="color: hsl(120, 100%, 40%);">+         } else</span><br><span style="color: hsl(120, 100%, 40%);">+                        cf = (d >> (cnt - 1)) & 0x1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* B_(8-(n+1)) .. B_(0)  <-  b_(7) .. b_n  */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* note that the right hand side done by the mask</span><br><span style="color: hsl(0, 100%, 40%);">-           This is effectively done by shifting the</span><br><span style="color: hsl(0, 100%, 40%);">-           object to the right.  The result must be masked,</span><br><span style="color: hsl(0, 100%, 40%);">-           in case the object came in and was treated</span><br><span style="color: hsl(0, 100%, 40%);">-           as a negative number.  Needed??? */</span><br><span style="color: hsl(120, 100%, 40%);">+          /* B_(8-(n+1)) .. B_(0)  <-  b_(7) .. b_n  */</span><br><span style="color: hsl(120, 100%, 40%);">+              /* note that the right hand side done by the mask</span><br><span style="color: hsl(120, 100%, 40%);">+                This is effectively done by shifting the</span><br><span style="color: hsl(120, 100%, 40%);">+              object to the right.  The result must be masked,</span><br><span style="color: hsl(120, 100%, 40%);">+              in case the object came in and was treated</span><br><span style="color: hsl(120, 100%, 40%);">+            as a negative number.  Needed??? */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (8 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d >> cnt) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                mask = (1 << (8 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            res = (d >> cnt) & mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* now the high stuff which rotated around</span><br><span style="color: hsl(0, 100%, 40%);">-           into the positions B_cnt-2 .. B_0 */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* B_(7) .. B_(8-(n-1)) <-  b_(n-2) .. b_(0) */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* shift it downward, 7-(n-2) = 9-n positions.</span><br><span style="color: hsl(0, 100%, 40%);">-           and mask off the result before or'ing in.</span><br><span style="color: hsl(0, 100%, 40%);">-         */</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d << (9 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+              /* now the high stuff which rotated around</span><br><span style="color: hsl(120, 100%, 40%);">+               into the positions B_cnt-2 .. B_0 */</span><br><span style="color: hsl(120, 100%, 40%);">+               /* B_(7) .. B_(8-(n-1)) <-  b_(n-2) .. b_(0) */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* shift it downward, 7-(n-2) = 9-n positions.</span><br><span style="color: hsl(120, 100%, 40%);">+                   and mask off the result before or'ing in.</span><br><span style="color: hsl(120, 100%, 40%);">+               */</span><br><span style="color: hsl(120, 100%, 40%);">+           res |= (d << (9 - cnt));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* if the carry flag was set, or it in.  */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (ACCESS_FLAG(F_CF)) {     /* carry flag is set */</span><br><span style="color: hsl(0, 100%, 40%);">-            /*  B_(8-n) <- cf */</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= 1 << (8 - cnt);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, based on the variable "cf" */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        /* OVERFLOW is set *IFF* cnt==1, then it is the</span><br><span style="color: hsl(0, 100%, 40%);">-           xor of CF and the most significant bit.  Blecck. */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* parenthesized... */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 6) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                                 F_OF);</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%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+              /* if the carry flag was set, or it in.  */</span><br><span style="color: hsl(120, 100%, 40%);">+           if (ACCESS_FLAG(F_CF)) /* carry flag is set */</span><br><span style="color: hsl(120, 100%, 40%);">+                        /*  B_(8-n) <- cf */</span><br><span style="color: hsl(120, 100%, 40%);">+                       res |= 1 << (8 - cnt);</span><br><span style="color: hsl(120, 100%, 40%);">+          /* set the new carry flag, based on the variable "cf" */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               /* OVERFLOW is set *IFF* cnt==1, then it is the</span><br><span style="color: hsl(120, 100%, 40%);">+                  xor of CF and the most significant bit.  Blecck. */</span><br><span style="color: hsl(120, 100%, 40%);">+                /* parenthesized... */</span><br><span style="color: hsl(120, 100%, 40%);">+                if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 6) & 0x2)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                           F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -936,30 +928,28 @@</span><br><span> ****************************************************************************/</span><br><span> u16 rcr_word(u16 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res, cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 mask, cf, ocf = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 res, cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 mask, cf, ocf = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* rotate right through carry */</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 17) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & 0x1;</span><br><span style="color: hsl(0, 100%, 40%);">-            ocf = ACCESS_FLAG(F_CF) != 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = (d >> (cnt - 1)) & 0x1;</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (16 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d >> cnt) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d << (17 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-        if (ACCESS_FLAG(F_CF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= 1 << (16 - cnt);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 14) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                                 F_OF);</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%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+   /* rotate right through carry */</span><br><span style="color: hsl(120, 100%, 40%);">+      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 17) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (cnt == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       cf = d & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+                     ocf = ACCESS_FLAG(F_CF) != 0;</span><br><span style="color: hsl(120, 100%, 40%);">+         } else</span><br><span style="color: hsl(120, 100%, 40%);">+                        cf = (d >> (cnt - 1)) & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+                mask = (1 << (16 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           res = (d >> cnt) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            res |= (d << (17 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+               if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(120, 100%, 40%);">+                        res |= 1 << (16 - cnt);</span><br><span style="color: hsl(120, 100%, 40%);">+         CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 14) & 0x2)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                          F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -968,31 +958,29 @@</span><br><span> ****************************************************************************/</span><br><span> u32 rcr_long(u32 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res, cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 mask, cf, ocf = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 res, cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 mask, cf, ocf = 0;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* rotate right through carry */</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 33) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & 0x1;</span><br><span style="color: hsl(0, 100%, 40%);">-            ocf = ACCESS_FLAG(F_CF) != 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = (d >> (cnt - 1)) & 0x1;</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (32 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d >> cnt) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt != 1)</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= (d << (33 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-        if (ACCESS_FLAG(F_CF)) {     /* carry flag is set */</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= 1 << (32 - cnt);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 30) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                                 F_OF);</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%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+   /* rotate right through carry */</span><br><span style="color: hsl(120, 100%, 40%);">+      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 33) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (cnt == 1) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       cf = d & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+                     ocf = ACCESS_FLAG(F_CF) != 0;</span><br><span style="color: hsl(120, 100%, 40%);">+         } else</span><br><span style="color: hsl(120, 100%, 40%);">+                        cf = (d >> (cnt - 1)) & 0x1;</span><br><span style="color: hsl(120, 100%, 40%);">+                mask = (1 << (32 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           res = (d >> cnt) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            if (cnt != 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 res |= (d << (33 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+               if (ACCESS_FLAG(F_CF)) /* carry flag is set */</span><br><span style="color: hsl(120, 100%, 40%);">+                        res |= 1 << (32 - cnt);</span><br><span style="color: hsl(120, 100%, 40%);">+         CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(XOR2(ocf + ((d >> 30) & 0x2)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                                          F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1001,47 +989,45 @@</span><br><span> ****************************************************************************/</span><br><span> u8 rol_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int res, cnt, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+       unsigned int res, cnt, mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* rotate left */</span><br><span style="color: hsl(0, 100%, 40%);">-    /*</span><br><span style="color: hsl(0, 100%, 40%);">-       s is the rotate distance.  It varies from 0 - 8.</span><br><span style="color: hsl(0, 100%, 40%);">-       d is the byte object rotated.</span><br><span style="color: hsl(120, 100%, 40%);">+        /* rotate left */</span><br><span style="color: hsl(120, 100%, 40%);">+     /*</span><br><span style="color: hsl(120, 100%, 40%);">+       s is the rotate distance.  It varies from 0 - 8.</span><br><span style="color: hsl(120, 100%, 40%);">+      d is the byte object rotated.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       have</span><br><span style="color: hsl(120, 100%, 40%);">+          have</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       CF  B_7 ... B_0</span><br><span style="color: hsl(120, 100%, 40%);">+        CF  B_7 ... B_0</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       The new rotate is done mod 8.</span><br><span style="color: hsl(0, 100%, 40%);">-       Much simpler than the "rcl" or "rcr" operations.</span><br><span style="color: hsl(120, 100%, 40%);">+    The new rotate is done mod 8.</span><br><span style="color: hsl(120, 100%, 40%);">+         Much simpler than the "rcl" or "rcr" operations.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       IF n > 0</span><br><span style="color: hsl(0, 100%, 40%);">-       1) B_(7) .. B_(n)  <-  b_(8-(n+1)) .. b_(0)</span><br><span style="color: hsl(0, 100%, 40%);">-       2) B_(n-1) .. B_(0) <-  b_(7) .. b_(8-n)</span><br><span style="color: hsl(0, 100%, 40%);">-     */</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 8) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* B_(7) .. B_(n)  <-  b_(8-(n+1)) .. b_(0) */</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << cnt);</span><br><span style="color: hsl(120, 100%, 40%);">+     IF n > 0</span><br><span style="color: hsl(120, 100%, 40%);">+           1) B_(7) .. B_(n)  <-  b_(8-(n+1)) .. b_(0)</span><br><span style="color: hsl(120, 100%, 40%);">+        2) B_(n-1) .. B_(0) <-  b_(7) .. b_(8-n)</span><br><span style="color: hsl(120, 100%, 40%);">+         */</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 8) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             /* B_(7) .. B_(n)  <-  b_(8-(n+1)) .. b_(0) */</span><br><span style="color: hsl(120, 100%, 40%);">+             res = (d << cnt);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* B_(n-1) .. B_(0) <-  b_(7) .. b_(8-n) */</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << cnt) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (8 - cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+                /* B_(n-1) .. B_(0) <-  b_(7) .. b_(8-n) */</span><br><span style="color: hsl(120, 100%, 40%);">+                mask = (1 << cnt) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+          res |= (d >> (8 - cnt)) & mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(0, 100%, 40%);">-           bit of the result!!!                               */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        /* OVERFLOW is set *IFF* s==1, then it is the</span><br><span style="color: hsl(0, 100%, 40%);">-           xor of CF and the most significant bit.  Blecck. */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(s == 1 &&</span><br><span style="color: hsl(0, 100%, 40%);">-                             XOR2((res & 0x1) + ((res >> 6) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                             F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    } if (s != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(0, 100%, 40%);">-           bit of the result!!!                               */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+            /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(120, 100%, 40%);">+                 bit of the result!!! */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+            /* OVERFLOW is set *IFF* s==1, then it is the</span><br><span style="color: hsl(120, 100%, 40%);">+            xor of CF and the most significant bit.  Blecck. */</span><br><span style="color: hsl(120, 100%, 40%);">+                CONDITIONAL_SET_FLAG(s == 1 && XOR2((res & 0x1) + ((res >> 6) & 0x2)), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (s != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+           /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(120, 100%, 40%);">+                 bit of the result!!! */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+    return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1050,23 +1036,21 @@</span><br><span> ****************************************************************************/</span><br><span> u16 rol_word(u16 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int res, cnt, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int res, cnt, mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 16) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << cnt);</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << cnt) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (16 - cnt)) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(s == 1 &&</span><br><span style="color: hsl(0, 100%, 40%);">-                             XOR2((res & 0x1) + ((res >> 14) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                             F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    } if (s != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(0, 100%, 40%);">-           bit of the result!!!                               */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 16) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            res = (d << cnt);</span><br><span style="color: hsl(120, 100%, 40%);">+               mask = (1 << cnt) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+          res |= (d >> (16 - cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(s == 1 && XOR2((res & 0x1) + ((res >> 14) & 0x2)), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (s != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+           /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(120, 100%, 40%);">+                 bit of the result!!! */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+    return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1075,23 +1059,21 @@</span><br><span> ****************************************************************************/</span><br><span> u32 rol_long(u32 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res, cnt, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 res, cnt, mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 32) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << cnt);</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << cnt) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (32 - cnt)) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(s == 1 &&</span><br><span style="color: hsl(0, 100%, 40%);">-                             XOR2((res & 0x1) + ((res >> 30) & 0x2)),</span><br><span style="color: hsl(0, 100%, 40%);">-                             F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    } if (s != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(0, 100%, 40%);">-           bit of the result!!!                               */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+ res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 32) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            res = (d << cnt);</span><br><span style="color: hsl(120, 100%, 40%);">+               mask = (1 << cnt) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+          res |= (d >> (32 - cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(s == 1 && XOR2((res & 0x1) + ((res >> 30) & 0x2)),  F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (s != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+           /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(120, 100%, 40%);">+                 bit of the result!!! */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x1, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+    return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1100,44 +1082,43 @@</span><br><span> ****************************************************************************/</span><br><span> u8 ror_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int res, cnt, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+      unsigned int res, cnt, mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* rotate right */</span><br><span style="color: hsl(0, 100%, 40%);">-    /*</span><br><span style="color: hsl(0, 100%, 40%);">-       s is the rotate distance.  It varies from 0 - 8.</span><br><span style="color: hsl(0, 100%, 40%);">-       d is the byte object rotated.</span><br><span style="color: hsl(120, 100%, 40%);">+       /* rotate right */</span><br><span style="color: hsl(120, 100%, 40%);">+    /*</span><br><span style="color: hsl(120, 100%, 40%);">+       s is the rotate distance.  It varies from 0 - 8.</span><br><span style="color: hsl(120, 100%, 40%);">+      d is the byte object rotated.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       have</span><br><span style="color: hsl(120, 100%, 40%);">+          have</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       B_7 ... B_0</span><br><span style="color: hsl(120, 100%, 40%);">+    B_7 ... B_0</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       The rotate is done mod 8.</span><br><span style="color: hsl(120, 100%, 40%);">+       The rotate is done mod 8.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       IF n > 0</span><br><span style="color: hsl(0, 100%, 40%);">-       1) B_(8-(n+1)) .. B_(0)  <-  b_(7) .. b_(n)</span><br><span style="color: hsl(0, 100%, 40%);">-       2) B_(7) .. B_(8-n) <-  b_(n-1) .. b_(0)</span><br><span style="color: hsl(0, 100%, 40%);">-     */</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 8) != 0) {           /* not a typo, do nada if cnt==0 */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* B_(7) .. B_(8-n) <-  b_(n-1) .. b_(0) */</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << (8 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+       IF n > 0</span><br><span style="color: hsl(120, 100%, 40%);">+           1) B_(8-(n+1)) .. B_(0)  <-  b_(7) .. b_(n)</span><br><span style="color: hsl(120, 100%, 40%);">+        2) B_(7) .. B_(8-n) <-  b_(n-1) .. b_(0)</span><br><span style="color: hsl(120, 100%, 40%);">+         */</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 8) != 0) { /* not a typo, do nada if cnt==0 */</span><br><span style="color: hsl(120, 100%, 40%);">+         /* B_(7) .. B_(8-n) <-  b_(n-1) .. b_(0) */</span><br><span style="color: hsl(120, 100%, 40%);">+                res = (d << (8 - cnt));</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* B_(8-(n+1)) .. B_(0)  <-  b_(7) .. b_(n) */</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (8 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+             /* B_(8-(n+1)) .. B_(0)  <-  b_(7) .. b_(n) */</span><br><span style="color: hsl(120, 100%, 40%);">+             mask = (1 << (8 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            res |= (d >> (cnt)) & mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(0, 100%, 40%);">-           bit of the result!!!                               */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x80, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        /* OVERFLOW is set *IFF* s==1, then it is the</span><br><span style="color: hsl(0, 100%, 40%);">-           xor of the two most significant bits.  Blecck. */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 6), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else if (s != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(0, 100%, 40%);">-           bit of the result!!!                               */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x80, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+           /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(120, 100%, 40%);">+                 bit of the result!!! */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x80, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+           /* OVERFLOW is set *IFF* s==1, then it is the</span><br><span style="color: hsl(120, 100%, 40%);">+            xor of the two most significant bits.  Blecck. */</span><br><span style="color: hsl(120, 100%, 40%);">+          CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 6), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+   } else if (s != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(120, 100%, 40%);">+                 bit of the result!!! */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x80, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+   return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1146,21 +1127,21 @@</span><br><span> ****************************************************************************/</span><br><span> u16 ror_word(u16 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int res, cnt, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int res, cnt, mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 16) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << (16 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (16 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (cnt)) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x8000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 14), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else if (s != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(0, 100%, 40%);">-           bit of the result!!!                               */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x8000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+       res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 16) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            res = (d << (16 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                mask = (1 << (16 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           res |= (d >> (cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         CONDITIONAL_SET_FLAG(res & 0x8000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+         CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 14), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+  } else if (s != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(120, 100%, 40%);">+                 bit of the result!!! */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x8000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1169,21 +1150,21 @@</span><br><span> ****************************************************************************/</span><br><span> u32 ror_long(u32 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res, cnt, mask;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 res, cnt, mask;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((cnt = s % 32) != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d << (32 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (32 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        res |= (d >> (cnt)) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x80000000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 30), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else if (s != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(0, 100%, 40%);">-           bit of the result!!!                               */</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(res & 0x80000000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+     res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if ((cnt = s % 32) != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+            res = (d << (32 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                mask = (1 << (32 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           res |= (d >> (cnt)) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         CONDITIONAL_SET_FLAG(res & 0x80000000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 30), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+  } else if (s != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* set the new carry flag, Note that it is the low order</span><br><span style="color: hsl(120, 100%, 40%);">+                 bit of the result!!! */</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(res & 0x80000000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1192,40 +1173,38 @@</span><br><span> ****************************************************************************/</span><br><span> u8 shl_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 8) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 8;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (s < 8) {</span><br><span style="color: hsl(120, 100%, 40%);">+               cnt = s % 8;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* last bit shifted out goes into carry flag */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d << cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (8 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (u8) d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+           /* last bit shifted out goes into carry flag */</span><br><span style="color: hsl(120, 100%, 40%);">+               if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = d << cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+                 cf = d & (1 << (8 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                  CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = (u8) d;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            /* Needs simplification. */</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(</span><br><span style="color: hsl(0, 100%, 40%);">-                                    (((res & 0x80) == 0x80) ^</span><br><span style="color: hsl(0, 100%, 40%);">-                                     (ACCESS_FLAG(F_CF) != 0)),</span><br><span style="color: hsl(0, 100%, 40%);">-            /* was (M.x86.R_FLG&F_CF)==F_CF)), */</span><br><span style="color: hsl(0, 100%, 40%);">-                                    F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+               if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 /* Needs simplification. */</span><br><span style="color: hsl(120, 100%, 40%);">+                   CONDITIONAL_SET_FLAG((((res & 0x80) == 0x80) ^</span><br><span style="color: hsl(120, 100%, 40%);">+                                           (ACCESS_FLAG(F_CF) != 0)),</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* was (M.x86.R_FLG&F_CF)==F_CF)), */</span><br><span style="color: hsl(120, 100%, 40%);">+                                            F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+         else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+            CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1234,36 +1213,34 @@</span><br><span> ****************************************************************************/</span><br><span> u16 shl_word(u16 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+  unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 16) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 16;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d << cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (16 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (u16) d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+       if (s < 16) {</span><br><span style="color: hsl(120, 100%, 40%);">+              cnt = s % 16;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = d << cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+                 cf = d & (1 << (16 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = (u16) d;</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(</span><br><span style="color: hsl(0, 100%, 40%);">-                                    (((res & 0x8000) == 0x8000) ^</span><br><span style="color: hsl(0, 100%, 40%);">-                                     (ACCESS_FLAG(F_CF) != 0)),</span><br><span style="color: hsl(0, 100%, 40%);">-                                    F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG((d << (s-1)) & 0x8000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+            if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG((((res & 0x8000) == 0x8000) ^</span><br><span style="color: hsl(120, 100%, 40%);">+                                                (ACCESS_FLAG(F_CF) != 0)),</span><br><span style="color: hsl(120, 100%, 40%);">+                                            F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+                else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              CONDITIONAL_SET_FLAG((d << (s-1)) & 0x8000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+          CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1272,33 +1249,32 @@</span><br><span> ****************************************************************************/</span><br><span> u32 shl_long(u32 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 32) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 32;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d << cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (32 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_32((u32)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG((((res & 0x80000000) == 0x80000000) ^</span><br><span style="color: hsl(0, 100%, 40%);">-                                  (ACCESS_FLAG(F_CF) != 0)), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80000000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (s < 32) {</span><br><span style="color: hsl(120, 100%, 40%);">+              cnt = s % 32;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = d << cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+                 cf = d & (1 << (32 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_32((u32)res);</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG((((res & 0x80000000) == 0x80000000) ^</span><br><span style="color: hsl(120, 100%, 40%);">+                                                ACCESS_FLAG(F_CF) != 0)), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+              else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80000000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+              CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1307,33 +1283,32 @@</span><br><span> ****************************************************************************/</span><br><span> u8 shr_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 8) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 8;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d >> cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (u8) d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+     if (s < 8) {</span><br><span style="color: hsl(120, 100%, 40%);">+               cnt = s % 8;</span><br><span style="color: hsl(120, 100%, 40%);">+          if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(120, 100%, 40%);">+                  res = d >> cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = (u8) d;</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(XOR2(res >> 6), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG((d >> (s-1)) & 0x1, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+          if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(XOR2(res >> 6), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              CONDITIONAL_SET_FLAG((d >> (s-1)) & 0x1, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1342,33 +1317,32 @@</span><br><span> ****************************************************************************/</span><br><span> u16 shr_word(u16 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+  unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 16) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 16;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d >> cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+      if (s < 16) {</span><br><span style="color: hsl(120, 100%, 40%);">+              cnt = s % 16;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(120, 100%, 40%);">+                  res = d >> cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(XOR2(res >> 14), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</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%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+              if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(XOR2(res >> 14), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+            else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</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%);">+             SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+               CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1377,32 +1351,31 @@</span><br><span> ****************************************************************************/</span><br><span> u32 shr_long(u32 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 32) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 32;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d >> cnt;</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_32((u32)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(XOR2(res >> 30), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</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%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (s < 32) {</span><br><span style="color: hsl(120, 100%, 40%);">+              cnt = s % 32;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(120, 100%, 40%);">+                  res = d >> cnt;</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_32((u32)res);</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(XOR2(res >> 30), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+            else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</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%);">+             SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+               CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1411,36 +1384,35 @@</span><br><span> ****************************************************************************/</span><br><span> u8 sar_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf, mask, sf;</span><br><span style="color: hsl(120, 100%, 40%);">+      unsigned int cnt, res, cf, mask, sf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    sf = d & 0x80;</span><br><span style="color: hsl(0, 100%, 40%);">-    cnt = s % 8;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (cnt > 0 && cnt < 8) {</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (8 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d >> cnt) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (sf) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= ~mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else if (cnt >= 8) {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (sf) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = 0xff;</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_PF);</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%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+    res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      sf = d & 0x80;</span><br><span style="color: hsl(120, 100%, 40%);">+    cnt = s % 8;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (cnt > 0 && cnt < 8) {</span><br><span style="color: hsl(120, 100%, 40%);">+               mask = (1 << (8 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+            cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(120, 100%, 40%);">+          res = (d >> cnt) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (sf)</span><br><span style="color: hsl(120, 100%, 40%);">+                       res |= ~mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else if (cnt >= 8) {</span><br><span style="color: hsl(120, 100%, 40%);">+             if (sf) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = 0xff;</span><br><span style="color: hsl(120, 100%, 40%);">+                   SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       CLEAR_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     SET_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                      CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1449,36 +1421,35 @@</span><br><span> ****************************************************************************/</span><br><span> u16 sar_word(u16 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf, mask, sf;</span><br><span style="color: hsl(120, 100%, 40%);">+        unsigned int cnt, res, cf, mask, sf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    sf = d & 0x8000;</span><br><span style="color: hsl(0, 100%, 40%);">-    cnt = s % 16;</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (cnt > 0 && cnt < 16) {</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (16 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d >> cnt) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (sf) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= ~mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else if (cnt >= 16) {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (sf) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = 0xffff;</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_PF);</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%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+ sf = d & 0x8000;</span><br><span style="color: hsl(120, 100%, 40%);">+  cnt = s % 16;</span><br><span style="color: hsl(120, 100%, 40%);">+ res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (cnt > 0 && cnt < 16) {</span><br><span style="color: hsl(120, 100%, 40%);">+              mask = (1 << (16 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(120, 100%, 40%);">+          res = (d >> cnt) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (sf)</span><br><span style="color: hsl(120, 100%, 40%);">+                       res |= ~mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+   } else if (cnt >= 16) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (sf) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = 0xffff;</span><br><span style="color: hsl(120, 100%, 40%);">+                 SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       CLEAR_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     SET_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                      CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1487,36 +1458,35 @@</span><br><span> ****************************************************************************/</span><br><span> u32 sar_long(u32 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 cnt, res, cf, mask, sf;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 cnt, res, cf, mask, sf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    sf = d & 0x80000000;</span><br><span style="color: hsl(0, 100%, 40%);">-    cnt = s % 32;</span><br><span style="color: hsl(0, 100%, 40%);">-    res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (cnt > 0 && cnt < 32) {</span><br><span style="color: hsl(0, 100%, 40%);">-        mask = (1 << (32 - cnt)) - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(0, 100%, 40%);">-        res = (d >> cnt) & mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        if (sf) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res |= ~mask;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        set_szp_flags_32(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else if (cnt >= 32) {</span><br><span style="color: hsl(0, 100%, 40%);">-        if (sf) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = 0xffffffff;</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-            CLEAR_FLAG(F_PF);</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%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+    sf = d & 0x80000000;</span><br><span style="color: hsl(120, 100%, 40%);">+      cnt = s % 32;</span><br><span style="color: hsl(120, 100%, 40%);">+ res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (cnt > 0 && cnt < 32) {</span><br><span style="color: hsl(120, 100%, 40%);">+              mask = (1 << (32 - cnt)) - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+           cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(120, 100%, 40%);">+          res = (d >> cnt) & mask;</span><br><span style="color: hsl(120, 100%, 40%);">+            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (sf)</span><br><span style="color: hsl(120, 100%, 40%);">+                       res |= ~mask;</span><br><span style="color: hsl(120, 100%, 40%);">+         set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        } else if (cnt >= 32) {</span><br><span style="color: hsl(120, 100%, 40%);">+            if (sf) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = 0xffffffff;</span><br><span style="color: hsl(120, 100%, 40%);">+                     SET_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       CLEAR_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     SET_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                      CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+                     CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1525,33 +1495,32 @@</span><br><span> ****************************************************************************/</span><br><span> u16 shld_word (u16 d, u16 fill, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+  unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 16) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 16;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (d << cnt) | (fill >> (16-cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (16 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG((((res & 0x8000) == 0x8000) ^</span><br><span style="color: hsl(0, 100%, 40%);">-                                  (ACCESS_FLAG(F_CF) != 0)), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG((d << (s-1)) & 0x8000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (s < 16) {</span><br><span style="color: hsl(120, 100%, 40%);">+              cnt = s % 16;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = (d << cnt) | (fill >> (16-cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                    cf = d & (1 << (16 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG((((res & 0x8000) == 0x8000) ^</span><br><span style="color: hsl(120, 100%, 40%);">+                                                (ACCESS_FLAG(F_CF) != 0)), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              CONDITIONAL_SET_FLAG((d << (s-1)) & 0x8000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+          CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1560,68 +1529,66 @@</span><br><span> ****************************************************************************/</span><br><span> u32 shld_long (u32 d, u32 fill, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+     unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 32) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 32;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (d << cnt) | (fill >> (32-cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (32 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_32((u32)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG((((res & 0x80000000) == 0x80000000) ^</span><br><span style="color: hsl(0, 100%, 40%);">-                                  (ACCESS_FLAG(F_CF) != 0)), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80000000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+      if (s < 32) {</span><br><span style="color: hsl(120, 100%, 40%);">+              cnt = s % 32;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     res = (d << cnt) | (fill >> (32-cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                    cf = d & (1 << (32 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_32((u32)res);</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG((((res & 0x80000000) == 0x80000000) ^</span><br><span style="color: hsl(120, 100%, 40%);">+                                                (ACCESS_FLAG(F_CF) != 0)), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              CONDITIONAL_SET_FLAG((d << (s-1)) & 0x80000000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+              CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             SET_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+               SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span> REMARKS:</span><br><span> Implements the SHRD instruction and side effects.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-u16 shrd_word (u16 d, u16 fill, u8 s)</span><br><span style="color: hsl(120, 100%, 40%);">+u16 shrd_word(u16 d, u16 fill, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 16) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 16;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (d >> cnt) | (fill << (16 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+       if (s < 16) {</span><br><span style="color: hsl(120, 100%, 40%);">+              cnt = s % 16;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(120, 100%, 40%);">+                  res = (d >> cnt) | (fill << (16 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                  CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(XOR2(res >> 14), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</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%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+              if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(XOR2(res >> 14), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+            else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</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%);">+             SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+               CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1630,32 +1597,31 @@</span><br><span> ****************************************************************************/</span><br><span> u32 shrd_long (u32 d, u32 fill, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    unsigned int cnt, res, cf;</span><br><span style="color: hsl(120, 100%, 40%);">+     unsigned int cnt, res, cf;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s < 32) {</span><br><span style="color: hsl(0, 100%, 40%);">-        cnt = s % 32;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(0, 100%, 40%);">-            res = (d >> cnt) | (fill << (32 - cnt));</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-            set_szp_flags_32((u32)res);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            res = d;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        if (cnt == 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-            CONDITIONAL_SET_FLAG(XOR2(res >> 30), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</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%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        res = 0;</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%);">-        SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-        CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (s < 32) {</span><br><span style="color: hsl(120, 100%, 40%);">+              cnt = s % 32;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (cnt > 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     cf = d & (1 << (cnt - 1));</span><br><span style="color: hsl(120, 100%, 40%);">+                  res = (d >> cnt) | (fill << (32 - cnt));</span><br><span style="color: hsl(120, 100%, 40%);">+                  CONDITIONAL_SET_FLAG(cf, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+                       set_szp_flags_32((u32)res);</span><br><span style="color: hsl(120, 100%, 40%);">+           } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      res = d;</span><br><span style="color: hsl(120, 100%, 40%);">+              }</span><br><span style="color: hsl(120, 100%, 40%);">+             if (cnt == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                 CONDITIONAL_SET_FLAG(XOR2(res >> 30), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+            else</span><br><span style="color: hsl(120, 100%, 40%);">+                  CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              res = 0;</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%);">+             SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+               CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+             CLEAR_FLAG(F_PF);</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1664,21 +1630,21 @@</span><br><span> ****************************************************************************/</span><br><span> u8 sbb_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 bc;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res; /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 bc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(0, 100%, 40%);">-        res = d - s - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    else</span><br><span style="color: hsl(0, 100%, 40%);">-        res = d - s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+        if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(120, 100%, 40%);">+                res = d - s - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+      else</span><br><span style="color: hsl(120, 100%, 40%);">+          res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_8((u8)res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(0, 100%, 40%);">-    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x80, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(120, 100%, 40%);">+    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x80, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+    CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+      CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1687,21 +1653,21 @@</span><br><span> ****************************************************************************/</span><br><span> u16 sbb_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 bc;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 res; /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 bc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(0, 100%, 40%);">-        res = d - s - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    else</span><br><span style="color: hsl(0, 100%, 40%);">-        res = d - s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+      if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(120, 100%, 40%);">+                res = d - s - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+      else</span><br><span style="color: hsl(120, 100%, 40%);">+          res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16((u16)res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(0, 100%, 40%);">-    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+      /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(120, 100%, 40%);">+    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x8000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+  CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1710,22 +1676,22 @@</span><br><span> ****************************************************************************/</span><br><span> u32 sbb_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 bc;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res; /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 bc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(0, 100%, 40%);">-        res = d - s - 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    else</span><br><span style="color: hsl(0, 100%, 40%);">-        res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (ACCESS_FLAG(F_CF))</span><br><span style="color: hsl(120, 100%, 40%);">+                res = d - s - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+      else</span><br><span style="color: hsl(120, 100%, 40%);">+          res = d - s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+    set_szp_flags_32(res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(0, 100%, 40%);">-    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x80000000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(120, 100%, 40%);">+    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x80000000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+      CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1734,18 +1700,18 @@</span><br><span> ****************************************************************************/</span><br><span> u8 sub_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 bc;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res; /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 bc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+      res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_8((u8)res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(0, 100%, 40%);">-    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x80, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u8)res;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(120, 100%, 40%);">+    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x80, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+    CONDITIONAL_SET_FLAG(XOR2(bc >> 6), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+      CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u8)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1754,18 +1720,18 @@</span><br><span> ****************************************************************************/</span><br><span> u16 sub_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 bc;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 res; /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 bc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+    res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_16((u16)res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(0, 100%, 40%);">-    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    return (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+      /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(120, 100%, 40%);">+    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x8000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+  CONDITIONAL_SET_FLAG(XOR2(bc >> 14), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     return (u16)res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1774,18 +1740,18 @@</span><br><span> ****************************************************************************/</span><br><span> u32 sub_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 bc;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res; /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 bc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d - s;</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+ res = d - s;</span><br><span style="color: hsl(120, 100%, 40%);">+  set_szp_flags_32(res);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(0, 100%, 40%);">-    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x80000000, F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+    /* calculate the borrow chain.  See note at top */</span><br><span style="color: hsl(120, 100%, 40%);">+    bc = (res & (~d | s)) | (~d & s);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x80000000, F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+      CONDITIONAL_SET_FLAG(XOR2(bc >> 30), F_OF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(bc & 0x8, F_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1794,14 +1760,14 @@</span><br><span> ****************************************************************************/</span><br><span> void test_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d & s;</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d & s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_8((u8)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    /* AF == don't care */</span><br><span style="color: hsl(0, 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%);">+     set_szp_flags_8((u8)res);</span><br><span style="color: hsl(120, 100%, 40%);">+     /* AF == don't care */</span><br><span style="color: hsl(120, 100%, 40%);">+    CLEAR_FLAG(F_CF);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1810,14 +1776,14 @@</span><br><span> ****************************************************************************/</span><br><span> void test_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d & s;</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d & s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_16((u16)res);</span><br><span style="color: hsl(0, 100%, 40%);">-    /* AF == don't care */</span><br><span style="color: hsl(0, 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%);">+     set_szp_flags_16((u16)res);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* AF == don't care */</span><br><span style="color: hsl(120, 100%, 40%);">+    CLEAR_FLAG(F_CF);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1826,14 +1792,14 @@</span><br><span> ****************************************************************************/</span><br><span> void test_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d & s;</span><br><span style="color: hsl(120, 100%, 40%);">+   res = d & s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_OF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_szp_flags_32(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    /* AF == don't care */</span><br><span style="color: hsl(0, 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%);">+     set_szp_flags_32(res);</span><br><span style="color: hsl(120, 100%, 40%);">+        /* AF == don't care */</span><br><span style="color: hsl(120, 100%, 40%);">+    CLEAR_FLAG(F_CF);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1842,11 +1808,11 @@</span><br><span> ****************************************************************************/</span><br><span> u8 xor_byte(u8 d, u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u8 res;    /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+       u8 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d ^ s;</span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_byte_side_eff(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+ res = d ^ s;</span><br><span style="color: hsl(120, 100%, 40%);">+  no_carry_byte_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1855,11 +1821,11 @@</span><br><span> ****************************************************************************/</span><br><span> u16 xor_word(u16 d, u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+  u16 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d ^ s;</span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_word_side_eff(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+        res = d ^ s;</span><br><span style="color: hsl(120, 100%, 40%);">+  no_carry_word_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1868,11 +1834,11 @@</span><br><span> ****************************************************************************/</span><br><span> u32 xor_long(u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;   /* all operands in native machine order */</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 res; /* all operands in native machine order */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    res = d ^ s;</span><br><span style="color: hsl(0, 100%, 40%);">-    no_carry_long_side_eff(res);</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+        res = d ^ s;</span><br><span style="color: hsl(120, 100%, 40%);">+  no_carry_long_side_eff(res);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1881,17 +1847,17 @@</span><br><span> ****************************************************************************/</span><br><span> void imul_byte(u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    s16 res = (s16)((s8)M.x86.R_AL * (s8)s);</span><br><span style="color: hsl(120, 100%, 40%);">+     s16 res = (s16)((s8)M.x86.R_AL * (s8)s);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AX = res;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (((M.x86.R_AL & 0x80) == 0 && M.x86.R_AH == 0x00) ||</span><br><span style="color: hsl(0, 100%, 40%);">-        ((M.x86.R_AL & 0x80) != 0 && M.x86.R_AH == 0xFF)) {</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%);">-    } else {</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%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+      M.x86.R_AX = res;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (((M.x86.R_AL & 0x80) == 0 && M.x86.R_AH == 0x00) ||</span><br><span style="color: hsl(120, 100%, 40%);">+           ((M.x86.R_AL & 0x80) != 0 && M.x86.R_AH == 0xFF)) {</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%);">+     } else {</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%);">+       }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1900,55 +1866,55 @@</span><br><span> ****************************************************************************/</span><br><span> void imul_word(u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    s32 res = (s16)M.x86.R_AX * (s16)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   s32 res = (s16)M.x86.R_AX * (s16)s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AX = (u16)res;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_DX = (u16)(res >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (((M.x86.R_AX & 0x8000) == 0 && M.x86.R_DX == 0x0000) ||</span><br><span style="color: hsl(0, 100%, 40%);">-        ((M.x86.R_AX & 0x8000) != 0 && M.x86.R_DX == 0xFFFF)) {</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%);">-    } else {</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%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+      M.x86.R_AX = (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+        M.x86.R_DX = (u16)(res >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (((M.x86.R_AX & 0x8000) == 0 && M.x86.R_DX == 0x0000) ||</span><br><span style="color: hsl(120, 100%, 40%);">+               ((M.x86.R_AX & 0x8000) != 0 && M.x86.R_DX == 0xFFFF)) {</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%);">+     } else {</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%);">+       }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span> REMARKS:</span><br><span> Implements the IMUL instruction and side effects.</span><br><span> ****************************************************************************/</span><br><span style="color: hsl(0, 100%, 40%);">-void imul_long_direct(u32 *res_lo, u32* res_hi,u32 d, u32 s)</span><br><span style="color: hsl(120, 100%, 40%);">+void imul_long_direct(u32 *res_lo, u32 *res_hi, u32 d, u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef  __HAS_LONG_LONG__</span><br><span style="color: hsl(0, 100%, 40%);">-    s64 res = (s64)(s32)d * (s64)(s32)s;</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __HAS_LONG_LONG__</span><br><span style="color: hsl(120, 100%, 40%);">+      s64 res = (s64)(s32)d * (s64)(s32)s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    *res_lo = (u32)res;</span><br><span style="color: hsl(0, 100%, 40%);">-    *res_hi = (u32)(res >> 32);</span><br><span style="color: hsl(120, 100%, 40%);">+  *res_lo = (u32)res;</span><br><span style="color: hsl(120, 100%, 40%);">+   *res_hi = (u32)(res >> 32);</span><br><span> #else</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 d_lo,d_hi,d_sign;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 s_lo,s_hi,s_sign;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 rlo_lo,rlo_hi,rhi_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 d_lo, d_hi, d_sign;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 s_lo, s_hi, s_sign;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 rlo_lo, rlo_hi, rhi_lo;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if ((d_sign = d & 0x80000000) != 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        d = -d;</span><br><span style="color: hsl(0, 100%, 40%);">-    d_lo = d & 0xFFFF;</span><br><span style="color: hsl(0, 100%, 40%);">-    d_hi = d >> 16;</span><br><span style="color: hsl(0, 100%, 40%);">-    if ((s_sign = s & 0x80000000) != 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        s = -s;</span><br><span style="color: hsl(0, 100%, 40%);">-    s_lo = s & 0xFFFF;</span><br><span style="color: hsl(0, 100%, 40%);">-    s_hi = s >> 16;</span><br><span style="color: hsl(0, 100%, 40%);">-    rlo_lo = d_lo * s_lo;</span><br><span style="color: hsl(0, 100%, 40%);">-    rlo_hi = (d_hi * s_lo + d_lo * s_hi) + (rlo_lo >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-    rhi_lo = d_hi * s_hi + (rlo_hi >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-    *res_lo = (rlo_hi << 16) | (rlo_lo & 0xFFFF);</span><br><span style="color: hsl(0, 100%, 40%);">-    *res_hi = rhi_lo;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (d_sign != s_sign) {</span><br><span style="color: hsl(0, 100%, 40%);">-        d = ~*res_lo;</span><br><span style="color: hsl(0, 100%, 40%);">-        s = (((d & 0xFFFF) + 1) >> 16) + (d >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-        *res_lo = ~*res_lo+1;</span><br><span style="color: hsl(0, 100%, 40%);">-        *res_hi = ~*res_hi+(s >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+        if ((d_sign = d & 0x80000000) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               d = -d;</span><br><span style="color: hsl(120, 100%, 40%);">+       d_lo = d & 0xFFFF;</span><br><span style="color: hsl(120, 100%, 40%);">+        d_hi = d >> 16;</span><br><span style="color: hsl(120, 100%, 40%);">+ if ((s_sign = s & 0x80000000) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               s = -s;</span><br><span style="color: hsl(120, 100%, 40%);">+       s_lo = s & 0xFFFF;</span><br><span style="color: hsl(120, 100%, 40%);">+        s_hi = s >> 16;</span><br><span style="color: hsl(120, 100%, 40%);">+ rlo_lo = d_lo * s_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+ rlo_hi = (d_hi * s_lo + d_lo * s_hi) + (rlo_lo >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+  rhi_lo = d_hi * s_hi + (rlo_hi >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+  *res_lo = (rlo_hi << 16) | (rlo_lo & 0xFFFF);</span><br><span style="color: hsl(120, 100%, 40%);">+       *res_hi = rhi_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (d_sign != s_sign) {</span><br><span style="color: hsl(120, 100%, 40%);">+               d = ~*res_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+         s = (((d & 0xFFFF) + 1) >> 16) + (d >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+           *res_lo = ~*res_lo+1;</span><br><span style="color: hsl(120, 100%, 40%);">+         *res_hi = ~*res_hi+(s >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span> #endif</span><br><span> }</span><br><span> </span><br><span>@@ -1958,15 +1924,15 @@</span><br><span> ****************************************************************************/</span><br><span> void imul_long(u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    imul_long_direct(&M.x86.R_EAX,&M.x86.R_EDX,M.x86.R_EAX,s);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (((M.x86.R_EAX & 0x80000000) == 0 && M.x86.R_EDX == 0x00000000) ||</span><br><span style="color: hsl(0, 100%, 40%);">-        ((M.x86.R_EAX & 0x80000000) != 0 && M.x86.R_EDX == 0xFFFFFFFF)) {</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%);">-    } else {</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%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+        imul_long_direct(&M.x86.R_EAX, &M.x86.R_EDX, M.x86.R_EAX, s);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (((M.x86.R_EAX & 0x80000000) == 0 && M.x86.R_EDX == 0x00000000) ||</span><br><span style="color: hsl(120, 100%, 40%);">+             ((M.x86.R_EAX & 0x80000000) != 0 && M.x86.R_EDX == 0xFFFFFFFF)) {</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%);">+     } else {</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%);">+       }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1975,16 +1941,16 @@</span><br><span> ****************************************************************************/</span><br><span> void mul_byte(u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 res = (u16)(M.x86.R_AL * s);</span><br><span style="color: hsl(120, 100%, 40%);">+        u16 res = (u16)(M.x86.R_AL * s);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AX = res;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.R_AH == 0) {</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%);">-    } else {</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%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+  M.x86.R_AX = res;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (M.x86.R_AH == 0) {</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%);">+     } else {</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%);">+       }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -1993,17 +1959,17 @@</span><br><span> ****************************************************************************/</span><br><span> void mul_word(u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res = M.x86.R_AX * s;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 res = M.x86.R_AX * s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AX = (u16)res;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_DX = (u16)(res >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.R_DX == 0) {</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%);">-    } else {</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%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+    M.x86.R_AX = (u16)res;</span><br><span style="color: hsl(120, 100%, 40%);">+        M.x86.R_DX = (u16)(res >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+  if (M.x86.R_DX == 0) {</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%);">+     } else {</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%);">+       }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2012,34 +1978,34 @@</span><br><span> ****************************************************************************/</span><br><span> void mul_long(u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef  __HAS_LONG_LONG__</span><br><span style="color: hsl(0, 100%, 40%);">-    u64 res = (u64)M.x86.R_EAX * s;</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __HAS_LONG_LONG__</span><br><span style="color: hsl(120, 100%, 40%);">+     u64 res = (u64)M.x86.R_EAX * s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_EAX = (u32)res;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_EDX = (u32)(res >> 32);</span><br><span style="color: hsl(120, 100%, 40%);">+       M.x86.R_EAX = (u32)res;</span><br><span style="color: hsl(120, 100%, 40%);">+       M.x86.R_EDX = (u32)(res >> 32);</span><br><span> #else</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 a,a_lo,a_hi;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 s_lo,s_hi;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 rlo_lo,rlo_hi,rhi_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+     u32 a, a_lo, a_hi;</span><br><span style="color: hsl(120, 100%, 40%);">+    u32 s_lo, s_hi;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 rlo_lo, rlo_hi, rhi_lo;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    a = M.x86.R_EAX;</span><br><span style="color: hsl(0, 100%, 40%);">-    a_lo = a & 0xFFFF;</span><br><span style="color: hsl(0, 100%, 40%);">-    a_hi = a >> 16;</span><br><span style="color: hsl(0, 100%, 40%);">-    s_lo = s & 0xFFFF;</span><br><span style="color: hsl(0, 100%, 40%);">-    s_hi = s >> 16;</span><br><span style="color: hsl(0, 100%, 40%);">-    rlo_lo = a_lo * s_lo;</span><br><span style="color: hsl(0, 100%, 40%);">-    rlo_hi = (a_hi * s_lo + a_lo * s_hi) + (rlo_lo >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-    rhi_lo = a_hi * s_hi + (rlo_hi >> 16);</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_EAX = (rlo_hi << 16) | (rlo_lo & 0xFFFF);</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_EDX = rhi_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+    a = M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+      a_lo = a & 0xFFFF;</span><br><span style="color: hsl(120, 100%, 40%);">+        a_hi = a >> 16;</span><br><span style="color: hsl(120, 100%, 40%);">+ s_lo = s & 0xFFFF;</span><br><span style="color: hsl(120, 100%, 40%);">+        s_hi = s >> 16;</span><br><span style="color: hsl(120, 100%, 40%);">+ rlo_lo = a_lo * s_lo;</span><br><span style="color: hsl(120, 100%, 40%);">+ rlo_hi = (a_hi * s_lo + a_lo * s_hi) + (rlo_lo >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+  rhi_lo = a_hi * s_hi + (rlo_hi >> 16);</span><br><span style="color: hsl(120, 100%, 40%);">+  M.x86.R_EAX = (rlo_hi << 16) | (rlo_lo & 0xFFFF);</span><br><span style="color: hsl(120, 100%, 40%);">+   M.x86.R_EDX = rhi_lo;</span><br><span> #endif</span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.R_EDX == 0) {</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%);">-    } else {</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%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+   if (M.x86.R_EDX == 0) {</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%);">+     } else {</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%);">+       }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2048,21 +2014,21 @@</span><br><span> ****************************************************************************/</span><br><span> void idiv_byte(u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    s32 dvd, div, mod;</span><br><span style="color: hsl(120, 100%, 40%);">+     s32 dvd, div, mod;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    dvd = (s16)M.x86.R_AX;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (s == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    div = dvd / (s8)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    mod = dvd % (s8)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (abs(div) > 0x7f) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AL = (s8) div;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AH = (s8) mod;</span><br><span style="color: hsl(120, 100%, 40%);">+      dvd = (s16)M.x86.R_AX;</span><br><span style="color: hsl(120, 100%, 40%);">+        if (s == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     div = dvd / (s8)s;</span><br><span style="color: hsl(120, 100%, 40%);">+    mod = dvd % (s8)s;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (abs(div) > 0x7f) {</span><br><span style="color: hsl(120, 100%, 40%);">+             x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     M.x86.R_AL = (s8) div;</span><br><span style="color: hsl(120, 100%, 40%);">+        M.x86.R_AH = (s8) mod;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2071,26 +2037,26 @@</span><br><span> ****************************************************************************/</span><br><span> void idiv_word(u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    s32 dvd, div, mod;</span><br><span style="color: hsl(120, 100%, 40%);">+       s32 dvd, div, mod;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    dvd = (((s32)M.x86.R_DX) << 16) | M.x86.R_AX;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (s == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    div = dvd / (s16)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    mod = dvd % (s16)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (abs(div) > 0x7fff) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(div == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_parity_flag(mod);</span><br><span style="color: hsl(120, 100%, 40%);">+     dvd = (((s32)M.x86.R_DX) << 16) | M.x86.R_AX;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (s == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     div = dvd / (s16)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   mod = dvd % (s16)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (abs(div) > 0x7fff) {</span><br><span style="color: hsl(120, 100%, 40%);">+           x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(div == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+ set_parity_flag(mod);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AX = (u16)div;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_DX = (u16)mod;</span><br><span style="color: hsl(120, 100%, 40%);">+ M.x86.R_AX = (u16)div;</span><br><span style="color: hsl(120, 100%, 40%);">+        M.x86.R_DX = (u16)mod;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2099,72 +2065,72 @@</span><br><span> ****************************************************************************/</span><br><span> void idiv_long(u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef  __HAS_LONG_LONG__</span><br><span style="color: hsl(0, 100%, 40%);">-    s64 dvd, div, mod;</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __HAS_LONG_LONG__</span><br><span style="color: hsl(120, 100%, 40%);">+    s64 dvd, div, mod;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    dvd = (((s64)M.x86.R_EDX) << 32) | M.x86.R_EAX;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (s == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    div = dvd / (s32)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    mod = dvd % (s32)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (abs(div) > 0x7fffffff) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+   dvd = (((s64)M.x86.R_EDX) << 32) | M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (s == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     div = dvd / (s32)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   mod = dvd % (s32)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (abs(div) > 0x7fffffff) {</span><br><span style="color: hsl(120, 100%, 40%);">+               x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span> #else</span><br><span style="color: hsl(0, 100%, 40%);">-    s32 div = 0, mod;</span><br><span style="color: hsl(0, 100%, 40%);">-    s32 h_dvd = M.x86.R_EDX;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 l_dvd = M.x86.R_EAX;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 abs_s = s & 0x7FFFFFFF;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 abs_h_dvd = h_dvd & 0x7FFFFFFF;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 h_s = abs_s >> 1;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 l_s = abs_s << 31;</span><br><span style="color: hsl(0, 100%, 40%);">-    int counter = 31;</span><br><span style="color: hsl(0, 100%, 40%);">-    int carry;</span><br><span style="color: hsl(120, 100%, 40%);">+       s32 div = 0, mod;</span><br><span style="color: hsl(120, 100%, 40%);">+     s32 h_dvd = M.x86.R_EDX;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 l_dvd = M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 abs_s = s & 0x7FFFFFFF;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 abs_h_dvd = h_dvd & 0x7FFFFFFF;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 h_s = abs_s >> 1;</span><br><span style="color: hsl(120, 100%, 40%);">+   u32 l_s = abs_s << 31;</span><br><span style="color: hsl(120, 100%, 40%);">+  int counter = 31;</span><br><span style="color: hsl(120, 100%, 40%);">+     int carry;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    do {</span><br><span style="color: hsl(0, 100%, 40%);">-        div <<= 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        carry = (l_dvd >= l_s) ? 0 : 1;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (s == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     do {</span><br><span style="color: hsl(120, 100%, 40%);">+          div <<= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+              carry = (l_dvd >= l_s) ? 0 : 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (abs_h_dvd < (h_s + carry)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            h_s >>= 1;</span><br><span style="color: hsl(0, 100%, 40%);">-            l_s = abs_s << (--counter);</span><br><span style="color: hsl(0, 100%, 40%);">-            continue;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            abs_h_dvd -= (h_s + carry);</span><br><span style="color: hsl(0, 100%, 40%);">-            l_dvd = carry ? ((0xFFFFFFFF - l_s) + l_dvd + 1)</span><br><span style="color: hsl(0, 100%, 40%);">-                : (l_dvd - l_s);</span><br><span style="color: hsl(0, 100%, 40%);">-            h_s >>= 1;</span><br><span style="color: hsl(0, 100%, 40%);">-            l_s = abs_s << (--counter);</span><br><span style="color: hsl(0, 100%, 40%);">-            div |= 1;</span><br><span style="color: hsl(0, 100%, 40%);">-            continue;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+                if (abs_h_dvd < (h_s + carry)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   h_s >>= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                      l_s = abs_s << (--counter);</span><br><span style="color: hsl(120, 100%, 40%);">+                     continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      abs_h_dvd -= (h_s + carry);</span><br><span style="color: hsl(120, 100%, 40%);">+                   l_dvd = carry ? ((0xFFFFFFFF - l_s) + l_dvd + 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                              : (l_dvd - l_s);</span><br><span style="color: hsl(120, 100%, 40%);">+                      h_s >>= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                      l_s = abs_s << (--counter);</span><br><span style="color: hsl(120, 100%, 40%);">+                     div |= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                     continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    } while (counter > -1);</span><br><span style="color: hsl(0, 100%, 40%);">-    /* overflow */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (abs_h_dvd || (l_dvd > abs_s)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    /* sign */</span><br><span style="color: hsl(0, 100%, 40%);">-    div |= ((h_dvd & 0x10000000) ^ (s & 0x10000000));</span><br><span style="color: hsl(0, 100%, 40%);">-    mod = l_dvd;</span><br><span style="color: hsl(120, 100%, 40%);">+   } while (counter > -1);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* overflow */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (abs_h_dvd || (l_dvd > abs_s)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     /* sign */</span><br><span style="color: hsl(120, 100%, 40%);">+    div |= ((h_dvd & 0x10000000) ^ (s & 0x10000000));</span><br><span style="color: hsl(120, 100%, 40%);">+     mod = l_dvd;</span><br><span> </span><br><span> #endif</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_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-    SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_parity_flag(mod);</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_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+     SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+       set_parity_flag(mod);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_EAX = (u32)div;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_EDX = (u32)mod;</span><br><span style="color: hsl(120, 100%, 40%);">+       M.x86.R_EAX = (u32)div;</span><br><span style="color: hsl(120, 100%, 40%);">+       M.x86.R_EDX = (u32)mod;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2173,21 +2139,21 @@</span><br><span> ****************************************************************************/</span><br><span> void div_byte(u8 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 dvd, div, mod;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 dvd, div, mod;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    dvd = M.x86.R_AX;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (s == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    div = dvd / (u8)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    mod = dvd % (u8)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (abs(div) > 0xff) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AL = (u8)div;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AH = (u8)mod;</span><br><span style="color: hsl(120, 100%, 40%);">+     dvd = M.x86.R_AX;</span><br><span style="color: hsl(120, 100%, 40%);">+     if (s == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     div = dvd / (u8)s;</span><br><span style="color: hsl(120, 100%, 40%);">+    mod = dvd % (u8)s;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (abs(div) > 0xff) {</span><br><span style="color: hsl(120, 100%, 40%);">+             x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     M.x86.R_AL = (u8)div;</span><br><span style="color: hsl(120, 100%, 40%);">+ M.x86.R_AH = (u8)mod;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2196,26 +2162,26 @@</span><br><span> ****************************************************************************/</span><br><span> void div_word(u16 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 dvd, div, mod;</span><br><span style="color: hsl(120, 100%, 40%);">+ u32 dvd, div, mod;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    dvd = (((u32)M.x86.R_DX) << 16) | M.x86.R_AX;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (s == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    div = dvd / (u16)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    mod = dvd % (u16)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (abs(div) > 0xffff) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CONDITIONAL_SET_FLAG(div == 0, F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_parity_flag(mod);</span><br><span style="color: hsl(120, 100%, 40%);">+     dvd = (((u32)M.x86.R_DX) << 16) | M.x86.R_AX;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (s == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     div = dvd / (u16)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   mod = dvd % (u16)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (abs(div) > 0xffff) {</span><br><span style="color: hsl(120, 100%, 40%);">+           x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     CLEAR_FLAG(F_CF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CONDITIONAL_SET_FLAG(div == 0, F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+ set_parity_flag(mod);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_AX = (u16)div;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_DX = (u16)mod;</span><br><span style="color: hsl(120, 100%, 40%);">+ M.x86.R_AX = (u16)div;</span><br><span style="color: hsl(120, 100%, 40%);">+        M.x86.R_DX = (u16)mod;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2224,68 +2190,68 @@</span><br><span> ****************************************************************************/</span><br><span> void div_long(u32 s)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-#ifdef  __HAS_LONG_LONG__</span><br><span style="color: hsl(0, 100%, 40%);">-    u64 dvd, div, mod;</span><br><span style="color: hsl(120, 100%, 40%);">+#ifdef __HAS_LONG_LONG__</span><br><span style="color: hsl(120, 100%, 40%);">+     u64 dvd, div, mod;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    dvd = (((u64)M.x86.R_EDX) << 32) | M.x86.R_EAX;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (s == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    div = dvd / (u32)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    mod = dvd % (u32)s;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (abs(div) > 0xffffffff) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+   dvd = (((u64)M.x86.R_EDX) << 32) | M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (s == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     div = dvd / (u32)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   mod = dvd % (u32)s;</span><br><span style="color: hsl(120, 100%, 40%);">+   if (abs(div) > 0xffffffff) {</span><br><span style="color: hsl(120, 100%, 40%);">+               x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span> #else</span><br><span style="color: hsl(0, 100%, 40%);">-    s32 div = 0, mod;</span><br><span style="color: hsl(0, 100%, 40%);">-    s32 h_dvd = M.x86.R_EDX;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 l_dvd = M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+       s32 div = 0, mod;</span><br><span style="color: hsl(120, 100%, 40%);">+     s32 h_dvd = M.x86.R_EDX;</span><br><span style="color: hsl(120, 100%, 40%);">+      u32 l_dvd = M.x86.R_EAX;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    u32 h_s = s;</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 l_s = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-    int counter = 32;</span><br><span style="color: hsl(0, 100%, 40%);">-    int carry;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 h_s = s;</span><br><span style="color: hsl(120, 100%, 40%);">+  u32 l_s = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+  int counter = 32;</span><br><span style="color: hsl(120, 100%, 40%);">+     int carry;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (s == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    do {</span><br><span style="color: hsl(0, 100%, 40%);">-        div <<= 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        carry = (l_dvd >= l_s) ? 0 : 1;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (s == 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+         x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     do {</span><br><span style="color: hsl(120, 100%, 40%);">+          div <<= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+              carry = (l_dvd >= l_s) ? 0 : 1;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        if (h_dvd < (h_s + carry)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            h_s >>= 1;</span><br><span style="color: hsl(0, 100%, 40%);">-            l_s = s << (--counter);</span><br><span style="color: hsl(0, 100%, 40%);">-            continue;</span><br><span style="color: hsl(0, 100%, 40%);">-        } else {</span><br><span style="color: hsl(0, 100%, 40%);">-            h_dvd -= (h_s + carry);</span><br><span style="color: hsl(0, 100%, 40%);">-            l_dvd = carry ? ((0xFFFFFFFF - l_s) + l_dvd + 1)</span><br><span style="color: hsl(0, 100%, 40%);">-                : (l_dvd - l_s);</span><br><span style="color: hsl(0, 100%, 40%);">-            h_s >>= 1;</span><br><span style="color: hsl(0, 100%, 40%);">-            l_s = s << (--counter);</span><br><span style="color: hsl(0, 100%, 40%);">-            div |= 1;</span><br><span style="color: hsl(0, 100%, 40%);">-            continue;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(120, 100%, 40%);">+                if (h_dvd < (h_s + carry)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                       h_s >>= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                      l_s = s << (--counter);</span><br><span style="color: hsl(120, 100%, 40%);">+                 continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             } else {</span><br><span style="color: hsl(120, 100%, 40%);">+                      h_dvd -= (h_s + carry);</span><br><span style="color: hsl(120, 100%, 40%);">+                       l_dvd = carry ? ((0xFFFFFFFF - l_s) + l_dvd + 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                              : (l_dvd - l_s);</span><br><span style="color: hsl(120, 100%, 40%);">+                      h_s >>= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                      l_s = s << (--counter);</span><br><span style="color: hsl(120, 100%, 40%);">+                 div |= 1;</span><br><span style="color: hsl(120, 100%, 40%);">+                     continue;</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    } while (counter > -1);</span><br><span style="color: hsl(0, 100%, 40%);">-    /* overflow */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (h_dvd || (l_dvd > s)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        x86emu_intr_raise(0);</span><br><span style="color: hsl(0, 100%, 40%);">-        return;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    mod = l_dvd;</span><br><span style="color: hsl(120, 100%, 40%);">+      } while (counter > -1);</span><br><span style="color: hsl(120, 100%, 40%);">+    /* overflow */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (h_dvd || (l_dvd > s)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                x86emu_intr_raise(0);</span><br><span style="color: hsl(120, 100%, 40%);">+         return;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span style="color: hsl(120, 100%, 40%);">+     mod = l_dvd;</span><br><span> #endif</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_AF);</span><br><span style="color: hsl(0, 100%, 40%);">-    CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(0, 100%, 40%);">-    SET_FLAG(F_ZF);</span><br><span style="color: hsl(0, 100%, 40%);">-    set_parity_flag(mod);</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_AF);</span><br><span style="color: hsl(120, 100%, 40%);">+     CLEAR_FLAG(F_SF);</span><br><span style="color: hsl(120, 100%, 40%);">+     SET_FLAG(F_ZF);</span><br><span style="color: hsl(120, 100%, 40%);">+       set_parity_flag(mod);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_EAX = (u32)div;</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_EDX = (u32)mod;</span><br><span style="color: hsl(120, 100%, 40%);">+       M.x86.R_EAX = (u32)div;</span><br><span style="color: hsl(120, 100%, 40%);">+       M.x86.R_EDX = (u32)mod;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2295,39 +2261,37 @@</span><br><span> </span><br><span> static void single_in(int size)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    if (size == 1)</span><br><span style="color: hsl(0, 100%, 40%);">-        store_data_byte_abs(M.x86.R_ES, M.x86.R_DI,(*sys_inb)(M.x86.R_DX));</span><br><span style="color: hsl(0, 100%, 40%);">-    else if (size == 2)</span><br><span style="color: hsl(0, 100%, 40%);">-        store_data_word_abs(M.x86.R_ES, M.x86.R_DI,(*sys_inw)(M.x86.R_DX));</span><br><span style="color: hsl(0, 100%, 40%);">-    else</span><br><span style="color: hsl(0, 100%, 40%);">-        store_data_long_abs(M.x86.R_ES, M.x86.R_DI,(*sys_inl)(M.x86.R_DX));</span><br><span style="color: hsl(120, 100%, 40%);">+     if (size == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                store_data_byte_abs(M.x86.R_ES, M.x86.R_DI, (*sys_inb)(M.x86.R_DX));</span><br><span style="color: hsl(120, 100%, 40%);">+  else if (size == 2)</span><br><span style="color: hsl(120, 100%, 40%);">+           store_data_word_abs(M.x86.R_ES, M.x86.R_DI, (*sys_inw)(M.x86.R_DX));</span><br><span style="color: hsl(120, 100%, 40%);">+  else</span><br><span style="color: hsl(120, 100%, 40%);">+          store_data_long_abs(M.x86.R_ES, M.x86.R_DI, (*sys_inl)(M.x86.R_DX));</span><br><span> }</span><br><span> </span><br><span> void ins(int size)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int inc = size;</span><br><span style="color: hsl(120, 100%, 40%);">+   int inc = size;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (ACCESS_FLAG(F_DF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        inc = -size;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* don't care whether REPE or REPNE */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* in until (E)CX is ZERO. */</span><br><span style="color: hsl(0, 100%, 40%);">-        u32 count = ((M.x86.mode & SYSMODE_32BIT_REP) ?</span><br><span style="color: hsl(0, 100%, 40%);">-                     M.x86.R_ECX : M.x86.R_CX);</span><br><span style="color: hsl(0, 100%, 40%);">-        while (count--) {</span><br><span style="color: hsl(0, 100%, 40%);">-          single_in(size);</span><br><span style="color: hsl(0, 100%, 40%);">-          M.x86.R_DI += inc;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_CX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_32BIT_REP) {</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.R_ECX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        single_in(size);</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_DI += inc;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+   if (ACCESS_FLAG(F_DF))</span><br><span style="color: hsl(120, 100%, 40%);">+                inc = -size;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* don't care whether REPE or REPNE */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* in until (E)CX is ZERO. */</span><br><span style="color: hsl(120, 100%, 40%);">+         u32 count = ((M.x86.mode & SYSMODE_32BIT_REP) ?</span><br><span style="color: hsl(120, 100%, 40%);">+                                    M.x86.R_ECX : M.x86.R_CX);</span><br><span style="color: hsl(120, 100%, 40%);">+           while (count--) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     single_in(size);</span><br><span style="color: hsl(120, 100%, 40%);">+                      M.x86.R_DI += inc;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_CX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+               if (M.x86.mode & SYSMODE_32BIT_REP)</span><br><span style="color: hsl(120, 100%, 40%);">+                       M.x86.R_ECX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              single_in(size);</span><br><span style="color: hsl(120, 100%, 40%);">+              M.x86.R_DI += inc;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2337,53 +2301,51 @@</span><br><span> </span><br><span> static void single_out(int size)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     if (size == 1)</span><br><span style="color: hsl(0, 100%, 40%);">-       (*sys_outb)(M.x86.R_DX,fetch_data_byte_abs(M.x86.R_ES, M.x86.R_SI));</span><br><span style="color: hsl(0, 100%, 40%);">-     else if (size == 2)</span><br><span style="color: hsl(0, 100%, 40%);">-       (*sys_outw)(M.x86.R_DX,fetch_data_word_abs(M.x86.R_ES, M.x86.R_SI));</span><br><span style="color: hsl(0, 100%, 40%);">-     else</span><br><span style="color: hsl(0, 100%, 40%);">-       (*sys_outl)(M.x86.R_DX,fetch_data_long_abs(M.x86.R_ES, M.x86.R_SI));</span><br><span style="color: hsl(120, 100%, 40%);">+       if (size == 1)</span><br><span style="color: hsl(120, 100%, 40%);">+                (*sys_outb)(M.x86.R_DX, fetch_data_byte_abs(M.x86.R_ES, M.x86.R_SI));</span><br><span style="color: hsl(120, 100%, 40%);">+ else if (size == 2)</span><br><span style="color: hsl(120, 100%, 40%);">+           (*sys_outw)(M.x86.R_DX, fetch_data_word_abs(M.x86.R_ES, M.x86.R_SI));</span><br><span style="color: hsl(120, 100%, 40%);">+ else</span><br><span style="color: hsl(120, 100%, 40%);">+          (*sys_outl)(M.x86.R_DX, fetch_data_long_abs(M.x86.R_ES, M.x86.R_SI));</span><br><span> }</span><br><span> </span><br><span> void outs(int size)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    int inc = size;</span><br><span style="color: hsl(120, 100%, 40%);">+ int inc = size;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    if (ACCESS_FLAG(F_DF)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        inc = -size;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-    if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {</span><br><span style="color: hsl(0, 100%, 40%);">-        /* don't care whether REPE or REPNE */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* out until (E)CX is ZERO. */</span><br><span style="color: hsl(0, 100%, 40%);">-        u32 count = ((M.x86.mode & SYSMODE_32BIT_REP) ?</span><br><span style="color: hsl(0, 100%, 40%);">-                     M.x86.R_ECX : M.x86.R_CX);</span><br><span style="color: hsl(0, 100%, 40%);">-        while (count--) {</span><br><span style="color: hsl(0, 100%, 40%);">-          single_out(size);</span><br><span style="color: hsl(0, 100%, 40%);">-          M.x86.R_SI += inc;</span><br><span style="color: hsl(0, 100%, 40%);">-          }</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_CX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        if (M.x86.mode & SYSMODE_32BIT_REP) {</span><br><span style="color: hsl(0, 100%, 40%);">-            M.x86.R_ECX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        }</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);</span><br><span style="color: hsl(0, 100%, 40%);">-    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-        single_out(size);</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_SI += inc;</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(120, 100%, 40%);">+        if (ACCESS_FLAG(F_DF))</span><br><span style="color: hsl(120, 100%, 40%);">+                inc = -size;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (M.x86.mode & (SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          /* don't care whether REPE or REPNE */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* out until (E)CX is ZERO. */</span><br><span style="color: hsl(120, 100%, 40%);">+                u32 count = ((M.x86.mode & SYSMODE_32BIT_REP) ?</span><br><span style="color: hsl(120, 100%, 40%);">+                                    M.x86.R_ECX : M.x86.R_CX);</span><br><span style="color: hsl(120, 100%, 40%);">+           while (count--) {</span><br><span style="color: hsl(120, 100%, 40%);">+                     single_out(size);</span><br><span style="color: hsl(120, 100%, 40%);">+                     M.x86.R_SI += inc;</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_CX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+               if (M.x86.mode & SYSMODE_32BIT_REP)</span><br><span style="color: hsl(120, 100%, 40%);">+                       M.x86.R_ECX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              M.x86.mode &= ~(SYSMODE_PREFIX_REPE | SYSMODE_PREFIX_REPNE);</span><br><span style="color: hsl(120, 100%, 40%);">+      } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              single_out(size);</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_SI += inc;</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span> PARAMETERS:</span><br><span style="color: hsl(0, 100%, 40%);">-addr    - Address to fetch word from</span><br><span style="color: hsl(120, 100%, 40%);">+addr    - Address to fetch word from</span><br><span> </span><br><span> REMARKS:</span><br><span> Fetches a word from emulator memory using an absolute address.</span><br><span> ****************************************************************************/</span><br><span> u16 mem_access_word(int addr)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_MEM_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-      x86emu_check_mem_access(addr);)</span><br><span style="color: hsl(0, 100%, 40%);">-    return (*sys_rdw)(addr);</span><br><span style="color: hsl(120, 100%, 40%);">+DB(if (CHECK_MEM_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+   x86emu_check_mem_access(addr);)</span><br><span style="color: hsl(120, 100%, 40%);">+     return (*sys_rdw)(addr);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2394,10 +2356,10 @@</span><br><span> ****************************************************************************/</span><br><span> void push_word(u16 w)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_SP_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-      x86emu_check_sp_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_SP -= 2;</span><br><span style="color: hsl(0, 100%, 40%);">-    (*sys_wrw)(((u32)M.x86.R_SS << 4)  + M.x86.R_SP, w);</span><br><span style="color: hsl(120, 100%, 40%);">+DB(if (CHECK_SP_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+      x86emu_check_sp_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+  M.x86.R_SP -= 2;</span><br><span style="color: hsl(120, 100%, 40%);">+      (*sys_wrw)(((u32)M.x86.R_SS << 4) + M.x86.R_SP, w);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2408,10 +2370,10 @@</span><br><span> ****************************************************************************/</span><br><span> void push_long(u32 w)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_SP_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-      x86emu_check_sp_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_SP -= 4;</span><br><span style="color: hsl(0, 100%, 40%);">-    (*sys_wrl)(((u32)M.x86.R_SS << 4)  + M.x86.R_SP, w);</span><br><span style="color: hsl(120, 100%, 40%);">+DB(if (CHECK_SP_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+     x86emu_check_sp_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+  M.x86.R_SP -= 4;</span><br><span style="color: hsl(120, 100%, 40%);">+      (*sys_wrl)(((u32)M.x86.R_SS << 4) + M.x86.R_SP, w);</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2422,13 +2384,13 @@</span><br><span> ****************************************************************************/</span><br><span> u16 pop_word(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u16 res;</span><br><span style="color: hsl(120, 100%, 40%);">+ u16 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_SP_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-      x86emu_check_sp_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-    res = (*sys_rdw)(((u32)M.x86.R_SS << 4)  + M.x86.R_SP);</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_SP += 2;</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+DB(if (CHECK_SP_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+   x86emu_check_sp_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+  res = (*sys_rdw)(((u32)M.x86.R_SS << 4) + M.x86.R_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+  M.x86.R_SP += 2;</span><br><span style="color: hsl(120, 100%, 40%);">+      return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2439,13 +2401,13 @@</span><br><span> ****************************************************************************/</span><br><span> u32 pop_long(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 res;</span><br><span style="color: hsl(120, 100%, 40%);">+       u32 res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DB( if (CHECK_SP_ACCESS())</span><br><span style="color: hsl(0, 100%, 40%);">-      x86emu_check_sp_access();)</span><br><span style="color: hsl(0, 100%, 40%);">-    res = (*sys_rdl)(((u32)M.x86.R_SS << 4)  + M.x86.R_SP);</span><br><span style="color: hsl(0, 100%, 40%);">-    M.x86.R_SP += 4;</span><br><span style="color: hsl(0, 100%, 40%);">-    return res;</span><br><span style="color: hsl(120, 100%, 40%);">+DB(if (CHECK_SP_ACCESS())</span><br><span style="color: hsl(120, 100%, 40%);">+   x86emu_check_sp_access();)</span><br><span style="color: hsl(120, 100%, 40%);">+  res = (*sys_rdl)(((u32)M.x86.R_SS << 4) + M.x86.R_SP);</span><br><span style="color: hsl(120, 100%, 40%);">+  M.x86.R_SP += 4;</span><br><span style="color: hsl(120, 100%, 40%);">+      return res;</span><br><span> }</span><br><span> </span><br><span> /****************************************************************************</span><br><span>@@ -2454,42 +2416,42 @@</span><br><span> ****************************************************************************/</span><br><span> void x86emu_cpuid(void)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-    u32 feature = M.x86.R_EAX;</span><br><span style="color: hsl(120, 100%, 40%);">+        u32 feature = M.x86.R_EAX;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    switch (feature) {</span><br><span style="color: hsl(0, 100%, 40%);">-    case 0:</span><br><span style="color: hsl(0, 100%, 40%);">-        /* Regardless if we have real data from the hardware, the emulator</span><br><span style="color: hsl(0, 100%, 40%);">-         * will only support upto feature 1, which we set in register EAX.</span><br><span style="color: hsl(0, 100%, 40%);">-         * Registers EBX:EDX:ECX contain a string identifying the CPU.</span><br><span style="color: hsl(0, 100%, 40%);">-         */</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EAX = 1;</span><br><span style="color: hsl(0, 100%, 40%);">-        /* EBX:EDX:ECX = "GenuineIntel" */</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EBX = 0x756e6547;</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EDX = 0x49656e69;</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_ECX = 0x6c65746e;</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%);">-        /* If we don't have x86 compatible hardware, we return values from an</span><br><span style="color: hsl(0, 100%, 40%);">-         * Intel 486dx4; which was one of the first processors to have CPUID.</span><br><span style="color: hsl(0, 100%, 40%);">-         */</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EAX = 0x00000480;</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EBX = 0x00000000;</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_ECX = 0x00000000;</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EDX = 0x00000002;       /* VME */</span><br><span style="color: hsl(0, 100%, 40%);">-        /* In the case that we have hardware CPUID instruction, we make sure</span><br><span style="color: hsl(0, 100%, 40%);">-         * that the features reported are limited to TSC and VME.</span><br><span style="color: hsl(0, 100%, 40%);">-         */</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EDX &= 0x00000012;</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%);">-        /* Finally, we don't support any additional features.  Most CPUs</span><br><span style="color: hsl(0, 100%, 40%);">-         * return all zeros when queried for invalid or unsupported feature</span><br><span style="color: hsl(0, 100%, 40%);">-         * numbers.</span><br><span style="color: hsl(0, 100%, 40%);">-         */</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EAX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EBX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_ECX = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        M.x86.R_EDX = 0;</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%);">+     switch (feature) {</span><br><span style="color: hsl(120, 100%, 40%);">+    case 0:</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Regardless if we have real data from the hardware, the emulator</span><br><span style="color: hsl(120, 100%, 40%);">+             * will only support upto feature 1, which we set in register EAX.</span><br><span style="color: hsl(120, 100%, 40%);">+             * Registers EBX:EDX:ECX contain a string identifying the CPU.</span><br><span style="color: hsl(120, 100%, 40%);">+                 */</span><br><span style="color: hsl(120, 100%, 40%);">+           M.x86.R_EAX = 1;</span><br><span style="color: hsl(120, 100%, 40%);">+              /* EBX:EDX:ECX = "GenuineIntel" */</span><br><span style="color: hsl(120, 100%, 40%);">+          M.x86.R_EBX = 0x756e6547;</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_EDX = 0x49656e69;</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_ECX = 0x6c65746e;</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%);">+               /* If we don't have x86 compatible hardware, we return values from an</span><br><span style="color: hsl(120, 100%, 40%);">+              * Intel 486dx4; which was one of the first processors to have CPUID.</span><br><span style="color: hsl(120, 100%, 40%);">+          */</span><br><span style="color: hsl(120, 100%, 40%);">+           M.x86.R_EAX = 0x00000480;</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_EBX = 0x00000000;</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_ECX = 0x00000000;</span><br><span style="color: hsl(120, 100%, 40%);">+             M.x86.R_EDX = 0x00000002;          /* VME */</span><br><span style="color: hsl(120, 100%, 40%);">+          /* In the case that we have hardware CPUID instruction, we make sure</span><br><span style="color: hsl(120, 100%, 40%);">+           * that the features reported are limited to TSC and VME.</span><br><span style="color: hsl(120, 100%, 40%);">+              */</span><br><span style="color: hsl(120, 100%, 40%);">+           M.x86.R_EDX &= 0x00000012;</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%);">+              /* Finally, we don't support any additional features.  Most CPUs</span><br><span style="color: hsl(120, 100%, 40%);">+           * return all zeros when queried for invalid or unsupported feature</span><br><span style="color: hsl(120, 100%, 40%);">+            * numbers.</span><br><span style="color: hsl(120, 100%, 40%);">+            */</span><br><span style="color: hsl(120, 100%, 40%);">+           M.x86.R_EAX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              M.x86.R_EBX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              M.x86.R_ECX = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+              M.x86.R_EDX = 0;</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></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/26353">change 26353</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/26353"/><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: I010f3e02813d38293a7ab7fc84f60b8c2ec098a7 </div>
<div style="display:none"> Gerrit-Change-Number: 26353 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Elyes HAOUAS <ehaouas@noos.fr> </div>