From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=59700 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pjy9R-0003Za-RO for qemu-devel@nongnu.org; Mon, 31 Jan 2011 13:06:59 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pjy9P-0004Qk-7p for qemu-devel@nongnu.org; Mon, 31 Jan 2011 13:06:56 -0500 Received: from eu1sys200aog104.obsmtp.com ([207.126.144.117]:44707) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pjy9O-0004Q8-Mm for qemu-devel@nongnu.org; Mon, 31 Jan 2011 13:06:54 -0500 Received: from zeta.dmz-eu.st.com (ns2.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 8155EC1 for ; Mon, 31 Jan 2011 18:06:53 +0000 (GMT) Received: from Webmail-eu.st.com (safex1hubcas5.st.com [10.75.90.71]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 711DF2A18 for ; Mon, 31 Jan 2011 18:06:53 +0000 (GMT) From: Date: Mon, 31 Jan 2011 19:06:42 +0100 Message-ID: <1296497206-15643-5-git-send-email-christophe.lyon@st.com> In-Reply-To: <1296497206-15643-1-git-send-email-christophe.lyon@st.com> References: <1296497206-15643-1-git-send-email-christophe.lyon@st.com> MIME-Version: 1.0 Content-Type: text/plain Subject: [Qemu-devel] [PATCH 4/8] target-arm: fiddle decoding of 64 bit shift by imm and narrow List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org From: Christophe Lyon Tweak decoding of the shift-by-imm and narrow 64 bit insns (VSHRN, VRSHRN, VQSHRN, VQSHRUN, VQRSHRN, VQRSHRUN). Signed-off-by: Christophe Lyon --- target-arm/translate.c | 28 ++++++++++++++++++---------- 1 files changed, 18 insertions(+), 10 deletions(-) diff --git a/target-arm/translate.c b/target-arm/translate.c index 9ca5b82..a614e34 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -4831,21 +4831,29 @@ static int disas_neon_data_insn(CPUState * env, DisasContext *s, uint32_t insn) if (size == 3) { neon_load_reg64(cpu_V0, rm + pass); if (q) { - if (u) - gen_helper_neon_rshl_u64(cpu_V0, cpu_V0, tmp64); - else - gen_helper_neon_rshl_s64(cpu_V0, cpu_V0, tmp64); + if ((op == 8 && !u) || (op == 9 && u)) { + gen_helper_neon_rshl_u64(cpu_V0, cpu_V0, + tmp64); + } else { + gen_helper_neon_rshl_s64(cpu_V0, cpu_V0, + tmp64); + } } else { - if (u) - gen_helper_neon_shl_u64(cpu_V0, cpu_V0, tmp64); - else - gen_helper_neon_shl_s64(cpu_V0, cpu_V0, tmp64); + if ((op == 8 && !u) || (op == 9 && u)) { + gen_helper_neon_shl_u64(cpu_V0, cpu_V0, + tmp64); + } else { + gen_helper_neon_shl_s64(cpu_V0, cpu_V0, + tmp64); + } } } else { tmp = neon_load_reg(rm + pass, 0); - gen_neon_shift_narrow(size, tmp, tmp2, q, u); + gen_neon_shift_narrow(size, tmp, tmp2, q, + (op == 8) ? !u : u); tmp3 = neon_load_reg(rm + pass, 1); - gen_neon_shift_narrow(size, tmp3, tmp2, q, u); + gen_neon_shift_narrow(size, tmp3, tmp2, q, + (op == 8) ? !u : u); tcg_gen_concat_i32_i64(cpu_V0, tmp, tmp3); dead_tmp(tmp); dead_tmp(tmp3); -- 1.7.2.3