summaryrefslogtreecommitdiff
path: root/m68k_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'm68k_core.c')
-rw-r--r--m68k_core.c22
1 files changed, 7 insertions, 15 deletions
diff --git a/m68k_core.c b/m68k_core.c
index 0d989d9..a39830b 100644
--- a/m68k_core.c
+++ b/m68k_core.c
@@ -71,7 +71,7 @@ void m68k_read_size(m68k_options *opts, uint8_t size)
}
}
-void m68k_write_size(m68k_options *opts, uint8_t size)
+void m68k_write_size(m68k_options *opts, uint8_t size, uint8_t lowfirst)
{
switch (size)
{
@@ -82,30 +82,22 @@ void m68k_write_size(m68k_options *opts, uint8_t size)
call(&opts->gen.code, opts->write_16);
break;
case OPSIZE_LONG:
- call(&opts->gen.code, opts->write_32_highfirst);
+ if (lowfirst) {
+ call(&opts->gen.code, opts->write_32_lowfirst);
+ } else {
+ call(&opts->gen.code, opts->write_32_highfirst);
+ }
break;
}
}
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;
- }
+ m68k_write_size(opts, inst->extra.size, 1);
}
}