comparison m68k_core.c @ 1363:df6af7187b36

Fix to M68K interrupt latency for most instructions. Still needs some work for RAW_IMPL instructions besides move
author Michael Pavone <pavone@retrodev.com>
date Fri, 19 May 2017 20:27:35 -0700
parents f1607874dbee
children 4e5797b3935a
comparison
equal deleted inserted replaced
1362:83bdd358f3a7 1363:df6af7187b36
967 info->impl.raw(opts, inst); 967 info->impl.raw(opts, inst);
968 return; 968 return;
969 } 969 }
970 970
971 host_ea src_op, dst_op; 971 host_ea src_op, dst_op;
972 uint8_t needs_int_latch = 0;
972 if (inst->src.addr_mode != MODE_UNUSED) { 973 if (inst->src.addr_mode != MODE_UNUSED) {
973 translate_m68k_op(inst, &src_op, opts, 0); 974 needs_int_latch |= translate_m68k_op(inst, &src_op, opts, 0);
974 } 975 }
975 if (inst->dst.addr_mode != MODE_UNUSED) { 976 if (inst->dst.addr_mode != MODE_UNUSED) {
976 translate_m68k_op(inst, &dst_op, opts, 1); 977 needs_int_latch |= translate_m68k_op(inst, &dst_op, opts, 1);
978 }
979 if (needs_int_latch) {
980 m68k_check_cycles_int_latch(opts);
977 } 981 }
978 if (info->itype == OP_FUNC) { 982 if (info->itype == OP_FUNC) {
979 info->impl.op(opts, inst, &src_op, &dst_op); 983 info->impl.op(opts, inst, &src_op, &dst_op);
980 } else if (info->itype == BINARY_ARITH) { 984 } else if (info->itype == BINARY_ARITH) {
981 translate_m68k_arith(opts, inst, info->impl.flag_mask, &src_op, &dst_op); 985 translate_m68k_arith(opts, inst, info->impl.flag_mask, &src_op, &dst_op);