From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53200) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOYRJ-0000Zz-VB for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YOYRD-0007Kt-VX for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:17 -0500 Received: from mail-qg0-x230.google.com ([2607:f8b0:400d:c04::230]:58052) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOYRD-0007Kp-S2 for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:11 -0500 Received: by mail-qg0-f48.google.com with SMTP id a108so9613033qge.7 for ; Thu, 19 Feb 2015 13:15:11 -0800 (PST) Sender: Richard Henderson From: Richard Henderson Date: Thu, 19 Feb 2015 13:14:24 -0800 Message-Id: <1424380469-20138-7-git-send-email-rth@twiddle.net> In-Reply-To: <1424380469-20138-1-git-send-email-rth@twiddle.net> References: <1424380469-20138-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH 06/11] target-arm: Eliminate unnecessary zero-extend in disas_bitfield List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org For !SF, this initial ext32u can't be optimized away by the current TCG code generator. (It would require backward bit liveness propagation.) But since the range of bits for !SF are already constrained by unallocated_encoding, we'll never reference the high bits anyway. Signed-off-by: Richard Henderson --- target-arm/translate-a64.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/target-arm/translate-a64.c b/target-arm/translate-a64.c index 54290ad..ed97ed6 100644 --- a/target-arm/translate-a64.c +++ b/target-arm/translate-a64.c @@ -3034,7 +3034,11 @@ static void disas_bitfield(DisasContext *s, uint32_t insn) } tcg_rd = cpu_reg(s, rd); - tcg_tmp = read_cpu_reg(s, rn, sf); + + /* Suppress the zero-extend for !sf. Since RI and SI are constrained + to be smaller than bitsize, we'll never reference data outside the + low 32-bits anyway. */ + tcg_tmp = read_cpu_reg(s, rn, 1); /* Recognize the common aliases. */ if (opc == 0) { /* SBFM */ -- 2.1.0