Mercurial > repos > blastem
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); |