|
|
| version 1.1, 2003/12/08 00:55:31 | version 1.3, 2004/01/15 15:49:15 |
|---|---|
| Line 392 do { \ | Line 392 do { \ |
| #define _ADCDWORD(r, d, s) \ | #define _ADCDWORD(r, d, s) \ |
| do { \ | do { \ |
| (r) = (CPU_FLAGL & C_FLAG) + (s) + (d); \ | DWORD __c = (CPU_FLAGL & C_FLAG); \ |
| (r) = (s) + (d) + __c; \ | |
| CPU_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x80000000; \ | CPU_OV = ((r) ^ (s)) & ((r) ^ (d)) & 0x80000000; \ |
| CPU_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG); \ | CPU_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG); \ |
| if ((r) < (s)) { \ | if ((!__c && (r) < (s)) || (__c && (r) <= (s))) { \ |
| CPU_FLAGL |= C_FLAG; \ | CPU_FLAGL |= C_FLAG; \ |
| } \ | } \ |
| if ((r) == 0) { \ | if ((r) == 0) { \ |
| Line 430 do { \ | Line 431 do { \ |
| #define _DWORD_SBB(r, d, s) \ | #define _DWORD_SBB(r, d, s) \ |
| do { \ | do { \ |
| (r) = (d) - (s) - (CPU_FLAGL & C_FLAG); \ | DWORD __c = (CPU_FLAGL & C_FLAG); \ |
| (r) = (d) - (s) - __c; \ | |
| CPU_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x80000000; \ | CPU_OV = ((d) ^ (r)) & ((d) ^ (s)) & 0x80000000; \ |
| CPU_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG); \ | CPU_FLAGL = (BYTE)(((r) ^ (d) ^ (s)) & A_FLAG); \ |
| if ((d) < (s)) { \ | if ((d) < (s) + __c) { \ |
| CPU_FLAGL |= C_FLAG; \ | CPU_FLAGL |= C_FLAG; \ |
| } \ | } \ |
| if ((r) == 0) { \ | if ((r) == 0) { \ |
| Line 816 do { \ | Line 818 do { \ |
| #define PUSH0_32(reg) \ | #define PUSH0_32(reg) \ |
| do { \ | do { \ |
| if (!CPU_STAT_SS32) { \ | if (CPU_STAT_SS32) { \ |
| REGPUSH0_32_16(reg); \ | |
| } else { \ | |
| REGPUSH0_32(reg); \ | REGPUSH0_32(reg); \ |
| } else { \ | |
| REGPUSH0_32_16(reg); \ | |
| } \ | } \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| Line 847 do { \ | Line 849 do { \ |
| #define SP_PUSH0_32(reg) \ | #define SP_PUSH0_32(reg) \ |
| do { \ | do { \ |
| DWORD esp = CPU_ESP; \ | DWORD esp = CPU_ESP; \ |
| if (!CPU_STAT_SS32) { \ | if (CPU_STAT_SS32) { \ |
| CPU_SP -= 4; \ | |
| cpu_vmemorywrite_d(CPU_SS_INDEX, CPU_SP, esp); \ | |
| } else { \ | |
| CPU_ESP -= 4; \ | CPU_ESP -= 4; \ |
| cpu_vmemorywrite_d(CPU_SS_INDEX, CPU_ESP, esp); \ | cpu_vmemorywrite_d(CPU_SS_INDEX, CPU_ESP, esp); \ |
| } else { \ | |
| CPU_SP -= 4; \ | |
| cpu_vmemorywrite_d(CPU_SS_INDEX, CPU_SP, esp); \ | |
| } \ | } \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| Line 905 do { \ | Line 907 do { \ |
| #define POP0_32(reg) \ | #define POP0_32(reg) \ |
| do { \ | do { \ |
| if (!CPU_STAT_SS32) { \ | if (CPU_STAT_SS32) { \ |
| REGPOP0_32_16(reg); \ | |
| } else { \ | |
| REGPOP0_32(reg); \ | REGPOP0_32(reg); \ |
| } else { \ | |
| REGPOP0_32_16(reg); \ | |
| } \ | } \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| Line 923 do { \ | Line 925 do { \ |
| #define ESP_POP0_32(reg) \ | #define ESP_POP0_32(reg) \ |
| do { \ | do { \ |
| if (!CPU_STAT_SS32) { \ | if (CPU_STAT_SS32) { \ |
| (reg) = cpu_vmemoryread_d(CPU_SS_INDEX, CPU_SP); \ | |
| } else { \ | |
| (reg) = cpu_vmemoryread_d(CPU_SS_INDEX, CPU_ESP); \ | (reg) = cpu_vmemoryread_d(CPU_SS_INDEX, CPU_ESP); \ |
| } else { \ | |
| (reg) = cpu_vmemoryread_d(CPU_SS_INDEX, CPU_SP); \ | |
| } \ | } \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| Line 944 do { \ | Line 946 do { \ |
| #define JMPNEAR(clock) \ | #define JMPNEAR(clock) \ |
| do { \ | do { \ |
| WORD __ip; \ | DWORD __ip; \ |
| CPU_WORKCLOCK(clock); \ | CPU_WORKCLOCK(clock); \ |
| __ip = __CWDE(cpu_codefetch_w(CPU_EIP)); \ | __ip = __CWDE(cpu_codefetch_w(CPU_EIP)); \ |
| __ip += 2; \ | __ip += 2; \ |