--- np2/i386c/ia32/instructions/bit_byte.c 2003/12/08 00:55:32 1.1 +++ np2/i386c/ia32/instructions/bit_byte.c 2004/03/12 18:19:57 1.7 @@ -1,4 +1,4 @@ -/* $Id: bit_byte.c,v 1.1 2003/12/08 00:55:32 yui Exp $ */ +/* $Id: bit_byte.c,v 1.7 2004/03/12 18:19:57 yui Exp $ */ /* * Copyright (c) 2002-2003 NONAKA Kimihiro @@ -33,6 +33,24 @@ #include "bit_byte.h" +#if 1 +#define BIT_OFFSET16(v) (2 * (((SINT16)(v)) >> 4)) +#define BIT_INDEX16(v) ((v) & 0xf) +#define BIT_MAKEBIT16(v) (1 << BIT_INDEX16(v)) + +#define BIT_OFFSET32(v) (4 * (((SINT32)(v)) >> 5)) +#define BIT_INDEX32(v) ((v) & 0x1f) +#define BIT_MAKEBIT32(v) (1 << BIT_INDEX32(v)) +#else +#define BIT_OFFSET16(v) (2 * (((SINT16)(v)) / 16)) +#define BIT_INDEX16(v) ((v) & 0xf) +#define BIT_MAKEBIT16(v) (1 << BIT_INDEX16(v)) + +#define BIT_OFFSET32(v) (4 * (((SINT32)(v)) / 32)) +#define BIT_INDEX32(v) ((v) & 0x1f) +#define BIT_MAKEBIT32(v) (1 << BIT_INDEX32(v)) +#endif + /* * BT @@ -40,7 +58,7 @@ void BT_EwGw(void) { - DWORD op, src, dst, madr, ad; + UINT32 op, src, dst, madr; PREPART_EA_REG16(op, src); if (op >= 0xc0) { @@ -49,21 +67,17 @@ BT_EwGw(void) } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - ad += 2 * (src >> 4); - dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); - } - if (dst & (1 << (src & 0x0f))) { - CPU_FLAGL |= C_FLAG; - } else { - CPU_FLAGL &= ~C_FLAG; + madr += BIT_OFFSET16(src); + dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } + CPU_FLAGL &= ~C_FLAG; + CPU_FLAGL |= (dst >> BIT_INDEX16(src)) & 1; } void BT_EdGd(void) { - DWORD op, src, dst, madr, ad; + UINT32 op, src, dst, madr; PREPART_EA_REG32(op, src); if (op >= 0xc0) { @@ -72,61 +86,49 @@ BT_EdGd(void) } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - ad += 4 * (src >> 5); - dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); - } - if (dst & (1 << (src & 0x1f))) { - CPU_FLAGL |= C_FLAG; - } else { - CPU_FLAGL &= ~C_FLAG; + madr += BIT_OFFSET32(src); + dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); } + CPU_FLAGL &= ~C_FLAG; + CPU_FLAGL |= (dst >> BIT_INDEX32(src)) & 1; } void -BT_EwIb(DWORD op) +BT_EwIb(UINT32 op) { - DWORD src, dst, madr, ad; + UINT32 src, dst, madr; - GET_PCBYTE(src); if (op >= 0xc0) { CPU_WORKCLOCK(2); + GET_PCBYTE(src); dst = *(reg16_b20[op]); } else { CPU_WORKCLOCK(6); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - ad += 2 * (src >> 4); - dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); - } - if (dst & (1 << (src & 0x0f))) { - CPU_FLAGL |= C_FLAG; - } else { - CPU_FLAGL &= ~C_FLAG; + GET_PCBYTE(src); + dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } + CPU_FLAGL &= ~C_FLAG; + CPU_FLAGL |= (dst >> BIT_INDEX16(src)) & 1; } void -BT_EdIb(DWORD op) +BT_EdIb(UINT32 op) { - DWORD src, dst, madr, ad; + UINT32 src, dst, madr; - GET_PCBYTE(src); if (op >= 0xc0) { CPU_WORKCLOCK(2); + GET_PCBYTE(src); dst = *(reg32_b20[op]); } else { CPU_WORKCLOCK(6); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - ad += 4 * (src >> 5); - dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); - } - if (dst & (1 << (src & 0x1f))) { - CPU_FLAGL |= C_FLAG; - } else { - CPU_FLAGL &= ~C_FLAG; + GET_PCBYTE(src); + dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); } + CPU_FLAGL &= ~C_FLAG; + CPU_FLAGL |= (dst >> BIT_INDEX32(src)) & 1; } /* @@ -135,136 +137,142 @@ BT_EdIb(DWORD op) void BTS_EwGw(void) { - WORD *out; - DWORD op, src, dst, madr, ad; - WORD bit; + UINT16 *out; + UINT32 op, src, dst, res, madr; + UINT16 bit; PREPART_EA_REG16(op, src); - bit = 1 << (src & 0x0f); + bit = BIT_MAKEBIT16(src); if (op >= 0xc0) { CPU_WORKCLOCK(2); out = reg16_b20[op]; - if (*out & bit) { + dst = *out; + if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { - *out |= bit; CPU_FLAGL &= ~C_FLAG; + res = dst | bit; + *out = (UINT16)res; } } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - ad += 2 * (src >> 4); - dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); + madr += BIT_OFFSET16(src); + dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { - dst |= bit; - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, ad, dst); CPU_FLAGL &= ~C_FLAG; } + res = dst | bit; + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, (UINT16)res); } } void BTS_EdGd(void) { - DWORD *out; - DWORD op, src, dst, madr, ad; - DWORD bit; + UINT32 *out; + UINT32 op, src, dst, res, madr; + UINT32 bit; PREPART_EA_REG32(op, src); - bit = 1 << (src & 0x1f); + bit = BIT_MAKEBIT32(src); if (op >= 0xc0) { CPU_WORKCLOCK(2); out = reg32_b20[op]; - if (*out & bit) { + dst = *out; + if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { - *out |= bit; CPU_FLAGL &= ~C_FLAG; + res = dst | bit; + *out = res; } } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - ad += 4 * (src >> 5); - dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); + madr += BIT_OFFSET32(src); + dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { - dst |= bit; - cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, ad, dst); CPU_FLAGL &= ~C_FLAG; } + res = dst | bit; + cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, res); } } void -BTS_EwIb(DWORD op) +BTS_EwIb(UINT32 op) { - WORD *out; - DWORD src, dst, madr, ad; - WORD bit; + UINT16 *out; + UINT32 src, dst, res, madr; + UINT16 bit; - GET_PCBYTE(src); - bit = 1 << (src & 0x0f); if (op >= 0xc0) { CPU_WORKCLOCK(2); + GET_PCBYTE(src); out = reg16_b20[op]; - if (*out & bit) { + dst = *out; + bit = BIT_MAKEBIT16(src); + if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { - *out |= bit; CPU_FLAGL &= ~C_FLAG; + res = dst | bit; + *out = (UINT16)res; } } else { CPU_WORKCLOCK(6); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - ad += 2 * (src >> 4); - dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); + GET_PCBYTE(src); + dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); + bit = BIT_MAKEBIT16(src); if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { - dst |= bit; - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, ad, dst); CPU_FLAGL &= ~C_FLAG; } + res = dst | bit; + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, (UINT16)res); } } void -BTS_EdIb(DWORD op) +BTS_EdIb(UINT32 op) { - DWORD *out; - DWORD src, dst, madr, ad; - DWORD bit; + UINT32 *out; + UINT32 src, dst, res, madr; + UINT32 bit; - GET_PCBYTE(src); - bit = 1 << (src & 0x1f); if (op >= 0xc0) { CPU_WORKCLOCK(2); + GET_PCBYTE(src); out = reg32_b20[op]; - if (*out & bit) { + dst = *out; + bit = BIT_MAKEBIT32(src); + if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { - *out |= bit; CPU_FLAGL &= ~C_FLAG; + res = dst | bit; + *out = res; } } else { CPU_WORKCLOCK(6); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - ad += 4 * (src >> 5); - dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); + GET_PCBYTE(src); + dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); + bit = BIT_MAKEBIT32(src); if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { - dst |= bit; - cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, ad, dst); CPU_FLAGL &= ~C_FLAG; } + res = dst | bit; + cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, res); } } @@ -274,273 +282,287 @@ BTS_EdIb(DWORD op) void BTR_EwGw(void) { - WORD *out; - DWORD op, src, dst, madr, ad; - WORD bit; + UINT16 *out; + UINT32 op, src, dst, res, madr; + UINT16 bit; PREPART_EA_REG16(op, src); - bit = 1 << (src & 0x0f); + bit = BIT_MAKEBIT16(src); if (op >= 0xc0) { CPU_WORKCLOCK(2); out = reg16_b20[op]; - if (*out & bit) { - *out &= ~bit; + dst = *out; + if (dst & bit) { CPU_FLAGL |= C_FLAG; + res = dst & ~bit; + *out = (UINT16)res; } else { CPU_FLAGL &= ~C_FLAG; } } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - ad += 2 * (src >> 4); - dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); + madr += BIT_OFFSET16(src); + dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); if (dst & bit) { - dst &= ~bit; - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, ad, dst); CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } + res = dst & ~bit; + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, (UINT16)res); } } void BTR_EdGd(void) { - DWORD *out; - DWORD op, src, dst, madr, ad; - DWORD bit; + UINT32 *out; + UINT32 op, src, dst, res, madr; + UINT32 bit; PREPART_EA_REG32(op, src); - bit = 1 << (src & 0x1f); + bit = BIT_MAKEBIT32(src); if (op >= 0xc0) { CPU_WORKCLOCK(2); out = reg32_b20[op]; dst = *out; - if (*out & bit) { - *out &= ~bit; + if (dst & bit) { CPU_FLAGL |= C_FLAG; + res = dst & ~bit; + *out = res; } else { CPU_FLAGL &= ~C_FLAG; } } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - ad += 4 * (src >> 5); - dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); + madr += BIT_OFFSET32(src); + dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); if (dst & bit) { - dst &= ~bit; - cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, ad, dst); CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } + res = dst & ~bit; + cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, res); } } void -BTR_EwIb(DWORD op) +BTR_EwIb(UINT32 op) { - WORD *out; - DWORD src, dst, madr, ad; - WORD bit; + UINT16 *out; + UINT32 src, dst, res, madr; + UINT16 bit; - GET_PCBYTE(src); - bit = 1 << (src & 0x0f); if (op >= 0xc0) { CPU_WORKCLOCK(2); + GET_PCBYTE(src); out = reg16_b20[op]; - if (*out & bit) { - *out &= ~bit; + dst = *out; + bit = BIT_MAKEBIT16(src); + if (dst & bit) { CPU_FLAGL |= C_FLAG; + res = dst & ~bit; + *out = (UINT16)res; } else { CPU_FLAGL &= ~C_FLAG; } } else { CPU_WORKCLOCK(6); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - ad += 2 * (src >> 4); - dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); + GET_PCBYTE(src); + dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); + bit = BIT_MAKEBIT16(src); if (dst & bit) { - dst &= ~bit; - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, ad, dst); CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } + res = dst & ~bit; + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, (UINT16)res); } } void -BTR_EdIb(DWORD op) +BTR_EdIb(UINT32 op) { - DWORD *out; - DWORD src, dst, madr, ad; - DWORD bit; + UINT32 *out; + UINT32 src, dst, res, madr; + UINT32 bit; - GET_PCBYTE(src); - bit = 1 << (src & 0x1f); if (op >= 0xc0) { CPU_WORKCLOCK(2); + GET_PCBYTE(src); out = reg32_b20[op]; - if (*out & bit) { - *out &= ~bit; + dst = *out; + bit = BIT_MAKEBIT32(src); + if (dst & bit) { CPU_FLAGL |= C_FLAG; + res = dst & ~bit; + *out = res; } else { CPU_FLAGL &= ~C_FLAG; } } else { CPU_WORKCLOCK(6); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - ad += 4 * (src >> 5); - dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); + GET_PCBYTE(src); + dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); + bit = BIT_MAKEBIT32(src); if (dst & bit) { - dst &= ~bit; - cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, ad, dst); CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } + res = dst & ~bit; + cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, res); } } - /* * BTC */ void BTC_EwGw(void) { - WORD *out; - DWORD op, src, dst, madr, ad; - WORD bit; + UINT16 *out; + UINT32 op, src, dst, res, madr; + UINT16 bit; PREPART_EA_REG16(op, src); - bit = 1 << (src & 0x0f); + bit = BIT_MAKEBIT16(src); if (op >= 0xc0) { CPU_WORKCLOCK(2); out = reg16_b20[op]; - if (*out & bit) { + dst = *out; + if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } - *out ^= bit; + res = dst ^ bit; + *out = (UINT16)res; } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - ad += 2 * (src >> 4); - dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, ad, dst ^ bit); + madr += BIT_OFFSET16(src); + dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } + res = dst ^ bit; + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, (UINT16)res); } } void BTC_EdGd(void) { - DWORD *out; - DWORD op, src, dst, madr, ad; - DWORD bit; + UINT32 *out; + UINT32 op, src, dst, res, madr; + UINT32 bit; PREPART_EA_REG32(op, src); - bit = 1 << (src & 0x1f); + bit = BIT_MAKEBIT32(src); if (op >= 0xc0) { CPU_WORKCLOCK(2); out = reg32_b20[op]; - if (*out & bit) { + dst = *out; + if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } - *out ^= bit; + res = dst ^ bit; + *out = res; } else { CPU_WORKCLOCK(7); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - ad += 4 * (src >> 5); - dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); - cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, ad, dst ^ bit); + madr += BIT_OFFSET32(src); + dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } + res = dst ^ bit; + cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, res); } } void -BTC_EwIb(DWORD op) +BTC_EwIb(UINT32 op) { - WORD *out; - DWORD src, dst, madr, ad; - WORD bit; + UINT16 *out; + UINT32 src, dst, res, madr; + UINT16 bit; - GET_PCBYTE(src); - bit = 1 << (src & 0x0f); if (op >= 0xc0) { CPU_WORKCLOCK(2); + GET_PCBYTE(src); out = reg16_b20[op]; - if (*out & bit) { + dst = *out; + bit = BIT_MAKEBIT16(src); + if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } - *out ^= bit; + res = dst ^ bit; + *out = (UINT16)res; } else { CPU_WORKCLOCK(6); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); - ad += 2 * (src >> 4); - dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, ad); - cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, ad, dst ^ bit); + GET_PCBYTE(src); + dst = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); + bit = BIT_MAKEBIT16(src); if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } + res = dst ^ bit; + cpu_vmemorywrite_w(CPU_INST_SEGREG_INDEX, madr, (UINT16)res); } } void -BTC_EdIb(DWORD op) +BTC_EdIb(UINT32 op) { - DWORD *out; - DWORD src, dst, madr, ad; - DWORD bit; + UINT32 *out; + UINT32 src, dst, res, madr; + UINT32 bit; - GET_PCBYTE(src); - bit = 1 << (src & 0x1f); if (op >= 0xc0) { CPU_WORKCLOCK(2); + GET_PCBYTE(src); out = reg32_b20[op]; - if (*out & bit) { + dst = *out; + bit = BIT_MAKEBIT32(src); + if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } - *out ^= bit; + res = dst ^ bit; + *out = res; } else { CPU_WORKCLOCK(6); madr = calc_ea_dst(op); - ad = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); - ad += 4 * (src >> 5); - dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, ad); - cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, ad, dst ^ bit); + GET_PCBYTE(src); + dst = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); + bit = BIT_MAKEBIT32(src); if (dst & bit) { CPU_FLAGL |= C_FLAG; } else { CPU_FLAGL &= ~C_FLAG; } + res = dst ^ bit; + cpu_vmemorywrite_d(CPU_INST_SEGREG_INDEX, madr, res); } } @@ -550,8 +572,8 @@ BTC_EdIb(DWORD op) void BSF_GwEw(void) { - WORD *out; - DWORD op, src; + UINT16 *out; + UINT32 op, src; int bit; PREPART_REG16_EA(op, src, out, 2, 7); @@ -559,18 +581,20 @@ BSF_GwEw(void) CPU_FLAGL |= Z_FLAG; /* dest reg is undefined */ } else { - for (bit = 0; (bit < 16) && !(src & (1 << bit)); bit++) - continue; - *out = (WORD)bit; CPU_FLAGL &= ~Z_FLAG; + for (bit = 0; bit < 15; bit++) { + if (src & (1 << bit)) + break; + } + *out = (UINT16)bit; } } void BSF_GdEd(void) { - DWORD *out; - DWORD op, src; + UINT32 *out; + UINT32 op, src; int bit; PREPART_REG32_EA(op, src, out, 2, 7); @@ -578,10 +602,12 @@ BSF_GdEd(void) CPU_FLAGL |= Z_FLAG; /* dest reg is undefined */ } else { - for (bit = 0; (bit < 32) && !(src & (1 << bit)); bit++) - continue; - *out = (DWORD)bit; CPU_FLAGL &= ~Z_FLAG; + for (bit = 0; bit < 31; bit++) { + if (src & (1 << bit)) + break; + } + *out = (UINT32)bit; } } @@ -591,8 +617,8 @@ BSF_GdEd(void) void BSR_GwEw(void) { - WORD *out; - DWORD op, src; + UINT16 *out; + UINT32 op, src; int bit; PREPART_REG16_EA(op, src, out, 2, 7); @@ -600,18 +626,20 @@ BSR_GwEw(void) CPU_FLAGL |= Z_FLAG; /* dest reg is undefined */ } else { - for (bit = 15; (bit >= 0) && !(src & (1 << bit)); bit--) - continue; - *out = (WORD)bit; CPU_FLAGL &= ~Z_FLAG; + for (bit = 15; bit > 0; bit--) { + if (src & (1 << bit)) + break; + } + *out = (UINT16)bit; } } void BSR_GdEd(void) { - DWORD *out; - DWORD op, src; + UINT32 *out; + UINT32 op, src; int bit; PREPART_REG32_EA(op, src, out, 2, 7); @@ -619,10 +647,12 @@ BSR_GdEd(void) CPU_FLAGL |= Z_FLAG; /* dest reg is undefined */ } else { - for (bit = 31; (bit >= 0) && !(src & (1 << bit)); bit--) - continue; - *out = (DWORD)bit; CPU_FLAGL &= ~Z_FLAG; + for (bit = 31; bit > 0; bit--) { + if (src & (1 << bit)) + break; + } + *out = (UINT32)bit; } } @@ -632,10 +662,10 @@ BSR_GdEd(void) void SETO_Eb(void) { - DWORD op, src, madr; - BYTE v = CPU_OV ? 1 : 0; + UINT32 op, madr; + UINT8 v = CPU_OV ? 1 : 0; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -649,10 +679,10 @@ SETO_Eb(void) void SETNO_Eb(void) { - DWORD op, src, madr; - BYTE v = CPU_OV ? 0 : 1; + UINT32 op, madr; + UINT8 v = CPU_OV ? 0 : 1; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -666,10 +696,10 @@ SETNO_Eb(void) void SETC_Eb(void) { - DWORD op, src, madr; - BYTE v = CPU_FLAGL & C_FLAG; + UINT32 op, madr; + UINT8 v = (UINT8)(CPU_FLAGL & C_FLAG); - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -683,10 +713,10 @@ SETC_Eb(void) void SETNC_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & C_FLAG) ? 0 : 1; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & C_FLAG) ? 0 : 1; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -700,10 +730,10 @@ SETNC_Eb(void) void SETZ_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & Z_FLAG) ? 1 : 0; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & Z_FLAG) ? 1 : 0; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -717,10 +747,10 @@ SETZ_Eb(void) void SETNZ_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & Z_FLAG) ? 0 : 1; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & Z_FLAG) ? 0 : 1; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -734,10 +764,10 @@ SETNZ_Eb(void) void SETA_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & (Z_FLAG|C_FLAG)) ? 0 : 1; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & (Z_FLAG|C_FLAG)) ? 0 : 1; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -751,10 +781,10 @@ SETA_Eb(void) void SETNA_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & (Z_FLAG|C_FLAG)) ? 1 : 0; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & (Z_FLAG|C_FLAG)) ? 1 : 0; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -768,10 +798,10 @@ SETNA_Eb(void) void SETS_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & S_FLAG) ? 1 : 0; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & S_FLAG) ? 1 : 0; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -785,10 +815,10 @@ SETS_Eb(void) void SETNS_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & S_FLAG) ? 0 : 1; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & S_FLAG) ? 0 : 1; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -802,10 +832,10 @@ SETNS_Eb(void) void SETP_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & P_FLAG) ? 1 : 0; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & P_FLAG) ? 1 : 0; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -819,10 +849,10 @@ SETP_Eb(void) void SETNP_Eb(void) { - DWORD op, src, madr; - BYTE v = (CPU_FLAGL & P_FLAG) ? 0 : 1; + UINT32 op, madr; + UINT8 v = (CPU_FLAGL & P_FLAG) ? 0 : 1; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -836,10 +866,10 @@ SETNP_Eb(void) void SETL_Eb(void) { - DWORD op, src, madr; - BYTE v = (!CPU_OV == !(CPU_FLAGL & S_FLAG)) ? 1 : 0; + UINT32 op, madr; + UINT8 v = (!CPU_OV == !(CPU_FLAGL & S_FLAG)) ? 1 : 0; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -853,10 +883,10 @@ SETL_Eb(void) void SETNL_Eb(void) { - DWORD op, src, madr; - BYTE v = (!CPU_OV == !(CPU_FLAGL & S_FLAG)) ? 0 : 1; + UINT32 op, madr; + UINT8 v = (!CPU_OV == !(CPU_FLAGL & S_FLAG)) ? 0 : 1; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -870,10 +900,10 @@ SETNL_Eb(void) void SETLE_Eb(void) { - DWORD op, src, madr; - BYTE v = ((CPU_FLAGL & Z_FLAG) || (!CPU_OV == !(CPU_FLAGL & S_FLAG))) ? 1 : 0; + UINT32 op, madr; + UINT8 v = ((CPU_FLAGL & Z_FLAG) || (!CPU_OV == !(CPU_FLAGL & S_FLAG))) ? 1 : 0; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -887,10 +917,10 @@ SETLE_Eb(void) void SETNLE_Eb(void) { - DWORD op, src, madr; - BYTE v = ((CPU_FLAGL & Z_FLAG) || (!CPU_OV == !(CPU_FLAGL & S_FLAG))) ? 0 : 1; + UINT32 op, madr; + UINT8 v = ((CPU_FLAGL & Z_FLAG) || (!CPU_OV == !(CPU_FLAGL & S_FLAG))) ? 0 : 1; - PREPART_EA_REG8(op, src); + GET_PCBYTE(op); if (op >= 0xc0) { CPU_WORKCLOCK(2); *(reg8_b20[op]) = v; @@ -907,7 +937,7 @@ SETNLE_Eb(void) void TEST_EbGb(void) { - DWORD op, src, tmp, madr; + UINT32 op, src, tmp, madr; PREPART_EA_REG8(op, src); if (op >= 0xc0) { @@ -918,13 +948,13 @@ TEST_EbGb(void) madr = calc_ea_dst(op); tmp = cpu_vmemoryread(CPU_INST_SEGREG_INDEX, madr); } - ANDBYTE(tmp, src); + AND_BYTE(tmp, src); } void TEST_EwGw(void) { - DWORD op, src, tmp, madr; + UINT32 op, src, tmp, madr; PREPART_EA_REG16(op, src); if (op >= 0xc0) { @@ -935,13 +965,13 @@ TEST_EwGw(void) madr = calc_ea_dst(op); tmp = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } - ANDWORD(tmp, src); + AND_WORD(tmp, src); } void TEST_EdGd(void) { - DWORD op, src, tmp, madr; + UINT32 op, src, tmp, madr; PREPART_EA_REG32(op, src); if (op >= 0xc0) { @@ -952,46 +982,46 @@ TEST_EdGd(void) madr = calc_ea_dst(op); tmp = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); } - ANDDWORD(tmp, src); + AND_DWORD(tmp, src); } void TEST_ALIb(void) { - DWORD src, tmp; + UINT32 src, tmp; CPU_WORKCLOCK(3); tmp = CPU_AL; GET_PCBYTE(src); - ANDBYTE(tmp, src); + AND_BYTE(tmp, src); } void TEST_AXIw(void) { - DWORD src, tmp; + UINT32 src, tmp; CPU_WORKCLOCK(3); tmp = CPU_AX; GET_PCWORD(src); - ANDWORD(tmp, src); + AND_WORD(tmp, src); } void TEST_EAXId(void) { - DWORD src, tmp; + UINT32 src, tmp; CPU_WORKCLOCK(3); tmp = CPU_EAX; GET_PCDWORD(src); - ANDDWORD(tmp, src); + AND_DWORD(tmp, src); } void -TEST_EbIb(DWORD op) +TEST_EbIb(UINT32 op) { - DWORD src, tmp, madr; + UINT32 src, tmp, madr; if (op >= 0xc0) { CPU_WORKCLOCK(2); @@ -1002,13 +1032,13 @@ TEST_EbIb(DWORD op) tmp = cpu_vmemoryread(CPU_INST_SEGREG_INDEX, madr); } GET_PCBYTE(src); - ANDBYTE(tmp, src); + AND_BYTE(tmp, src); } void -TEST_EwIw(DWORD op) +TEST_EwIw(UINT32 op) { - DWORD src, tmp, madr; + UINT32 src, tmp, madr; if (op >= 0xc0) { CPU_WORKCLOCK(2); @@ -1019,13 +1049,13 @@ TEST_EwIw(DWORD op) tmp = cpu_vmemoryread_w(CPU_INST_SEGREG_INDEX, madr); } GET_PCWORD(src); - ANDWORD(tmp, src); + AND_WORD(tmp, src); } void -TEST_EdId(DWORD op) +TEST_EdId(UINT32 op) { - DWORD src, tmp, madr; + UINT32 src, tmp, madr; if (op >= 0xc0) { CPU_WORKCLOCK(2); @@ -1036,5 +1066,5 @@ TEST_EdId(DWORD op) tmp = cpu_vmemoryread_d(CPU_INST_SEGREG_INDEX, madr); } GET_PCDWORD(src); - ANDDWORD(tmp, src); + AND_DWORD(tmp, src); }