From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LJb9X-0000rn-Do for qemu-devel@nongnu.org; Sun, 04 Jan 2009 17:08:59 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LJb9W-0000rV-LK for qemu-devel@nongnu.org; Sun, 04 Jan 2009 17:08:59 -0500 Received: from [199.232.76.173] (port=56541 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LJb9W-0000rP-Eq for qemu-devel@nongnu.org; Sun, 04 Jan 2009 17:08:58 -0500 Received: from savannah.gnu.org ([199.232.41.3]:46438 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LJb9T-0000j8-Vi for qemu-devel@nongnu.org; Sun, 04 Jan 2009 17:08:58 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LJb9N-0007pR-0J for qemu-devel@nongnu.org; Sun, 04 Jan 2009 22:08:49 +0000 Received: from aurel32 by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LJb9M-0007ok-MI for qemu-devel@nongnu.org; Sun, 04 Jan 2009 22:08:48 +0000 MIME-Version: 1.0 Errors-To: aurel32 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Aurelien Jarno Message-Id: Date: Sun, 04 Jan 2009 22:08:48 +0000 Subject: [Qemu-devel] [6164] Add vmul{e,o}{s,u}{b,h} instructions. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6164 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6164 Author: aurel32 Date: 2009-01-04 22:08:48 +0000 (Sun, 04 Jan 2009) Log Message: ----------- Add vmul{e,o}{s,u}{b,h} instructions. Signed-off-by: Nathan Froyd Signed-off-by: Aurelien Jarno Modified Paths: -------------- trunk/target-ppc/helper.h trunk/target-ppc/op_helper.c trunk/target-ppc/translate.c Modified: trunk/target-ppc/helper.h =================================================================== --- trunk/target-ppc/helper.h 2009-01-04 22:08:38 UTC (rev 6163) +++ trunk/target-ppc/helper.h 2009-01-04 22:08:48 UTC (rev 6164) @@ -129,6 +129,14 @@ DEF_HELPER_3(vmrghb, void, avr, avr, avr) DEF_HELPER_3(vmrghh, void, avr, avr, avr) DEF_HELPER_3(vmrghw, void, avr, avr, avr) +DEF_HELPER_3(vmulesb, void, avr, avr, avr) +DEF_HELPER_3(vmulesh, void, avr, avr, avr) +DEF_HELPER_3(vmuleub, void, avr, avr, avr) +DEF_HELPER_3(vmuleuh, void, avr, avr, avr) +DEF_HELPER_3(vmulosb, void, avr, avr, avr) +DEF_HELPER_3(vmulosh, void, avr, avr, avr) +DEF_HELPER_3(vmuloub, void, avr, avr, avr) +DEF_HELPER_3(vmulouh, void, avr, avr, avr) DEF_HELPER_1(efscfsi, i32, i32) DEF_HELPER_1(efscfui, i32, i32) Modified: trunk/target-ppc/op_helper.c =================================================================== --- trunk/target-ppc/op_helper.c 2009-01-04 22:08:38 UTC (rev 6163) +++ trunk/target-ppc/op_helper.c 2009-01-04 22:08:48 UTC (rev 6164) @@ -2066,6 +2066,28 @@ #undef MRGHI #undef MRGLO +#define VMUL_DO(name, mul_element, prod_element, 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]; \ + } else { \ + r->prod_element[i] = a->mul_element[i*2+LO_IDX] * 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) +#undef VMUL_DO +#undef VMUL + #undef VECTOR_FOR_INORDER_I #undef HI_IDX #undef LO_IDX Modified: trunk/target-ppc/translate.c =================================================================== --- trunk/target-ppc/translate.c 2009-01-04 22:08:38 UTC (rev 6163) +++ trunk/target-ppc/translate.c 2009-01-04 22:08:48 UTC (rev 6164) @@ -6211,6 +6211,14 @@ GEN_VXFORM(vmrglb, 6, 4); GEN_VXFORM(vmrglh, 6, 5); GEN_VXFORM(vmrglw, 6, 6); +GEN_VXFORM(vmuloub, 4, 0); +GEN_VXFORM(vmulouh, 4, 1); +GEN_VXFORM(vmulosb, 4, 4); +GEN_VXFORM(vmulosh, 4, 5); +GEN_VXFORM(vmuleub, 4, 8); +GEN_VXFORM(vmuleuh, 4, 9); +GEN_VXFORM(vmulesb, 4, 12); +GEN_VXFORM(vmulesh, 4, 13); /*** SPE extension ***/ /* Register moves */