diff options
-rw-r--r-- | m68k_core.c | 22 | ||||
-rw-r--r-- | m68k_core_x86.c | 22 | ||||
-rw-r--r-- | m68k_internal.h | 1 |
3 files changed, 23 insertions, 22 deletions
diff --git a/m68k_core.c b/m68k_core.c index 6b0484a..63133a1 100644 --- a/m68k_core.c +++ b/m68k_core.c @@ -86,6 +86,28 @@ void m68k_write_size(m68k_options *opts, uint8_t size) } } +void m68k_save_result(m68kinst * inst, m68k_options * opts) +{ + code_info *code = &opts->gen.code; + if (inst->dst.addr_mode != MODE_REG && inst->dst.addr_mode != MODE_AREG && inst->dst.addr_mode != MODE_UNUSED) { + if (inst->dst.addr_mode == MODE_AREG_PREDEC && inst->src.addr_mode == MODE_AREG_PREDEC && inst->op != M68K_MOVE) { + areg_to_native(opts, inst->dst.params.regs.pri, opts->gen.scratch2); + } + switch (inst->extra.size) + { + case OPSIZE_BYTE: + call(code, opts->write_8); + break; + case OPSIZE_WORD: + call(code, opts->write_16); + break; + case OPSIZE_LONG: + call(code, opts->write_32_lowfirst); + break; + } + } +} + void translate_m68k_lea_pea(m68k_options * opts, m68kinst * inst) { code_info *code = &opts->gen.code; diff --git a/m68k_core_x86.c b/m68k_core_x86.c index d59b9bd..938b071 100644 --- a/m68k_core_x86.c +++ b/m68k_core_x86.c @@ -521,28 +521,6 @@ void translate_m68k_op(m68kinst * inst, host_ea * ea, m68k_options * opts, uint8 } } -void m68k_save_result(m68kinst * inst, m68k_options * opts) -{ - code_info *code = &opts->gen.code; - if (inst->dst.addr_mode != MODE_REG && inst->dst.addr_mode != MODE_AREG && inst->dst.addr_mode != MODE_UNUSED) { - if (inst->dst.addr_mode == MODE_AREG_PREDEC && inst->src.addr_mode == MODE_AREG_PREDEC && inst->op != M68K_MOVE) { - areg_to_native(opts, inst->dst.params.regs.pri, opts->gen.scratch2); - } - switch (inst->extra.size) - { - case OPSIZE_BYTE: - call(code, opts->write_8); - break; - case OPSIZE_WORD: - call(code, opts->write_16); - break; - case OPSIZE_LONG: - call(code, opts->write_32_lowfirst); - break; - } - } -} - void check_user_mode_swap_ssp_usp(m68k_options *opts) { code_info * code = &opts->gen.code; diff --git a/m68k_internal.h b/m68k_internal.h index fe77e78..755fd99 100644 --- a/m68k_internal.h +++ b/m68k_internal.h @@ -42,6 +42,7 @@ void translate_m68k_op(m68kinst * inst, host_ea * ea, m68k_options * opts, uint8 void print_regs_exit(m68k_context * context); void m68k_read_size(m68k_options *opts, uint8_t size); void m68k_write_size(m68k_options *opts, uint8_t size); +void m68k_save_result(m68kinst * inst, m68k_options * opts); void push_const(m68k_options *opts, int32_t value); void jump_m68k_abs(m68k_options * opts, uint32_t address); void swap_ssp_usp(m68k_options * opts); |