aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--target-m68k/op.c10
-rw-r--r--target-m68k/translate.c5
2 files changed, 14 insertions, 1 deletions
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)