From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49421) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Voha0-00026q-Uq for qemu-devel@nongnu.org; Thu, 05 Dec 2013 17:39:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VohZs-0005qn-Gt for qemu-devel@nongnu.org; Thu, 05 Dec 2013 17:39:32 -0500 Received: from mail-yh0-x22e.google.com ([2607:f8b0:4002:c01::22e]:40416) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VohZs-0005qj-BA for qemu-devel@nongnu.org; Thu, 05 Dec 2013 17:39:24 -0500 Received: by mail-yh0-f46.google.com with SMTP id l109so13005331yhq.5 for ; Thu, 05 Dec 2013 14:39:23 -0800 (PST) Sender: Richard Henderson Message-ID: <52A10093.3030708@twiddle.net> Date: Fri, 06 Dec 2013 11:39:15 +1300 From: Richard Henderson MIME-Version: 1.0 References: <1386280289-27636-1-git-send-email-peter.maydell@linaro.org> <1386280289-27636-3-git-send-email-peter.maydell@linaro.org> In-Reply-To: <1386280289-27636-3-git-send-email-peter.maydell@linaro.org> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 02/13] target-arm: A64: add support for logical (shifted register) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell , qemu-devel@nongnu.org Cc: patches@linaro.org, Michael Matz , Claudio Fontana , Dirk Mueller , Will Newton , Laurent Desnogues , =?ISO-8859-1?Q?Alex_Benn=E9e?= , kvmarm@lists.cs.columbia.edu, Christoffer Dall On 12/06/2013 10:51 AM, Peter Maydell wrote: > + if (invert) { > + tcg_gen_not_i64(tcg_rm, tcg_rm); > + } > + > + tcg_rd = cpu_reg(s, rd); > + tcg_rn = cpu_reg(s, rn); > + > + switch (opc) { > + case 0: /* AND, BIC */ > + case 3: /* ANDS, BICS */ > + tcg_gen_and_i64(tcg_rd, tcg_rn, tcg_rm); > + break; > + case 1: /* ORR, ORN */ > + tcg_gen_or_i64(tcg_rd, tcg_rn, tcg_rm); > + break; > + case 2: /* EOR, EON */ > + tcg_gen_xor_i64(tcg_rd, tcg_rn, tcg_rm); > + break; > + default: > + assert(FALSE); > + break; > + } While correct, surely better to work with tcg and select on opc:invert to generate andc/orc/eqv? Also, isn't MOV (register) canonical for ORR (rn=31 && shift_amount=0), and MVN (register) canonical for ORN (rn=31 && shift_amount=0), and both therefore also worth a special case? r~