Mercurial > repos > blastem
comparison m68k_to_x86.c @ 159:c1530501c215
FIx movem when src is reg list and dst is not a areg predec mode
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 05 Jan 2013 01:31:28 -0800 |
parents | a2ab895d9708 |
children | 6748022656b7 |
comparison
equal
deleted
inserted
replaced
158:a2ab895d9708 | 159:c1530501c215 |
---|---|
981 if (inst->dst.addr_mode == MODE_AREG_PREDEC) { | 981 if (inst->dst.addr_mode == MODE_AREG_PREDEC) { |
982 reg = 15; | 982 reg = 15; |
983 dir = -1; | 983 dir = -1; |
984 } else { | 984 } else { |
985 reg = 0; | 985 reg = 0; |
986 dir = 1; | |
986 } | 987 } |
987 switch (inst->dst.addr_mode) | 988 switch (inst->dst.addr_mode) |
988 { | 989 { |
989 case MODE_AREG_INDIRECT: | 990 case MODE_AREG_INDIRECT: |
990 case MODE_AREG_PREDEC: | 991 case MODE_AREG_PREDEC: |
3109 opts->code_end = opts->cur_code + size; | 3110 opts->code_end = opts->cur_code + size; |
3110 jmp(dst, opts->cur_code); | 3111 jmp(dst, opts->cur_code); |
3111 dst = opts->cur_code; | 3112 dst = opts->cur_code; |
3112 dst_end = opts->code_end; | 3113 dst_end = opts->code_end; |
3113 } | 3114 } |
3115 if (address >= 0x400000 && address < 0xE00000) { | |
3116 dst = xor_rr(dst, RDI, RDI, SZ_D); | |
3117 dst = call(dst, (uint8_t *)exit); | |
3118 break; | |
3119 } | |
3114 next = m68k_decode(encoded, &instbuf, address); | 3120 next = m68k_decode(encoded, &instbuf, address); |
3115 address += (next-encoded)*2; | 3121 address += (next-encoded)*2; |
3116 encoded = next; | 3122 encoded = next; |
3117 //m68k_disasm(&instbuf, disbuf); | 3123 //m68k_disasm(&instbuf, disbuf); |
3118 //printf("%X: %s\n", instbuf.address, disbuf); | 3124 //printf("%X: %s\n", instbuf.address, disbuf); |