From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49272) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c2Nz4-0003mE-P5 for qemu-devel@nongnu.org; Thu, 03 Nov 2016 15:47:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c2Nz0-0007xK-Jx for qemu-devel@nongnu.org; Thu, 03 Nov 2016 15:47:34 -0400 Received: from mail-oi0-x241.google.com ([2607:f8b0:4003:c06::241]:32887) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c2Nz0-0007wp-FA for qemu-devel@nongnu.org; Thu, 03 Nov 2016 15:47:30 -0400 Received: by mail-oi0-x241.google.com with SMTP id x4so8543988oix.0 for ; Thu, 03 Nov 2016 12:47:30 -0700 (PDT) Sender: Richard Henderson References: <1478121319-31986-1-git-send-email-laurent@vivier.eu> <1478121319-31986-3-git-send-email-laurent@vivier.eu> From: Richard Henderson Message-ID: <3a298435-672c-47ec-26d0-8b1cb78500dc@twiddle.net> Date: Thu, 3 Nov 2016 13:47:26 -0600 MIME-Version: 1.0 In-Reply-To: <1478121319-31986-3-git-send-email-laurent@vivier.eu> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 2/3] target-m68k: implement 680x0 movem List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Laurent Vivier , qemu-devel@nongnu.org Cc: schwab@linux-m68k.org, agraf@suse.de, gerg@uclinux.org On 11/02/2016 03:15 PM, Laurent Vivier wrote: > + if ((insn & 7) + 8 == i && > + m68k_feature(s->env, M68K_FEATURE_EXT_FULL)) { > + /* M68020+: if the addressing register is the > + * register moved to memory, the value written > + * is the initial value decremented by the size of > + * the operation > + * M68000/M68010: the value is the initial value > + */ > + TCGv tmp = tcg_temp_new(); > + tcg_gen_sub_i32(tmp, mreg(i), incr); > + gen_store(s, opsize, addr, tmp); > + tcg_temp_free(tmp); This doesn't look right. Is the value stored the intermediate value of the decremented register, or the final value? What you're storing is reg-4, which is neither of these things. I could see, maybe, that reg-4 might well turn out to be the right value for movem {a0-a7}, (sp)- since sp == a7, and therefore stored first. But I question that's the correct result for movem {a0-a7}, (a1)- If it's the incremental value, then you can just store "addr" and you don't need a temp. If it's the final value, then you can compute tcg_gen_subi_i32(tmp, AREG(insn, 0), ctpop32(mask) * 4); r~