|
|
| version 1.1, 2003/12/08 00:55: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) |
| { | { |
| __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])(); |
| } | } |
| #endif /* IA32_INLINE_CALC_EA */ | |
| /* | /* |
| Line 352 ea32_sib(void) | Line 355 ea32_sib(void) |
| DWORD base, idx, scale; | DWORD base, idx, scale; |
| 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 372 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; |
| Line 452 ea32_sib_disp8(void) | Line 459 ea32_sib_disp8(void) |
| DWORD base, idx, scale; | DWORD base, idx, scale; |
| 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 549 ea32_sib_disp32(void) | Line 557 ea32_sib_disp32(void) |
| DWORD base, idx, scale; | DWORD base, idx, scale; |
| 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; |