Mercurial > repos > blastem
changeset 188:062e3aa549eb
Fix movem.w when dest is register list
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 13 Jan 2013 23:48:04 -0800 |
parents | 8e138da572ab |
children | 806c3b7a6f2a |
files | m68k_to_x86.c |
diffstat | 1 files changed, 8 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/m68k_to_x86.c Sun Jan 13 23:06:26 2013 -0800 +++ b/m68k_to_x86.c Sun Jan 13 23:48:04 2013 -0800 @@ -1328,17 +1328,20 @@ } else { dst = call(dst, (uint8_t *)m68k_read_word_scratch1); } + if (inst->extra.size == OPSIZE_WORD) { + dst = movsx_rr(dst, SCRATCH1, SCRATCH1, SZ_W, SZ_D); + } if (reg > 7) { if (opts->aregs[reg-8] >= 0) { - dst = mov_rr(dst, SCRATCH1, opts->aregs[reg-8], inst->extra.size); + dst = mov_rr(dst, SCRATCH1, opts->aregs[reg-8], SZ_D); } else { - dst = mov_rrdisp8(dst, SCRATCH1, CONTEXT, offsetof(m68k_context, aregs) + sizeof(uint32_t) * (reg-8), inst->extra.size); + dst = mov_rrdisp8(dst, SCRATCH1, CONTEXT, offsetof(m68k_context, aregs) + sizeof(uint32_t) * (reg-8), SZ_D); } } else { if (opts->dregs[reg] >= 0) { - dst = mov_rr(dst, SCRATCH1, opts->dregs[reg], inst->extra.size); + dst = mov_rr(dst, SCRATCH1, opts->dregs[reg], SZ_D); } else { - dst = mov_rrdisp8(dst, SCRATCH1, CONTEXT, offsetof(m68k_context, dregs) + sizeof(uint32_t) * (reg), inst->extra.size); + dst = mov_rrdisp8(dst, SCRATCH1, CONTEXT, offsetof(m68k_context, dregs) + sizeof(uint32_t) * (reg), SZ_D); } } dst = pop_r(dst, SCRATCH1); @@ -3580,6 +3583,7 @@ x86_68k_options * opts = context->options; uint8_t * dst = opts->cur_code; uint8_t * dst_end = opts->code_end; + address &= 0xFFFFFF; if(get_native_address(opts->native_code_map, address)) { return dst; }