|
|
| version 1.2, 2003/12/22 18:00:31 | version 1.5, 2004/01/26 15:23:55 |
|---|---|
| Line 117 do { \ | Line 117 do { \ |
| #define SET_EIP(v) \ | #define SET_EIP(v) \ |
| do { \ | do { \ |
| DWORD __new_ip = (v); \ | DWORD __new_ip = (v); \ |
| if (!CPU_INST_OP32) { \ | if (!CPU_STATSAVE.cpu_inst_default.op_32) {\ |
| __new_ip &= 0x0000ffff; \ | __new_ip &= 0x0000ffff; \ |
| } \ | } \ |
| if (__new_ip > CPU_STAT_CS_LIMIT) { \ | if (__new_ip > CPU_STAT_CS_LIMIT) { \ |
| VERBOSE(("SET_EIP: new_ip = %08x, limit = %08x", __new_ip, CPU_STAT_CS_LIMIT)); \ | |
| EXCEPTION(GP_EXCEPTION, 0); \ | EXCEPTION(GP_EXCEPTION, 0); \ |
| } \ | } \ |
| CPU_EIP = __new_ip; \ | CPU_EIP = __new_ip; \ |
| Line 129 do { \ | Line 130 do { \ |
| #define ADD_EIP(v) \ | #define ADD_EIP(v) \ |
| do { \ | do { \ |
| DWORD __tmp_ip = CPU_EIP + (v); \ | DWORD __tmp_ip = CPU_EIP + (v); \ |
| if (!CPU_INST_OP32) { \ | if (!CPU_STATSAVE.cpu_inst_default.op_32) {\ |
| __tmp_ip &= 0x0000ffff; \ | __tmp_ip &= 0x0000ffff; \ |
| } \ | } \ |
| if (__tmp_ip > CPU_STAT_CS_LIMIT) { \ | |
| EXCEPTION(GP_EXCEPTION, 0); \ | |
| } \ | |
| CPU_EIP = __tmp_ip; \ | CPU_EIP = __tmp_ip; \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| Line 392 do { \ | Line 390 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 429 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) { \ |