--- np2/i386c/ia32/resolve.c 2003/12/08 00:55:31 1.1 +++ np2/i386c/ia32/resolve.c 2003/12/22 18:00:31 1.2 @@ -1,4 +1,4 @@ -/* $Id: resolve.c,v 1.1 2003/12/08 00:55:31 yui Exp $ */ +/* $Id: resolve.c,v 1.2 2003/12/22 18:00:31 monaka Exp $ */ /* * Copyright (c) 2002-2003 NONAKA Kimihiro @@ -40,6 +40,8 @@ DWORD calc_ea_dst(DWORD op) { + __ASSERT(op < 0x100); + if (!CPU_INST_AS32) return ((*calc_ea_dst_tbl[op])() & 0xffff); return (*calc_ea32_dst_tbl[op])(); @@ -69,6 +71,8 @@ static DWORD ea_bx_si(void) { + PROFILE_INC_EA16(0); + CPU_INST_SEGREG_INDEX = DS_FIX; return (CPU_BX + CPU_SI); } @@ -78,6 +82,8 @@ ea_bx_si_disp8(void) { SDWORD adrs; + PROFILE_INC_EA16(1); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_BX + CPU_SI); @@ -88,6 +94,8 @@ ea_bx_si_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(2); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_BX + CPU_SI); @@ -97,6 +105,8 @@ static DWORD ea_bx_di(void) { + PROFILE_INC_EA16(3); + CPU_INST_SEGREG_INDEX = DS_FIX; return (CPU_BX + CPU_DI); } @@ -106,6 +116,8 @@ ea_bx_di_disp8(void) { SDWORD adrs; + PROFILE_INC_EA16(4); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_BX + CPU_DI); @@ -116,6 +128,8 @@ ea_bx_di_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(5); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_BX + CPU_DI); @@ -125,6 +139,8 @@ static DWORD ea_bp_si(void) { + PROFILE_INC_EA16(6); + CPU_INST_SEGREG_INDEX = SS_FIX; return (CPU_BP + CPU_SI); } @@ -134,6 +150,8 @@ ea_bp_si_disp8(void) { SDWORD adrs; + PROFILE_INC_EA16(7); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = SS_FIX; return (adrs + CPU_BP + CPU_SI); @@ -144,6 +162,8 @@ ea_bp_si_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(8); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = SS_FIX; return (adrs + CPU_BP + CPU_SI); @@ -153,6 +173,8 @@ static DWORD ea_bp_di(void) { + PROFILE_INC_EA16(9); + CPU_INST_SEGREG_INDEX = SS_FIX; return (CPU_BP + CPU_DI); } @@ -162,6 +184,8 @@ ea_bp_di_disp8(void) { SDWORD adrs; + PROFILE_INC_EA16(10); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = SS_FIX; return (adrs + CPU_BP + CPU_DI); @@ -172,6 +196,8 @@ ea_bp_di_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(11); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = SS_FIX; return (adrs + CPU_BP + CPU_DI); @@ -181,6 +207,8 @@ static DWORD ea_si(void) { + PROFILE_INC_EA16(12); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_SI; } @@ -190,6 +218,8 @@ ea_si_disp8(void) { SDWORD adrs; + PROFILE_INC_EA16(13); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_SI); @@ -200,6 +230,8 @@ ea_si_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(14); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_SI); @@ -209,6 +241,8 @@ static DWORD ea_di(void) { + PROFILE_INC_EA16(15); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_DI; } @@ -218,6 +252,8 @@ ea_di_disp8(void) { SDWORD adrs; + PROFILE_INC_EA16(16); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_DI); @@ -228,6 +264,8 @@ ea_di_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(17); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_DI); @@ -238,6 +276,8 @@ ea_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(18); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs; @@ -248,6 +288,8 @@ ea_bp_disp8(void) { SDWORD adrs; + PROFILE_INC_EA16(19); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = SS_FIX; return (adrs + CPU_BP); @@ -258,6 +300,8 @@ ea_bp_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(20); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = SS_FIX; return (adrs + CPU_BP); @@ -267,6 +311,8 @@ static DWORD ea_bx(void) { + PROFILE_INC_EA16(21); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_BX; } @@ -276,6 +322,8 @@ ea_bx_disp8(void) { SDWORD adrs; + PROFILE_INC_EA16(22); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_BX); @@ -286,6 +334,8 @@ ea_bx_disp16(void) { DWORD adrs; + PROFILE_INC_EA16(23); + GET_PCWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return (adrs + CPU_BX); @@ -317,6 +367,8 @@ static DWORD ea32_eax(void) { + PROFILE_INC_EA32(0); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_EAX; } @@ -325,6 +377,8 @@ static DWORD ea32_ecx(void) { + PROFILE_INC_EA32(1); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_ECX; } @@ -333,6 +387,8 @@ static DWORD ea32_edx(void) { + PROFILE_INC_EA32(2); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_EDX; } @@ -341,6 +397,8 @@ static DWORD ea32_ebx(void) { + PROFILE_INC_EA32(3); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_EBX; } @@ -351,6 +409,8 @@ ea32_sib(void) DWORD op, dst; DWORD base, idx, scale; + PROFILE_INC_EA32(4); + GET_PCBYTE(op); dst = 0; /* compiler happy */ @@ -375,6 +435,7 @@ ea32_sib(void) } if (idx != 4) dst += CPU_REGS_DWORD(idx) << scale; + PROFILE_INC_SIB0(op); return dst; } @@ -383,6 +444,8 @@ ea32_disp32(void) { DWORD adrs; + PROFILE_INC_EA32(5); + GET_PCDWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs; @@ -392,6 +455,8 @@ static DWORD ea32_esi(void) { + PROFILE_INC_EA32(6); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_ESI; } @@ -400,6 +465,8 @@ static DWORD ea32_edi(void) { + PROFILE_INC_EA32(7); + CPU_INST_SEGREG_INDEX = DS_FIX; return CPU_EDI; } @@ -409,6 +476,8 @@ ea32_eax_disp8(void) { SDWORD adrs; + PROFILE_INC_EA32(8); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_EAX; @@ -419,6 +488,8 @@ ea32_ecx_disp8(void) { SDWORD adrs; + PROFILE_INC_EA32(9); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_ECX; @@ -429,6 +500,8 @@ ea32_edx_disp8(void) { SDWORD adrs; + PROFILE_INC_EA32(10); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_EDX; @@ -439,6 +512,8 @@ ea32_ebx_disp8(void) { SDWORD adrs; + PROFILE_INC_EA32(11); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_EBX; @@ -451,6 +526,8 @@ ea32_sib_disp8(void) DWORD op; DWORD base, idx, scale; + PROFILE_INC_EA32(12); + GET_PCBYTE(op); GET_PCBYTESD(adrs); @@ -468,6 +545,7 @@ ea32_sib_disp8(void) } if (idx != 4) adrs += CPU_REGS_DWORD(idx) << scale; + PROFILE_INC_SIB1(op); return CPU_REGS_DWORD(base) + adrs; } @@ -476,6 +554,8 @@ ea32_ebp_disp8(void) { SDWORD adrs; + PROFILE_INC_EA32(13); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = SS_FIX; return adrs + CPU_EBP; @@ -486,6 +566,8 @@ ea32_esi_disp8(void) { SDWORD adrs; + PROFILE_INC_EA32(14); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_ESI; @@ -496,6 +578,8 @@ ea32_edi_disp8(void) { SDWORD adrs; + PROFILE_INC_EA32(15); + GET_PCBYTESD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_EDI; @@ -506,6 +590,8 @@ ea32_eax_disp32(void) { DWORD adrs; + PROFILE_INC_EA32(16); + GET_PCDWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_EAX; @@ -516,6 +602,8 @@ ea32_ecx_disp32(void) { DWORD adrs; + PROFILE_INC_EA32(17); + GET_PCDWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_ECX; @@ -526,6 +614,8 @@ ea32_edx_disp32(void) { DWORD adrs; + PROFILE_INC_EA32(18); + GET_PCDWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_EDX; @@ -536,6 +626,8 @@ ea32_ebx_disp32(void) { DWORD adrs; + PROFILE_INC_EA32(19); + GET_PCDWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_EBX; @@ -548,6 +640,8 @@ ea32_sib_disp32(void) DWORD op; DWORD base, idx, scale; + PROFILE_INC_EA32(20); + GET_PCBYTE(op); GET_PCDWORD(adrs); @@ -565,6 +659,7 @@ ea32_sib_disp32(void) } if (idx != 4) adrs += CPU_REGS_DWORD(idx) << scale; + PROFILE_INC_SIB2(op); return CPU_REGS_DWORD(base) + adrs; } @@ -573,6 +668,8 @@ ea32_ebp_disp32(void) { DWORD adrs; + PROFILE_INC_EA32(21); + GET_PCDWORD(adrs); CPU_INST_SEGREG_INDEX = SS_FIX; return adrs + CPU_EBP; @@ -583,6 +680,8 @@ ea32_esi_disp32(void) { DWORD adrs; + PROFILE_INC_EA32(22); + GET_PCDWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_ESI; @@ -593,6 +692,8 @@ ea32_edi_disp32(void) { DWORD adrs; + PROFILE_INC_EA32(23); + GET_PCDWORD(adrs); CPU_INST_SEGREG_INDEX = DS_FIX; return adrs + CPU_EDI;