From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:47354) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qtn3X-00081x-V9 for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:49:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Qtn3W-0006rD-R5 for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:49:43 -0400 Received: from mail-yw0-f45.google.com ([209.85.213.45]:32979) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Qtn3W-0006og-O0 for qemu-devel@nongnu.org; Wed, 17 Aug 2011 16:49:42 -0400 Received: by mail-yw0-f45.google.com with SMTP id 9so1230269ywf.4 for ; Wed, 17 Aug 2011 13:49:37 -0700 (PDT) From: Bryce Lanham Date: Wed, 17 Aug 2011 15:46:53 -0500 Message-Id: <1313614076-28878-49-git-send-email-blanham@gmail.com> In-Reply-To: <1313614076-28878-1-git-send-email-blanham@gmail.com> References: <1313614076-28878-1-git-send-email-blanham@gmail.com> Subject: [Qemu-devel] [PATCH 048/111] m68k: correct shift side effect for roxrl and roxll List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Laurent Vivier From: Laurent Vivier Signed-off-by: Laurent Vivier --- target-m68k/helper.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/target-m68k/helper.c b/target-m68k/helper.c index bdfe9aa..a3a6108 100644 --- a/target-m68k/helper.c +++ b/target-m68k/helper.c @@ -915,7 +915,10 @@ uint32_t HELPER(glue(glue(roxr,bits),_cc))(CPUState *env, uint32_t val, uint32_t if (bits == 16) count = rox16_table[count]; \ if (bits == 32) count = rox32_table[count]; \ if (count) { \ - result = ((type)val >> count) | ((type)env->cc_x << (bits - count)); \ + if (count == bits)\ + result = ((type)env->cc_x << (bits - count));\ + else \ + result = ((type)val >> count) | ((type)env->cc_x << (bits - count));\ if (count > 1) \ result |= (type)val << (bits + 1 - count); \ env->cc_x = ((type)val >> (count - 1)) & 1; \ @@ -947,7 +950,10 @@ uint32_t HELPER(glue(glue(roxl,bits),_cc))(CPUState *env, uint32_t val, uint32_t if (bits == 16) count = rox16_table[count]; \ if (bits == 32) count = rox32_table[count]; \ if (count) { \ - result = ((type)val << count) | ((type)env->cc_x << (count - 1)); \ + if (count == bits) \ + result = ((type)env->cc_x << (count - 1)); \ + else \ + result = ((type)val << count) | ((type)env->cc_x << (count - 1)); \ if (count > 1) \ result |= (type)val >> (bits + 1 - count); \ env->cc_x = ((type)val >> (bits - count)) & 1; \ -- 1.7.2.3