From patchwork Wed Feb 12 21:23:12 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Musta X-Patchwork-Id: 319773 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 C16172C0090 for ; Thu, 13 Feb 2014 08:33:50 +1100 (EST) Received: from localhost ([::1]:41066 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WDhRC-0003vE-GX for incoming@patchwork.ozlabs.org; Wed, 12 Feb 2014 16:33:46 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37757) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WDhIH-00018p-RB for qemu-devel@nongnu.org; Wed, 12 Feb 2014 16:24:47 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WDhI7-00038s-7U for qemu-devel@nongnu.org; Wed, 12 Feb 2014 16:24:33 -0500 Received: from mail-ig0-x230.google.com ([2607:f8b0:4001:c05::230]:43453) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WDhI7-00038c-1Z; Wed, 12 Feb 2014 16:24:23 -0500 Received: by mail-ig0-f176.google.com with SMTP id j1so11776804iga.3 for ; Wed, 12 Feb 2014 13:24:22 -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=CyixDx9coDORMHdUMAmyKefj5I/juAc8SVbIjKzMd7A=; b=XcQXvUvWkn08N4av+CqnxVz4Ii0yMfkaIjUIefYOcxU2JbNP9jFvRyZKhhDIeEi7f/ sCQU8tLZpLngVGmfiNbtziMU9ycGxbQmiAujI5NjvUQzNb8+BmD5PwcPfQHtjKaRJjte iMQMEov0mN/+dTrA7UFV1nJGUU1X6TSm7kr++Nrs8zpdhgb/mALwSfvRE4HYyZQF5V8Y f8EIEGlFnevle7MswewtVIKoBtKPf7ZfIyWKsNv6G5tuPLSOE0U9zjIyWeCv5+06qnCH pWCiH2bDerypO7QLt734sm8hcfNJ/iULZqiJ8J9p/8IIPt2vSUHOsl9ESUnMQ8EBRnBc +Lcg== X-Received: by 10.50.17.3 with SMTP id k3mr316345igd.27.1392240262488; Wed, 12 Feb 2014 13:24:22 -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.24.21 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 12 Feb 2014 13:24:22 -0800 (PST) From: Tom Musta To: qemu-devel@nongnu.org Date: Wed, 12 Feb 2014 15:23:12 -0600 Message-Id: <1392240199-2454-22-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:c05::230 Cc: Tom Musta , qemu-ppc@nongnu.org Subject: [Qemu-devel] [PATCH 21/28] target-ppc: Altivec 2.07: vbpermq Instruction 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 patch adds the Vector Bit Permute Quadword (vbpermq) instruction introduced in Power ISA Version 2.07. Signed-off-by: Tom Musta --- target-ppc/helper.h | 1 + target-ppc/int_helper.c | 31 +++++++++++++++++++++++++++++++ target-ppc/translate.c | 2 ++ 3 files changed, 34 insertions(+), 0 deletions(-) diff --git a/target-ppc/helper.h b/target-ppc/helper.h index 1483930..ca1dc83 100644 --- a/target-ppc/helper.h +++ b/target-ppc/helper.h @@ -303,6 +303,7 @@ DEF_HELPER_2(vpopcntb, void, avr, avr) DEF_HELPER_2(vpopcnth, void, avr, avr) DEF_HELPER_2(vpopcntw, void, avr, avr) DEF_HELPER_2(vpopcntd, void, avr, avr) +DEF_HELPER_3(vbpermq, void, avr, avr, avr) DEF_HELPER_2(xsadddp, void, env, i32) DEF_HELPER_2(xssubdp, void, env, i32) diff --git a/target-ppc/int_helper.c b/target-ppc/int_helper.c index 72fb13c..5885b7e 100644 --- a/target-ppc/int_helper.c +++ b/target-ppc/int_helper.c @@ -1039,6 +1039,37 @@ void helper_vperm(CPUPPCState *env, ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, } #if defined(HOST_WORDS_BIGENDIAN) +#define VBPERMQ_INDEX(avr, i) ((avr)->u8[(i)]) +#define VBPERMQ_DW(index) (((index) & 0x40) != 0) +#else +#define VBPERMQ_INDEX(avr, i) ((avr)->u8[15-(i)]) +#define VBPERMQ_DW(index) (((index) & 0x40) == 0) +#endif + +void helper_vbpermq(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) +{ + int i; + uint64_t perm = 0; + + VECTOR_FOR_INORDER_I(i, u8) { + int index = VBPERMQ_INDEX(b, i); + + if (index < 128) { + uint64_t mask = (1ull << (63-(index & 0x3F))); + if (a->u64[VBPERMQ_DW(index)] & mask) { + perm |= (0x8000 >> i); + } + } + } + + r->u64[HI_IDX] = perm; + r->u64[LO_IDX] = 0; +} + +#undef VBPERMQ_INDEX +#undef VBPERMQ_DW + +#if defined(HOST_WORDS_BIGENDIAN) #define PKBIG 1 #else #define PKBIG 0 diff --git a/target-ppc/translate.c b/target-ppc/translate.c index ce2f915..1be5c5f 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -7358,6 +7358,7 @@ GEN_VXFORM_DUAL(vclzw, PPC_NONE, PPC2_ALTIVEC_207, \ vpopcntw, PPC_NONE, PPC2_ALTIVEC_207) GEN_VXFORM_DUAL(vclzd, PPC_NONE, PPC2_ALTIVEC_207, \ vpopcntd, PPC_NONE, PPC2_ALTIVEC_207) +GEN_VXFORM(vbpermq, 6, 21); /*** VSX extension ***/ @@ -10582,6 +10583,7 @@ GEN_VXFORM_DUAL(vclzh, vpopcnth, 1, 29, PPC_NONE, PPC2_ALTIVEC_207), GEN_VXFORM_DUAL(vclzw, vpopcntw, 1, 30, PPC_NONE, PPC2_ALTIVEC_207), GEN_VXFORM_DUAL(vclzd, vpopcntd, 1, 31, PPC_NONE, PPC2_ALTIVEC_207), +GEN_VXFORM_207(vbpermq, 6, 21), GEN_HANDLER_E(lxsdx, 0x1F, 0x0C, 0x12, 0, PPC_NONE, PPC2_VSX), GEN_HANDLER_E(lxsiwax, 0x1F, 0x0C, 0x02, 0, PPC_NONE, PPC2_VSX207),