|
|
| version 1.1, 2003/12/08 00:55:31 | version 1.2, 2003/12/22 18:00:31 |
|---|---|
| Line 40 DWORD | Line 40 DWORD |
| calc_ea_dst(DWORD op) | calc_ea_dst(DWORD op) |
| { | { |
| __ASSERT(op < 0x100); | |
| if (!CPU_INST_AS32) | if (!CPU_INST_AS32) |
| 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])(); |
| Line 69 static DWORD | Line 71 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 78 ea_bx_si_disp8(void) | Line 82 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 88 ea_bx_si_disp16(void) | Line 94 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 97 static DWORD | Line 105 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 106 ea_bx_di_disp8(void) | Line 116 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 116 ea_bx_di_disp16(void) | Line 128 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 125 static DWORD | Line 139 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 134 ea_bp_si_disp8(void) | Line 150 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 144 ea_bp_si_disp16(void) | Line 162 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 153 static DWORD | Line 173 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 162 ea_bp_di_disp8(void) | Line 184 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 172 ea_bp_di_disp16(void) | Line 196 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 181 static DWORD | Line 207 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 190 ea_si_disp8(void) | Line 218 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 200 ea_si_disp16(void) | Line 230 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 209 static DWORD | Line 241 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 218 ea_di_disp8(void) | Line 252 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 228 ea_di_disp16(void) | Line 264 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 238 ea_disp16(void) | Line 276 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 248 ea_bp_disp8(void) | Line 288 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 258 ea_bp_disp16(void) | Line 300 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 267 static DWORD | Line 311 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 276 ea_bx_disp8(void) | Line 322 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 286 ea_bx_disp16(void) | Line 334 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 317 static DWORD | Line 367 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 325 static DWORD | Line 377 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 333 static DWORD | Line 387 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 341 static DWORD | Line 397 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 351 ea32_sib(void) | Line 409 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 */ | dst = 0; /* compiler happy */ |
| Line 375 ea32_sib(void) | Line 435 ea32_sib(void) |
| } | } |
| 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 383 ea32_disp32(void) | Line 444 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 392 static DWORD | Line 455 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 400 static DWORD | Line 465 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 409 ea32_eax_disp8(void) | Line 476 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 419 ea32_ecx_disp8(void) | Line 488 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 429 ea32_edx_disp8(void) | Line 500 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 439 ea32_ebx_disp8(void) | Line 512 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 451 ea32_sib_disp8(void) | Line 526 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); | GET_PCBYTESD(adrs); |
| Line 468 ea32_sib_disp8(void) | Line 545 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 476 ea32_ebp_disp8(void) | Line 554 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 486 ea32_esi_disp8(void) | Line 566 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 496 ea32_edi_disp8(void) | Line 578 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 506 ea32_eax_disp32(void) | Line 590 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 516 ea32_ecx_disp32(void) | Line 602 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 526 ea32_edx_disp32(void) | Line 614 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 536 ea32_ebx_disp32(void) | Line 626 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 548 ea32_sib_disp32(void) | Line 640 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); | GET_PCDWORD(adrs); |
| Line 565 ea32_sib_disp32(void) | Line 659 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 573 ea32_ebp_disp32(void) | Line 668 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 583 ea32_esi_disp32(void) | Line 680 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 593 ea32_edi_disp32(void) | Line 692 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; |