|
|
| version 1.7, 2004/02/04 13:24:35 | version 1.8, 2004/02/05 16:43:44 |
|---|---|
| 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 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 |