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