| version 1.2, 2003/12/22 18:00:31 | version 1.5, 2004/01/27 15:53:56 | 
| Line 32 | Line 32 | 
 | #include "ia32.mcr" | #include "ia32.mcr" | 
 |  |  | 
 |  |  | 
| static DWORD (*calc_ea_dst_tbl[0x100])(void); | DWORD (*calc_ea_dst_tbl[0x100])(void); | 
| static DWORD (*calc_ea32_dst_tbl[0x100])(void); | DWORD (*calc_ea32_dst_tbl[0x100])(void); | 
|  |  | 
 |  |  | 
 |  | #if defined(DEBUG) || !defined(IA32_INLINE_CALC_EA) | 
 | DWORD | DWORD | 
 | calc_ea_dst(DWORD op) | calc_ea_dst(DWORD op) | 
 | { | { | 
| Line 46  calc_ea_dst(DWORD op) | Line 46  calc_ea_dst(DWORD op) | 
 | return ((*calc_ea_dst_tbl[op])() & 0xffff); | return ((*calc_ea_dst_tbl[op])() & 0xffff); | 
 | return (*calc_ea32_dst_tbl[op])(); | return (*calc_ea32_dst_tbl[op])(); | 
 | } | } | 
 |  | #endif  /* IA32_INLINE_CALC_EA */ | 
 |  |  | 
 |  |  | 
 | /* | /* | 
| Line 71  static DWORD | Line 72  static DWORD | 
 | ea_bx_si(void) | ea_bx_si(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA16(0); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (CPU_BX + CPU_SI); | return (CPU_BX + CPU_SI); | 
 | } | } | 
| Line 82  ea_bx_si_disp8(void) | Line 81  ea_bx_si_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(1); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_BX + CPU_SI); | return (adrs + CPU_BX + CPU_SI); | 
| Line 94  ea_bx_si_disp16(void) | Line 91  ea_bx_si_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(2); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_BX + CPU_SI); | return (adrs + CPU_BX + CPU_SI); | 
| Line 105  static DWORD | Line 100  static DWORD | 
 | ea_bx_di(void) | ea_bx_di(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA16(3); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (CPU_BX + CPU_DI); | return (CPU_BX + CPU_DI); | 
 | } | } | 
| Line 116  ea_bx_di_disp8(void) | Line 109  ea_bx_di_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(4); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_BX + CPU_DI); | return (adrs + CPU_BX + CPU_DI); | 
| Line 128  ea_bx_di_disp16(void) | Line 119  ea_bx_di_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(5); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_BX + CPU_DI); | return (adrs + CPU_BX + CPU_DI); | 
| Line 139  static DWORD | Line 128  static DWORD | 
 | ea_bp_si(void) | ea_bp_si(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA16(6); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return (CPU_BP + CPU_SI); | return (CPU_BP + CPU_SI); | 
 | } | } | 
| Line 150  ea_bp_si_disp8(void) | Line 137  ea_bp_si_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(7); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return (adrs + CPU_BP + CPU_SI); | return (adrs + CPU_BP + CPU_SI); | 
| Line 162  ea_bp_si_disp16(void) | Line 147  ea_bp_si_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(8); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return (adrs + CPU_BP + CPU_SI); | return (adrs + CPU_BP + CPU_SI); | 
| Line 173  static DWORD | Line 156  static DWORD | 
 | ea_bp_di(void) | ea_bp_di(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA16(9); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return (CPU_BP + CPU_DI); | return (CPU_BP + CPU_DI); | 
 | } | } | 
| Line 184  ea_bp_di_disp8(void) | Line 165  ea_bp_di_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(10); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return (adrs + CPU_BP + CPU_DI); | return (adrs + CPU_BP + CPU_DI); | 
| Line 196  ea_bp_di_disp16(void) | Line 175  ea_bp_di_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(11); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return (adrs + CPU_BP + CPU_DI); | return (adrs + CPU_BP + CPU_DI); | 
| Line 207  static DWORD | Line 184  static DWORD | 
 | ea_si(void) | ea_si(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA16(12); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_SI; | return CPU_SI; | 
 | } | } | 
| Line 218  ea_si_disp8(void) | Line 193  ea_si_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(13); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_SI); | return (adrs + CPU_SI); | 
| Line 230  ea_si_disp16(void) | Line 203  ea_si_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(14); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_SI); | return (adrs + CPU_SI); | 
| Line 241  static DWORD | Line 212  static DWORD | 
 | ea_di(void) | ea_di(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA16(15); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_DI; | return CPU_DI; | 
 | } | } | 
| Line 252  ea_di_disp8(void) | Line 221  ea_di_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(16); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_DI); | return (adrs + CPU_DI); | 
| Line 264  ea_di_disp16(void) | Line 231  ea_di_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(17); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_DI); | return (adrs + CPU_DI); | 
| Line 276  ea_disp16(void) | Line 241  ea_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(18); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs; | return adrs; | 
| Line 288  ea_bp_disp8(void) | Line 251  ea_bp_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(19); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return (adrs + CPU_BP); | return (adrs + CPU_BP); | 
| Line 300  ea_bp_disp16(void) | Line 261  ea_bp_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(20); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return (adrs + CPU_BP); | return (adrs + CPU_BP); | 
| Line 311  static DWORD | Line 270  static DWORD | 
 | ea_bx(void) | ea_bx(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA16(21); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_BX; | return CPU_BX; | 
 | } | } | 
| Line 322  ea_bx_disp8(void) | Line 279  ea_bx_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(22); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_BX); | return (adrs + CPU_BX); | 
| Line 334  ea_bx_disp16(void) | Line 289  ea_bx_disp16(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA16(23); |  | 
 |  |  | 
 | GET_PCWORD(adrs); | GET_PCWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return (adrs + CPU_BX); | return (adrs + CPU_BX); | 
| Line 367  static DWORD | Line 320  static DWORD | 
 | ea32_eax(void) | ea32_eax(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA32(0); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_EAX; | return CPU_EAX; | 
 | } | } | 
| Line 377  static DWORD | Line 328  static DWORD | 
 | ea32_ecx(void) | ea32_ecx(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA32(1); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_ECX; | return CPU_ECX; | 
 | } | } | 
| Line 387  static DWORD | Line 336  static DWORD | 
 | ea32_edx(void) | ea32_edx(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA32(2); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_EDX; | return CPU_EDX; | 
 | } | } | 
| Line 397  static DWORD | Line 344  static DWORD | 
 | ea32_ebx(void) | ea32_ebx(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA32(3); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_EBX; | return CPU_EBX; | 
 | } | } | 
| Line 409  ea32_sib(void) | Line 354  ea32_sib(void) | 
 | DWORD op, dst; | DWORD op, dst; | 
 | DWORD base, idx, scale; | DWORD base, idx, scale; | 
 |  |  | 
 | PROFILE_INC_EA32(4); |  | 
 |  |  | 
 | GET_PCBYTE(op); | GET_PCBYTE(op); | 
 | dst = 0;        /* compiler happy */ |  | 
 |  |  | 
 | base = op & 7; | base = op & 7; | 
 | idx = (op >> 3) & 7; | idx = (op >> 3) & 7; | 
 | scale = (op >> 6) & 3; | scale = (op >> 6) & 3; | 
 |  |  | 
 | switch (base) { | switch (base) { | 
 | case 0: case 1: case 2: case 3: case 6: case 7: | case 0: case 1: case 2: case 3: case 6: case 7: | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
| Line 432  ea32_sib(void) | Line 374  ea32_sib(void) | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | GET_PCDWORD(dst); | GET_PCDWORD(dst); | 
 | break; | break; | 
 |  |  | 
 |  | default: | 
 |  | dst = 0;        /* compiler happy */ | 
 |  | ia32_panic("ea32_sib: invalid base = %d", base); | 
 |  | break; | 
 | } | } | 
 | if (idx != 4) | if (idx != 4) | 
 | dst += CPU_REGS_DWORD(idx) << scale; | dst += CPU_REGS_DWORD(idx) << scale; | 
 | PROFILE_INC_SIB0(op); |  | 
 | return dst; | return dst; | 
 | } | } | 
 |  |  | 
| Line 444  ea32_disp32(void) | Line 390  ea32_disp32(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(5); |  | 
 |  |  | 
 | GET_PCDWORD(adrs); | GET_PCDWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs; | return adrs; | 
| Line 455  static DWORD | Line 399  static DWORD | 
 | ea32_esi(void) | ea32_esi(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA32(6); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_ESI; | return CPU_ESI; | 
 | } | } | 
| Line 465  static DWORD | Line 407  static DWORD | 
 | ea32_edi(void) | ea32_edi(void) | 
 | { | { | 
 |  |  | 
 | PROFILE_INC_EA32(7); |  | 
 |  |  | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return CPU_EDI; | return CPU_EDI; | 
 | } | } | 
| Line 476  ea32_eax_disp8(void) | Line 416  ea32_eax_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(8); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_EAX; | return adrs + CPU_EAX; | 
| Line 488  ea32_ecx_disp8(void) | Line 426  ea32_ecx_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(9); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_ECX; | return adrs + CPU_ECX; | 
| Line 500  ea32_edx_disp8(void) | Line 436  ea32_edx_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(10); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_EDX; | return adrs + CPU_EDX; | 
| Line 512  ea32_ebx_disp8(void) | Line 446  ea32_ebx_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(11); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_EBX; | return adrs + CPU_EBX; | 
| Line 526  ea32_sib_disp8(void) | Line 458  ea32_sib_disp8(void) | 
 | DWORD op; | DWORD op; | 
 | DWORD base, idx, scale; | DWORD base, idx, scale; | 
 |  |  | 
 | PROFILE_INC_EA32(12); |  | 
 |  |  | 
 | GET_PCBYTE(op); | GET_PCBYTE(op); | 
 | GET_PCBYTESD(adrs); |  | 
 |  |  | 
 | base = op & 7; | base = op & 7; | 
 | idx = (op >> 3) & 7; | idx = (op >> 3) & 7; | 
 | scale = (op >> 6) & 3; | scale = (op >> 6) & 3; | 
 |  |  | 
 |  | GET_PCBYTESD(adrs); | 
 |  |  | 
 | switch (base) { | switch (base) { | 
 | case 0: case 1: case 2: case 3: case 6: case 7: | case 0: case 1: case 2: case 3: case 6: case 7: | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
| Line 545  ea32_sib_disp8(void) | Line 476  ea32_sib_disp8(void) | 
 | } | } | 
 | if (idx != 4) | if (idx != 4) | 
 | adrs += CPU_REGS_DWORD(idx) << scale; | adrs += CPU_REGS_DWORD(idx) << scale; | 
 | PROFILE_INC_SIB1(op); |  | 
 | return CPU_REGS_DWORD(base) + adrs; | return CPU_REGS_DWORD(base) + adrs; | 
 | } | } | 
 |  |  | 
| Line 554  ea32_ebp_disp8(void) | Line 484  ea32_ebp_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(13); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return adrs + CPU_EBP; | return adrs + CPU_EBP; | 
| Line 566  ea32_esi_disp8(void) | Line 494  ea32_esi_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(14); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_ESI; | return adrs + CPU_ESI; | 
| Line 578  ea32_edi_disp8(void) | Line 504  ea32_edi_disp8(void) | 
 | { | { | 
 | SDWORD adrs; | SDWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(15); |  | 
 |  |  | 
 | GET_PCBYTESD(adrs); | GET_PCBYTESD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_EDI; | return adrs + CPU_EDI; | 
| Line 590  ea32_eax_disp32(void) | Line 514  ea32_eax_disp32(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(16); |  | 
 |  |  | 
 | GET_PCDWORD(adrs); | GET_PCDWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_EAX; | return adrs + CPU_EAX; | 
| Line 602  ea32_ecx_disp32(void) | Line 524  ea32_ecx_disp32(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(17); |  | 
 |  |  | 
 | GET_PCDWORD(adrs); | GET_PCDWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_ECX; | return adrs + CPU_ECX; | 
| Line 614  ea32_edx_disp32(void) | Line 534  ea32_edx_disp32(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(18); |  | 
 |  |  | 
 | GET_PCDWORD(adrs); | GET_PCDWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_EDX; | return adrs + CPU_EDX; | 
| Line 626  ea32_ebx_disp32(void) | Line 544  ea32_ebx_disp32(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(19); |  | 
 |  |  | 
 | GET_PCDWORD(adrs); | GET_PCDWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_EBX; | return adrs + CPU_EBX; | 
| Line 640  ea32_sib_disp32(void) | Line 556  ea32_sib_disp32(void) | 
 | DWORD op; | DWORD op; | 
 | DWORD base, idx, scale; | DWORD base, idx, scale; | 
 |  |  | 
 | PROFILE_INC_EA32(20); |  | 
 |  |  | 
 | GET_PCBYTE(op); | GET_PCBYTE(op); | 
 | GET_PCDWORD(adrs); |  | 
 |  |  | 
 | base = op & 7; | base = op & 7; | 
 | idx = (op >> 3) & 7; | idx = (op >> 3) & 7; | 
 | scale = (op >> 6) & 3; | scale = (op >> 6) & 3; | 
 |  |  | 
 |  | GET_PCDWORD(adrs); | 
 |  |  | 
 | switch (base) { | switch (base) { | 
 | case 0: case 1: case 2: case 3: case 6: case 7: | case 0: case 1: case 2: case 3: case 6: case 7: | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
| Line 659  ea32_sib_disp32(void) | Line 574  ea32_sib_disp32(void) | 
 | } | } | 
 | if (idx != 4) | if (idx != 4) | 
 | adrs += CPU_REGS_DWORD(idx) << scale; | adrs += CPU_REGS_DWORD(idx) << scale; | 
 | PROFILE_INC_SIB2(op); |  | 
 | return CPU_REGS_DWORD(base) + adrs; | return CPU_REGS_DWORD(base) + adrs; | 
 | } | } | 
 |  |  | 
| Line 668  ea32_ebp_disp32(void) | Line 582  ea32_ebp_disp32(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(21); |  | 
 |  |  | 
 | GET_PCDWORD(adrs); | GET_PCDWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = SS_FIX; | CPU_INST_SEGREG_INDEX = SS_FIX; | 
 | return adrs + CPU_EBP; | return adrs + CPU_EBP; | 
| Line 680  ea32_esi_disp32(void) | Line 592  ea32_esi_disp32(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(22); |  | 
 |  |  | 
 | GET_PCDWORD(adrs); | GET_PCDWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_ESI; | return adrs + CPU_ESI; | 
| Line 692  ea32_edi_disp32(void) | Line 602  ea32_edi_disp32(void) | 
 | { | { | 
 | DWORD adrs; | DWORD adrs; | 
 |  |  | 
 | PROFILE_INC_EA32(23); |  | 
 |  |  | 
 | GET_PCDWORD(adrs); | GET_PCDWORD(adrs); | 
 | CPU_INST_SEGREG_INDEX = DS_FIX; | CPU_INST_SEGREG_INDEX = DS_FIX; | 
 | return adrs + CPU_EDI; | return adrs + CPU_EDI; |