From patchwork Wed Feb 12 21:23:00 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Musta X-Patchwork-Id: 319829 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3433F2C0098 for ; Thu, 13 Feb 2014 09:39:45 +1100 (EST) Received: from localhost ([::1]:40999 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WDhM2-0005FM-Fh for incoming@patchwork.ozlabs.org; Wed, 12 Feb 2014 16:28:26 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37374) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WDhHr-0000ND-EQ for qemu-devel@nongnu.org; Wed, 12 Feb 2014 16:24:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WDhHj-00030C-05 for qemu-devel@nongnu.org; Wed, 12 Feb 2014 16:24:07 -0500 Received: from mail-ie0-x22b.google.com ([2607:f8b0:4001:c03::22b]:59215) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WDhHi-000304-RD; Wed, 12 Feb 2014 16:23:58 -0500 Received: by mail-ie0-f171.google.com with SMTP id as1so6015486iec.2 for ; Wed, 12 Feb 2014 13:23:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LafSsT9zYF5fE6K/0QPcf1rJH1EMMKrENTksM9zHth4=; b=ixz04opqnFjrx0VXmEI7VTfCnbiBNdDSJ27G6c4wa0BSnLRA6xTlbG/BOdzfBH3/Vr KckO+Gu+ZiwJruL7omWhxRdk/5ZzFjsO6OpRyRXzehA+m9zRRReENTQq0zG5A079VI4m VY6Hj6pkn3ZpwBQKPGr+0Su3TyQzur6YoPZAdAT62R60Z56XYayM20iTZWlZoZQQ3FTR EE51XIuMVX5N7a3sqXOqej2dLCe3xax1PS2uoXH15w5IGC2Ho+1QtJUT33U26t/ZKkk8 7kqjhfXHFPIqj6zk4uvRrcbClCIP5IPA6TYF6k123Wp34hRECOeCiZlHOGxoDqE1QEOC FO4Q== X-Received: by 10.50.79.134 with SMTP id j6mr311322igx.13.1392240238320; Wed, 12 Feb 2014 13:23:58 -0800 (PST) Received: from tmusta-sc.rchland.ibm.com (rchp4.rochester.ibm.com. [129.42.161.36]) by mx.google.com with ESMTPSA id gd5sm163342igd.5.2014.02.12.13.23.55 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 12 Feb 2014 13:23:57 -0800 (PST) From: Tom Musta To: qemu-devel@nongnu.org Date: Wed, 12 Feb 2014 15:23:00 -0600 Message-Id: <1392240199-2454-10-git-send-email-tommusta@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1392240199-2454-1-git-send-email-tommusta@gmail.com> References: <1392240199-2454-1-git-send-email-tommusta@gmail.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:4001:c03::22b Cc: Tom Musta , qemu-ppc@nongnu.org Subject: [Qemu-devel] [PATCH 09/28] target-ppc: Altivec 2.07: Change VMUL_DO to Support 64-bit Integers X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This VMUL_DO macro provides support for the various vmule* and vmulo* instructions. These instructions multiply vector elements, producing products that are one size larger; e.g. vmuleub multiplies unsigned 8-bit elements and produces a 16 bit unsigned element. The existing macro works correctly for the existing instructions (8-bit, and 16-bit source elements) but does not work correctly for 32-bit source elements. This patch adds an explicit cast to the multiplicands, forcing them to be of the target element type. This is required for the forthcoming patches that add the vmul[eo][us]w instructions. Signed-off-by: Tom Musta --- target-ppc/int_helper.c | 26 ++++++++++++++------------ 1 files changed, 14 insertions(+), 12 deletions(-) diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c index 3e36c0a..20d34e6 100644 --- a/target-ppc/int_helper.c +++ b/target-ppc/int_helper.c @@ -983,28 +983,30 @@ void helper_vmsumuhs(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, } } -#define VMUL_DO(name, mul_element, prod_element, evenp) \ +#define VMUL_DO(name, mul_element, prod_element, cast, evenp) \ void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ { \ int i; \ \ VECTOR_FOR_INORDER_I(i, prod_element) { \ if (evenp) { \ - r->prod_element[i] = a->mul_element[i * 2 + HI_IDX] * \ - b->mul_element[i * 2 + HI_IDX]; \ + r->prod_element[i] = \ + (cast)a->mul_element[i * 2 + HI_IDX] * \ + (cast)b->mul_element[i * 2 + HI_IDX]; \ } else { \ - r->prod_element[i] = a->mul_element[i * 2 + LO_IDX] * \ - b->mul_element[i * 2 + LO_IDX]; \ + r->prod_element[i] = \ + (cast)a->mul_element[i * 2 + LO_IDX] * \ + (cast)b->mul_element[i * 2 + LO_IDX]; \ } \ } \ } -#define VMUL(suffix, mul_element, prod_element) \ - VMUL_DO(mule##suffix, mul_element, prod_element, 1) \ - VMUL_DO(mulo##suffix, mul_element, prod_element, 0) -VMUL(sb, s8, s16) -VMUL(sh, s16, s32) -VMUL(ub, u8, u16) -VMUL(uh, u16, u32) +#define VMUL(suffix, mul_element, prod_element, cast) \ + VMUL_DO(mule##suffix, mul_element, prod_element, cast, 1) \ + VMUL_DO(mulo##suffix, mul_element, prod_element, cast, 0) +VMUL(sb, s8, s16, int16_t) +VMUL(sh, s16, s32, int32_t) +VMUL(ub, u8, u16, uint16_t) +VMUL(uh, u16, u32, uint32_t) #undef VMUL_DO #undef VMUL