diff options
author | Mike Pavone <pavone@retrodev.com> | 2012-12-29 22:11:28 -0800 |
---|---|---|
committer | Mike Pavone <pavone@retrodev.com> | 2012-12-29 22:11:28 -0800 |
commit | 02f56f5ca59506d7d81a302511f59cb8d122e764 (patch) | |
tree | 69a740de5eee188aa12f75db05ed68cdf8635bc8 | |
parent | 8e2538755910dee022b72ccaeac487d1ae8900c7 (diff) |
Fix encoding of movsx instruction when used with new (i.e. r9-r15) registers. This fixes the indexed addressing modes when used with a word-wide index register
-rw-r--r-- | gen_x86.c | 8 | ||||
-rw-r--r-- | m68k_to_x86.c | 4 |
2 files changed, 6 insertions, 6 deletions
@@ -962,11 +962,11 @@ uint8_t * movsx_rr(uint8_t * out, uint8_t src, uint8_t dst, uint8_t src_size, ui *out |= REX_QUAD; } if (src >= R8) { - *out |= REX_REG_FIELD; + *out |= REX_RM_FIELD; src -= (R8 - X86_R8); } if (dst >= R8) { - *out |= REX_RM_FIELD; + *out |= REX_REG_FIELD; dst -= (R8 - X86_R8); } out++; @@ -992,11 +992,11 @@ uint8_t * movsx_rdisp8r(uint8_t * out, uint8_t src, int8_t disp, uint8_t dst, ui *out |= REX_QUAD; } if (src >= R8) { - *out |= REX_REG_FIELD; + *out |= REX_RM_FIELD; src -= (R8 - X86_R8); } if (dst >= R8) { - *out |= REX_RM_FIELD; + *out |= REX_REG_FIELD; dst -= (R8 - X86_R8); } out++; diff --git a/m68k_to_x86.c b/m68k_to_x86.c index f2ff5ab..b425084 100644 --- a/m68k_to_x86.c +++ b/m68k_to_x86.c @@ -635,9 +635,9 @@ uint8_t * m68k_save_result(m68kinst * inst, uint8_t * out, x86_68k_options * opt uint8_t * get_native_address(native_map_slot * native_code_map, uint32_t address) { address &= 0xFFFFFF; - if (address > 0x400000) { + //if (address > 0x400000) { printf("get_native_address: %X\n", address); - } + //} address /= 2; uint32_t chunk = address / NATIVE_CHUNK_SIZE; if (!native_code_map[chunk].base) { |