From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53157) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOYRD-0000MU-Dy for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YOYRC-0007KY-Km for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:11 -0500 Received: from mail-qa0-x22e.google.com ([2607:f8b0:400d:c00::22e]:58927) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOYRC-0007KM-9U for qemu-devel@nongnu.org; Thu, 19 Feb 2015 16:15:10 -0500 Received: by mail-qa0-f46.google.com with SMTP id n4so8604533qaq.5 for ; Thu, 19 Feb 2015 13:15:10 -0800 (PST) Sender: Richard Henderson From: Richard Henderson Date: Thu, 19 Feb 2015 13:14:23 -0800 Message-Id: <1424380469-20138-6-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 05/11] target-arm: Recognize UXTB, UXTH, LSR, LSL List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Signed-off-by: Richard Henderson --- target-arm/translate-a64.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/target-arm/translate-a64.c b/target-arm/translate-a64.c index 0cb60a2..54290ad 100644 --- a/target-arm/translate-a64.c +++ b/target-arm/translate-a64.c @@ -3057,6 +3057,23 @@ static void disas_bitfield(DisasContext *s, uint32_t insn) tcg_gen_sari_i64(tcg_rd, tcg_tmp, ri); goto done; } + } else if (opc == 2) { /* UBFM */ + if (ri == 0) { /* UXTB, UXTH, plus non-canonical AND */ + tcg_gen_andi_i64(tcg_rd, tcg_tmp, bitmask64(si + 1)); + return; + } + if (si == 63 || (si == 31 && ri <= si)) { /* LSR */ + if (si == 31) { + tcg_gen_ext32u_i64(tcg_tmp, tcg_tmp); + } + tcg_gen_shri_i64(tcg_rd, tcg_tmp, ri); + return; + } + if (si + 1 == ri && si != bitsize - 1) { /* LSL */ + int shift = bitsize - 1 - si; + tcg_gen_shli_i64(tcg_rd, tcg_tmp, shift); + goto done; + } } if (opc != 1) { /* SBFM or UBFM */ -- 2.1.0