diff --git a/target-m68k/op.c b/target-m68k/op.c index 69d1fde9a7..d483488be8 100644 --- a/target-m68k/op.c +++ b/target-m68k/op.c @@ -170,6 +170,16 @@ OP(btest) FORCE_RET(); } +OP(ff1) +{ + uint32_t arg = get_op(PARAM2); + int n; + for (n = 32; arg; n--) + arg >>= 1; + set_op(PARAM1, n); + FORCE_RET(); +} + OP(subx_cc) { uint32_t op1 = get_op(PARAM1); diff --git a/target-m68k/translate.c b/target-m68k/translate.c index 52f38e4c0c..7c91760278 100644 --- a/target-m68k/translate.c +++ b/target-m68k/translate.c @@ -1929,7 +1929,10 @@ DISAS_INSN(shift_reg) DISAS_INSN(ff1) { - cpu_abort(NULL, "Unimplemented insn: ff1"); + int reg; + reg = DREG(insn, 0); + gen_logic_cc(s, reg); + gen_op_ff1(reg, reg); } static int gen_get_sr(DisasContext *s)