|
|
| version 1.7, 2004/02/04 13:24:35 | version 1.11, 2004/02/18 20:11:37 |
|---|---|
| Line 87 do { \ | Line 87 do { \ |
| #define SET_EIP(v) \ | #define SET_EIP(v) \ |
| do { \ | do { \ |
| DWORD __new_ip = (v); \ | DWORD __new_ip = (v); \ |
| if (!CPU_STATSAVE.cpu_inst_default.op_32) {\ | |
| __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)); \ | VERBOSE(("SET_EIP: new_ip = %08x, limit = %08x", __new_ip, CPU_STAT_CS_LIMIT)); \ |
| EXCEPTION(GP_EXCEPTION, 0); \ | EXCEPTION(GP_EXCEPTION, 0); \ |
| Line 100 do { \ | Line 97 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_STATSAVE.cpu_inst_default.op_32) {\ | if (!CPU_STATSAVE.cpu_inst_default.op_32) { \ |
| __tmp_ip &= 0x0000ffff; \ | __tmp_ip &= 0xffff; \ |
| } \ | } \ |
| CPU_EIP = __tmp_ip; \ | CPU_EIP = __tmp_ip; \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| Line 601 do { \ | Line 598 do { \ |
| do { \ | do { \ |
| CPU_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG); \ | CPU_FLAGL &= (Z_FLAG | S_FLAG | A_FLAG | P_FLAG); \ |
| (r) = (SQWORD)(d) * (SQWORD)(s); \ | (r) = (SQWORD)(d) * (SQWORD)(s); \ |
| CPU_OV = (DWORD)(((r) + 0x80000000ULL) >> 32); \ | CPU_OV = (DWORD)(((r) + QWORD_CONST(0x80000000)) >> 32); \ |
| if (CPU_OV) { \ | if (CPU_OV) { \ |
| CPU_FLAGL |= C_FLAG; \ | CPU_FLAGL |= C_FLAG; \ |
| } \ | } \ |
| Line 708 do { \ | Line 705 do { \ |
| #define REGPUSH0(reg) \ | #define REGPUSH0(reg) \ |
| do { \ | do { \ |
| CPU_SP -= 2; \ | CPU_SP -= 2; \ |
| cpu_vmemorywrite_w(CPU_SS_INDEX, CPU_SP, reg); \ | cpu_vmemorywrite_w(CPU_SS_INDEX, CPU_SP, (WORD)reg); \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| /* Operand Size == 16 && Stack Size == 32 */ | /* Operand Size == 16 && Stack Size == 32 */ |
| #define REGPUSH0_16_32(reg) \ | #define REGPUSH0_16_32(reg) \ |
| do { \ | do { \ |
| CPU_ESP -= 2; \ | CPU_ESP -= 2; \ |
| cpu_vmemorywrite_w(CPU_SS_INDEX, CPU_ESP, reg); \ | cpu_vmemorywrite_w(CPU_SS_INDEX, CPU_ESP, (WORD)reg); \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| /* Operand Size == 32 && Stack Size == 16 */ | /* Operand Size == 32 && Stack Size == 16 */ |
| Line 814 do { \ | Line 811 do { \ |
| } \ | } \ |
| } while (/*CONSTCOND*/ 0) | } while (/*CONSTCOND*/ 0) |
| /* | |
| * stack pointer | |
| */ | |
| #define SP_PUSH_16(reg) \ | |
| do { \ | |
| WORD sp = CPU_SP; \ | |
| if (!CPU_STAT_SS32) { \ | |
| REGPUSH0(sp); \ | |
| } else { \ | |
| REGPUSH0_16_32(sp); \ | |
| } \ | |
| } while (/*CONSTCOND*/ 0) | |
| #define ESP_PUSH_32(reg) \ | |
| do { \ | |
| DWORD sp = CPU_ESP; \ | |
| if (!CPU_STAT_SS32) { \ | |
| REGPUSH0_32_16(sp); \ | |
| } else { \ | |
| REGPUSH0_32(sp); \ | |
| } \ | |
| } while (/*CONSTCOND*/ 0) | |
| #define SP_POP_16(reg) \ | |
| do { \ | |
| DWORD sp; \ | |
| if (!CPU_STAT_SS32) { \ | |
| sp = CPU_SP; \ | |
| } else { \ | |
| sp = CPU_ESP; \ | |
| } \ | |
| CPU_SP = cpu_vmemoryread_w(CPU_SS_INDEX, sp); \ | |
| } while (/*CONSTCOND*/ 0) | |
| #define ESP_POP_32(reg) \ | |
| do { \ | |
| DWORD sp; \ | |
| if (!CPU_STAT_SS32) { \ | |
| sp = CPU_SP; \ | |
| } else { \ | |
| sp = CPU_ESP; \ | |
| } \ | |
| CPU_ESP = cpu_vmemoryread_d(CPU_SS_INDEX, sp); \ | |
| } while (/*CONSTCOND*/ 0) | |
| /* | /* |
| * jump | * jump |