From ff99b952c8280853801fe14f7ae62d0f87464f7d Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Sun, 17 Jan 2016 14:34:09 +0100 Subject: [PATCH] target-m68k: cmp manages word and bytes operands Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- target-m68k/translate.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/target-m68k/translate.c b/target-m68k/translate.c index 0448569ffa..57ac2e572f 100644 --- a/target-m68k/translate.c +++ b/target-m68k/translate.c @@ -582,6 +582,13 @@ static void gen_logic_cc(DisasContext *s, TCGv val, int opsize) set_cc_op(s, CC_OP_LOGIC); } +static void gen_update_cc_cmp(DisasContext *s, TCGv dest, TCGv src, int opsize) +{ + tcg_gen_mov_i32(QREG_CC_N, dest); + tcg_gen_mov_i32(QREG_CC_V, src); + set_cc_op(s, CC_OP_CMPB + opsize); +} + static void gen_update_cc_add(TCGv dest, TCGv src, int opsize) { gen_ext(QREG_CC_N, dest, opsize, 1); @@ -2132,10 +2139,9 @@ DISAS_INSN(cmp) int opsize; opsize = insn_opsize(insn); - SRC_EA(env, src, opsize, -1, NULL); - reg = DREG(insn, 9); - gen_update_cc_add(reg, src, OS_LONG); - set_cc_op(s, CC_OP_CMPL); + SRC_EA(env, src, opsize, 1, NULL); + reg = gen_extend(DREG(insn, 9), opsize, 1); + gen_update_cc_cmp(s, reg, src, opsize); } DISAS_INSN(cmpa) @@ -2151,8 +2157,7 @@ DISAS_INSN(cmpa) } SRC_EA(env, src, opsize, 1, NULL); reg = AREG(insn, 9); - gen_update_cc_add(reg, src, OS_LONG); - set_cc_op(s, CC_OP_CMPL); + gen_update_cc_cmp(s, reg, src, opsize); } DISAS_INSN(eor)