From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=39103 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1P7pBK-0004Ke-2b for qemu-devel@nongnu.org; Mon, 18 Oct 2010 08:51:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1P7pBI-0002GN-J2 for qemu-devel@nongnu.org; Mon, 18 Oct 2010 08:51:13 -0400 Received: from mail-bw0-f45.google.com ([209.85.214.45]:44600) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1P7pBI-0002GI-DY for qemu-devel@nongnu.org; Mon, 18 Oct 2010 08:51:12 -0400 Received: by bwz6 with SMTP id 6so582487bwz.4 for ; Mon, 18 Oct 2010 05:51:11 -0700 (PDT) From: Johan Bengtsson Date: Mon, 18 Oct 2010 14:49:36 +0200 Message-Id: <1287406176-13554-1-git-send-email-teofrastius@gmail.com> Subject: [Qemu-devel] [PATCH] Fix bug in translation of REVSH List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Johan Bengtsson The translation of REVSH shifted the low byte 8 steps left before performing an 8-bit sign extend, causing this part of the expression to alwas be 0. The fix for this is either to extend before shifting or switch to a 16-bit extend. I choose the former. Signed-off-by: Johan Bengtsson --- target-arm/translate.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/target-arm/translate.c b/target-arm/translate.c index 652cac9..e2fa4df 100644 --- a/target-arm/translate.c +++ b/target-arm/translate.c @@ -253,8 +253,8 @@ static void gen_revsh(TCGv var) TCGv tmp = new_tmp(); tcg_gen_shri_i32(tmp, var, 8); tcg_gen_andi_i32(tmp, tmp, 0x00ff); - tcg_gen_shli_i32(var, var, 8); tcg_gen_ext8s_i32(var, var); + tcg_gen_shli_i32(var, var, 8); tcg_gen_or_i32(var, var, tmp); dead_tmp(tmp); } -- 1.7.0.4