comparison m68k_to_x86.c @ 158:a2ab895d9708

Fix predec address mode when used as source
author Mike Pavone <pavone@retrodev.com>
date Sat, 05 Jan 2013 00:53:50 -0800
parents 301470eb870b
children c1530501c215
comparison
equal deleted inserted replaced
157:301470eb870b 158:a2ab895d9708
128 break; 128 break;
129 case MODE_AREG_PREDEC: 129 case MODE_AREG_PREDEC:
130 dec_amount = inst->extra.size == OPSIZE_WORD ? 2 : (inst->extra.size == OPSIZE_LONG ? 4 : 1); 130 dec_amount = inst->extra.size == OPSIZE_WORD ? 2 : (inst->extra.size == OPSIZE_LONG ? 4 : 1);
131 out = cycles(out, PREDEC_PENALTY); 131 out = cycles(out, PREDEC_PENALTY);
132 if (opts->aregs[inst->src.params.regs.pri] >= 0) { 132 if (opts->aregs[inst->src.params.regs.pri] >= 0) {
133 out = sub_ir(out, inc_amount, opts->aregs[inst->src.params.regs.pri], SZ_D); 133 out = sub_ir(out, dec_amount, opts->aregs[inst->src.params.regs.pri], SZ_D);
134 } else { 134 } else {
135 out = sub_irdisp8(out, inc_amount, CONTEXT, reg_offset(&(inst->src)), SZ_D); 135 out = sub_irdisp8(out, dec_amount, CONTEXT, reg_offset(&(inst->src)), SZ_D);
136 } 136 }
137 case MODE_AREG_INDIRECT: 137 case MODE_AREG_INDIRECT:
138 case MODE_AREG_POSTINC: 138 case MODE_AREG_POSTINC:
139 if (opts->aregs[inst->src.params.regs.pri] >= 0) { 139 if (opts->aregs[inst->src.params.regs.pri] >= 0) {
140 out = mov_rr(out, opts->aregs[inst->src.params.regs.pri], SCRATCH1, SZ_D); 140 out = mov_rr(out, opts->aregs[inst->src.params.regs.pri], SCRATCH1, SZ_D);