From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:47084) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qtn2o-0006Rz-Hs for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:48:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qtn2n-0006kC-D0 for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:48:58 -0400 Received: from mail-gy0-f173.google.com ([209.85.160.173]:61488) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qtn2m-0006dO-Ic for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:48:56 -0400 Received: by mail-gy0-f173.google.com with SMTP id 12so1229686gyd.4 for ; Wed, 17 Aug 2011 13:48:56 -0700 (PDT) From: Bryce Lanham Date: Wed, 17 Aug 2011 15:46:30 -0500 Message-Id: <1313614076-28878-26-git-send-email-blanham@gmail.com> In-Reply-To: <1313614076-28878-1-git-send-email-blanham@gmail.com> References: <1313614076-28878-1-git-send-email-blanham@gmail.com> Subject: [Qemu-devel] [PATCH 025/111] m68k: add cas List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Andreas Schwab From: Andreas Schwab Laurent Vivier writes: > + cmp = DREG(ext, 0); > + update = DREG(ext, 6); > + tmp = gen_load(s, opsize, addr, 0); > + dest = tcg_temp_local_new(); > + tcg_gen_mov_i32(dest, tmp); > + > + res = tcg_temp_new(); > + tcg_gen_sub_i32(res, dest, cmp); > + gen_logic_cc(s, res); > + > + l1 = gen_new_label(); > + l2 = gen_new_label(); > + > + gen_jmpcc(s, 6 /* !Z */, l1); > + gen_store(s, opsize, addr, update); This has a bug: addr is used around a jump. Andreas. --- target-m68k/translate.c | 10 +++++++--- 1 files changed, 7 insertions(+), 3 deletions(-) diff --git a/target-m68k/translate.c b/target-m68k/translate.c index c186fe1..218210c 100644 --- a/target-m68k/translate.c +++ b/target-m68k/translate.c @@ -1378,6 +1378,7 @@ DISAS_INSN(cas) TCGv tmp; TCGv cmp; TCGv update; + TCGv taddr; TCGv addr; TCGv res; uint16_t ext; @@ -1404,17 +1405,19 @@ DISAS_INSN(cas) ext = lduw_code(s->pc); s->pc += 2; - addr = gen_lea(s, insn, opsize); - if (IS_NULL_QREG(addr)) { + taddr = gen_lea(s, insn, opsize); + if (IS_NULL_QREG(taddr)) { gen_addr_fault(s); return; } cmp = DREG(ext, 0); update = DREG(ext, 6); - tmp = gen_load(s, opsize, addr, 0); + tmp = gen_load(s, opsize, taddr, 0); dest = tcg_temp_local_new(); tcg_gen_mov_i32(dest, tmp); + addr = tcg_temp_local_new (); + tcg_gen_mov_i32(addr, taddr); res = tcg_temp_new(); tcg_gen_sub_i32(res, dest, cmp); @@ -1430,6 +1433,7 @@ DISAS_INSN(cas) tcg_gen_mov_i32(cmp, dest); gen_set_label(l2); tcg_temp_free(dest); + tcg_temp_free(addr); } DISAS_INSN(byterev) -- 1.7.2.3