From 02f56f5ca59506d7d81a302511f59cb8d122e764 Mon Sep 17 00:00:00 2001 From: Mike Pavone Date: Sat, 29 Dec 2012 22:11:28 -0800 Subject: 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 --- gen_x86.c | 8 ++++---- m68k_to_x86.c | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/gen_x86.c b/gen_x86.c index ebc06d6..bd4c2a4 100644 --- a/gen_x86.c +++ b/gen_x86.c @@ -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) { -- cgit v1.2.3