From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 17FA53858D32 for ; Tue, 13 Jun 2023 03:24:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 17FA53858D32 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=linux.ibm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linux.ibm.com Received: from pps.filterd (m0353723.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35D3HUkp006307; Tue, 13 Jun 2023 03:24:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=pp1; bh=6taIF9vc9jXzDpNf/EYun9NvWWkTpdHFXy+78kPl710=; b=l45IraFjrdJAo830yv8IIF0RDSqy4hmW6ATCWpD9Esw/ZeFIHB9MQ2qkkEj4h4QviXKr qzbtVkqQuuGLookidGX6wfnq1obeYV5jmETxIDBcsqI1ralz3uXBJTp+l6Ya9HYU6eqR IP8iPCj2bgrpdEZBLV7AOMne2dwYMYbK4xncUxymehAg/4dvRDL8UMAwg3BtPMA6JorQ ITHHSRIhXEN2bv9dXA3W7FBp7N7lCesm+m74qu8+/pqfR+PC8ulOK6oDDlv7yA5xLbJM FrlKYWCKrdgayutfHBO3QrQdkbXyANEJ9gO8RfXMfZMHVkpeBLxpfhDu4Sk7jvBXQaKe Iw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3r6gdq02nk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 13 Jun 2023 03:24:21 +0000 Received: from m0353723.ppops.net (m0353723.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 35D3HYbm006385; Tue, 13 Jun 2023 03:24:21 GMT Received: from ppma06ams.nl.ibm.com (66.31.33a9.ip4.static.sl-reverse.com [169.51.49.102]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3r6gdq02n7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 13 Jun 2023 03:24:20 +0000 Received: from pps.filterd (ppma06ams.nl.ibm.com [127.0.0.1]) by ppma06ams.nl.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 35CNVUhm016026; Tue, 13 Jun 2023 03:24:18 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma06ams.nl.ibm.com (PPS) with ESMTPS id 3r4gee1v3d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 13 Jun 2023 03:24:18 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 35D3OGHa22676008 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 13 Jun 2023 03:24:16 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2764020049; Tue, 13 Jun 2023 03:24:16 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8E62F20040; Tue, 13 Jun 2023 03:24:13 +0000 (GMT) Received: from [9.177.69.27] (unknown [9.177.69.27]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 13 Jun 2023 03:24:13 +0000 (GMT) Message-ID: <75ba2b38-4865-cd7c-d44a-731a6e5ec707@linux.ibm.com> Date: Tue, 13 Jun 2023 11:24:11 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [PATCH] rs6000, fix vec_replace_unaligned builtin arguments Content-Language: en-US To: Carl Love Cc: Peter Bergner , Segher Boessenkool , gcc-patches@gcc.gnu.org, David Edelsohn References: <63afb57c80647d16859c4a2bdd83fa2bbcdc843e.camel@us.ibm.com> From: "Kewen.Lin" In-Reply-To: <63afb57c80647d16859c4a2bdd83fa2bbcdc843e.camel@us.ibm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: 0C02HCoVZA_mD_o6_gi0Jo4JyP7fQ1AB X-Proofpoint-GUID: t-8vjmXnQoVNv4auWbpvqKwpOakgQ0J8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-12_18,2023-06-12_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 priorityscore=1501 impostorscore=0 suspectscore=0 adultscore=0 mlxlogscore=999 lowpriorityscore=0 phishscore=0 bulkscore=0 malwarescore=0 clxscore=1015 spamscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2305260000 definitions=main-2306130025 X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi Carl, on 2023/5/31 04:41, Carl Love wrote: > GCC maintainers: > > The following patch fixes the first argument in the builtin definition > and the corresponding test cases. Initially, the builtin specification > was wrong due to a cut and past error. The documentation was fixed in: > > > commit 8cb748a31cd8c7ac9c88b6abc38ce077dd462a7a > Author: Bill Schmidt > Date: Fri Feb 4 13:26:44 2022 -0600 > > rs6000: Clean up ISA 3.1 documentation [PR100808] > > Due to a pasto error in the documentation, vec_replace_unaligned was > implemented with the same function prototypes as vec_replace_elt. It was > intended that vec_replace_unaligned always specify output vectors as having > type vector unsigned char, to emphasize that elements are potentially > misaligned by this built-in function. This patch corrects the > misimplementation. > > 2022-02-04 Bill Schmidt > > gcc/ > PR target/100808 > * doc/extend.texi (Basic PowerPC Built-in Functions Available on ISA > 3.1): Provide consistent type names. Remove unnecessary semicolons. > Fix bad line breaks. > Wrong referred commit, should be ed3fea09b18f67e757b5768b42cb6e816626f1db. The above commit used the wrong commit log. > This patch fixes the arguments in the definitions and updates the > testcases accordingly. Additionally, a few minor spacing issues are > fixed. > > The patch has been tested on Power 10 with no regressions. Please let > me know if the patch is acceptable for mainline. Thanks. > > Carl > > -------------------------------------------------- > rs6000, fix vec_replace_unaligned builtin arguments > > The first argument of the vec_replace_unaligned builtin should always be > unsinged char, as specified in gcc/doc/extend.texi. s/unsinged/unsigned/ > > This patch fixes the buitin definitions and updates the testcases to use s/buitin/builtin/ > the correct arguments. > > gcc/ChangeLog: > * config/rs6000/rs6000-overload.def (__builtin_vec_replace_un): > Fix first argument type. > > gcc/testsuite/ChangeLog: > * gcc.target/powerpc/ver-replace-word-runnable.c > (vec_replace_unaligned) Fix first argument type. > (vresult_uchar): Fix expected results. Nit: unexpected tab. > (vec_replace_unaligned): Update for loop to check uchar results. > Remove extra spaces in if statements. > Insert missing spaces in for statements. > (dg-final): Update expected instruction counts. > --- > gcc/config/rs6000/rs6000-overload.def | 12 +- > .../powerpc/vec-replace-word-runnable.c | 157 ++++++++++-------- > 2 files changed, 92 insertions(+), 77 deletions(-) > > diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def > index c582490c084..26dc662b8fb 100644 > --- a/gcc/config/rs6000/rs6000-overload.def > +++ b/gcc/config/rs6000/rs6000-overload.def > @@ -3059,17 +3059,17 @@ > VREPLACE_ELT_V2DF > > [VEC_REPLACE_UN, vec_replace_unaligned, __builtin_vec_replace_un] > - vuc __builtin_vec_replace_un (vui, unsigned int, const int); > + vuc __builtin_vec_replace_un (vuc, unsigned int, const int); > VREPLACE_UN_UV4SI > - vuc __builtin_vec_replace_un (vsi, signed int, const int); > + vuc __builtin_vec_replace_un (vuc, signed int, const int); > VREPLACE_UN_V4SI > - vuc __builtin_vec_replace_un (vull, unsigned long long, const int); > + vuc __builtin_vec_replace_un (vuc, unsigned long long, const int); > VREPLACE_UN_UV2DI > - vuc __builtin_vec_replace_un (vsll, signed long long, const int); > + vuc __builtin_vec_replace_un (vuc, signed long long, const int); > VREPLACE_UN_V2DI > - vuc __builtin_vec_replace_un (vf, float, const int); > + vuc __builtin_vec_replace_un (vuc, float, const int); > VREPLACE_UN_V4SF > - vuc __builtin_vec_replace_un (vd, double, const int); > + vuc __builtin_vec_replace_un (vuc, double, const int); > VREPLACE_UN_V2DF Looks good, since the given element can be replaced without aligned, the given vector type don't need to match the given element, with the potential implication that it can be misaligned. > > [VEC_REVB, vec_revb, __builtin_vec_revb] > diff --git a/gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable.c b/gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable.c > index 27318822871..66b0ef58996 100644 > --- a/gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable.c > +++ b/gcc/testsuite/gcc.target/powerpc/vec-replace-word-runnable.c > @@ -20,6 +20,9 @@ main (int argc, char *argv []) > unsigned char ch; > unsigned int index; > > + vector unsigned char src_va_uchar; > + vector unsigned char expected_vresult_uchar; > + > vector unsigned int vresult_uint; > vector unsigned int expected_vresult_uint; > vector unsigned int src_va_uint; > @@ -64,10 +67,10 @@ main (int argc, char *argv []) > > vresult_uint = vec_replace_elt (src_va_uint, src_a_uint, 2); > > - if (!vec_all_eq (vresult_uint, expected_vresult_uint)) { > + if (!vec_all_eq (vresult_uint, expected_vresult_uint)) { > #if DEBUG > printf("ERROR, vec_replace_elt (src_vb_uint, src_va_uint, index)\n"); > - for(i = 0; i < 4; i++) > + for (i = 0; i < 4; i++) > printf(" vresult_uint[%d] = %d, expected_vresult_uint[%d] = %d\n", > i, vresult_uint[i], i, expected_vresult_uint[i]); > #else > @@ -82,10 +85,10 @@ main (int argc, char *argv []) > > vresult_int = vec_replace_elt (src_va_int, src_a_int, 1); > > - if (!vec_all_eq (vresult_int, expected_vresult_int)) { > + if (!vec_all_eq (vresult_int, expected_vresult_int)) { > #if DEBUG > printf("ERROR, vec_replace_elt (src_vb_int, src_va_int, index)\n"); > - for(i = 0; i < 4; i++) > + for (i = 0; i < 4; i++) > printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n", > i, vresult_int[i], i, expected_vresult_int[i]); > #else > @@ -100,10 +103,10 @@ main (int argc, char *argv []) > > vresult_float = vec_replace_elt (src_va_float, src_a_float, 1); > > - if (!vec_all_eq (vresult_float, expected_vresult_float)) { > + if (!vec_all_eq (vresult_float, expected_vresult_float)) { > #if DEBUG > printf("ERROR, vec_replace_elt (src_vb_float, src_va_float, index)\n"); > - for(i = 0; i < 4; i++) > + for (i = 0; i < 4; i++) > printf(" vresult_float[%d] = %f, expected_vresult_float[%d] = %f\n", > i, vresult_float[i], i, expected_vresult_float[i]); > #else > @@ -122,7 +125,7 @@ main (int argc, char *argv []) > if (!vec_all_eq (vresult_ullint, expected_vresult_ullint)) { > #if DEBUG > printf("ERROR, vec_replace_elt (src_vb_ullint, src_va_ullint, index)\n"); > - for(i = 0; i < 2; i++) > + for (i = 0; i < 2; i++) > printf(" vresult_ullint[%d] = %d, expected_vresult_ullint[%d] = %d\n", > i, vresult_ullint[i], i, expected_vresult_ullint[i]); > #else > @@ -137,10 +140,10 @@ main (int argc, char *argv []) > > vresult_llint = vec_replace_elt (src_va_llint, src_a_llint, 1); > > - if (!vec_all_eq (vresult_llint, expected_vresult_llint)) { > + if (!vec_all_eq (vresult_llint, expected_vresult_llint)) { > #if DEBUG > printf("ERROR, vec_replace_elt (src_vb_llint, src_va_llint, index)\n"); > - for(i = 0; i < 2; i++) > + for (i = 0; i < 2; i++) > printf(" vresult_llint[%d] = %d, expected_vresult_llint[%d] = %d\n", > i, vresult_llint[i], i, expected_vresult_llint[i]); > #else > @@ -155,10 +158,10 @@ main (int argc, char *argv []) > > vresult_double = vec_replace_elt (src_va_double, src_a_double, 1); > > - if (!vec_all_eq (vresult_double, expected_vresult_double)) { > + if (!vec_all_eq (vresult_double, expected_vresult_double)) { > #if DEBUG > printf("ERROR, vec_replace_elt (src_vb_double, src_va_double, index)\n"); > - for(i = 0; i < 2; i++) > + for (i = 0; i < 2; i++) > printf(" vresult_double[%d] = %f, expected_vresult_double[%d] = %f\n", > i, vresult_double[i], i, expected_vresult_double[i]); > #else > @@ -169,60 +172,68 @@ main (int argc, char *argv []) > > /* Vector replace 32-bit element, unaligned */ > src_a_uint = 345; > - src_va_uint = (vector unsigned int) { 1, 2, 0, 0 }; > - vresult_uint = (vector unsigned int) { 0, 0, 0, 0 }; > + src_va_uchar = (vector unsigned char) { 1, 0, 0, 0, 2, 0, 0, 0, > + 0, 0, 0, 0, 0, 0, 0, 0 }; > + vresult_uchar = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, > + 0, 0, 0, 0, 0, 0, 0, 0 }; > /* Byte index 7 will overwrite part of elements 2 and 3 */ > - expected_vresult_uint = (vector unsigned int) { 1, 2, 345*256, 0 }; > + expected_vresult_uchar > + = (vector unsigned char) { 1, 0, 0, 0, 2, 0, 0, 0, > + 0, 0x59, 0x1, 0, 0, 0, 0, 0 }; > > - vresult_uchar = vec_replace_unaligned (src_va_uint, src_a_uint, 3); > - vresult_uint = (vector unsigned int) vresult_uchar; > + vresult_uchar = vec_replace_unaligned (src_va_uchar, src_a_uint, 3); > > - if (!vec_all_eq (vresult_uint, expected_vresult_uint)) { > + if (!vec_all_eq (vresult_uchar, expected_vresult_uchar)) { > #if DEBUG > - printf("ERROR, vec_replace_unaligned (src_vb_uint, src_va_uint, index)\n"); > - for(i = 0; i < 4; i++) > - printf(" vresult_uint[%d] = %d, expected_vresult_uint[%d] = %d\n", > - i, vresult_uint[i], i, expected_vresult_uint[i]); > + printf("ERROR, vec_replace_unaligned (src_va_uchar, src_va_uint, index)\n"); > + for (i = 0; i < 16; i++) > + printf(" vresult_uchar[%d] = 0x%x, expected_vresult_uint[%d] = 0%x\n", > + i, vresult_uchar[i], i, expected_vresult_uchar[i]); > #else > abort(); > #endif > } > > src_a_int = 234; > - src_va_int = (vector int) { 1, 0, 3, 4 }; > - vresult_int = (vector int) { 0, 0, 0, 0 }; > + src_va_uchar = (vector unsigned char) { 1, 0, 0, 0, 0, 0, 0, 0, > + 3, 0, 0, 0, 4, 0, 0, 0 }; > + vresult_uchar = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, > + 0, 0, 0, 0, 0, 0, 0, 0 }; > /* Byte index 7 will over write part of elements 1 and 2 */ > - expected_vresult_int = (vector int) { 1, 234*256, 0, 4 }; > - > - vresult_uchar = vec_replace_unaligned (src_va_int, src_a_int, 7); > - vresult_int = (vector signed int) vresult_uchar; > + expected_vresult_uchar = (vector unsigned char) { 1, 0, 0, 0, 0, 0xea, 0, 0, > + 0, 0, 0, 0, 4, 0, 0, 0 }; > > - if (!vec_all_eq (vresult_int, expected_vresult_int)) { > + vresult_uchar = vec_replace_unaligned (src_va_uchar, src_a_int, 7); > + > + if (!vec_all_eq (vresult_uchar, expected_vresult_uchar)) { > #if DEBUG > - printf("ERROR, vec_replace_unaligned (src_vb_int, src_va_int, index)\n"); > - for(i = 0; i < 4; i++) > - printf(" vresult_int[%d] = %d, expected_vresult_int[%d] = %d\n", > - i, vresult_int[i], i, expected_vresult_int[i]); > + printf("ERROR, vec_replace_unaligned (src_va_uchar, src_va_int, index)\n"); > + for (i = 0; i < 16; i++) > + printf(" vresult_int[%d] = 0x%x, expected_vresult_int[%d] = 0x%x\n", > + i, vresult_uchar[i], i, expected_vresult_uchar[i]); > #else > abort(); > #endif > } > > src_a_float = 34.0; > - src_va_float = (vector float) { 0.0, 10.0, 20.0, 30.0 }; > - vresult_float = (vector float) { 0.0, 0.0, 0.0, 0.0 }; > - expected_vresult_float = (vector float) { 0.0, 34.0, 20.0, 30.0 }; > + src_va_uchar = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0x41, 0xa0, > + 5, 6, 7, 8, 0x41, 0xf0, 0, 0}; > + vresult_uchar = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, > + 0, 0, 0, 0, 0, 0, 0, 0 }; > + expected_vresult_uchar > + = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 8, 0x42, > + 5, 6, 7, 8, 0x41, 0xf0, 0, 0 }; > > - vresult_uchar = vec_replace_unaligned (src_va_float, src_a_float, 8); > - vresult_float = (vector float) vresult_uchar; > + vresult_uchar = vec_replace_unaligned (src_va_uchar, src_a_float, 8); > > - if (!vec_all_eq (vresult_float, expected_vresult_float)) { > + if (!vec_all_eq (vresult_uchar, expected_vresult_uchar)) { > #if DEBUG > - printf("ERROR, vec_replace_unaligned (src_vb_float, src_va_float, " > + printf("ERROR, vec_replace_unaligned (src_va_uchar, src_va_float, " > "index)\n"); > - for(i = 0; i < 4; i++) > - printf(" vresult_float[%d] = %f, expected_vresult_float[%d] = %f\n", > - i, vresult_float[i], i, expected_vresult_float[i]); > + for (i = 0; i < 16; i++) > + printf(" vresult_uchar[%d] = 0x%x, expected_vresult_uchar[%d] = 0x%x\n", > + i, vresult_uchar[i], i, expected_vresult_uchar[i]); > #else > abort(); > #endif > @@ -230,61 +241,67 @@ main (int argc, char *argv []) > > /* Vector replace 64-bit element, unaligned */ > src_a_ullint = 456; > - src_va_ullint = (vector unsigned long long int) { 0, 0x222 }; > - vresult_ullint = (vector unsigned long long int) { 0, 0 }; > - expected_vresult_ullint = (vector unsigned long long int) { 456*256, > - 0x200 }; > + src_va_uchar = (vector unsigned char) { 0, 0xc, 0x1, 0, 0, 0, 0, 0, > + 0x22, 0x2, 0, 0, 0, 0, 0, 0 }; > + vresult_uchar = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, > + 0, 0, 0, 0, 0, 0, 0, 0 }; > + expected_vresult_uchar > + = (vector unsigned char) { 0, 0xc, 0x1, 0, 0, 0xc8, 1, 0, > + 0, 2, 0, 0, 0, 0, 0, 0 }; > > /* Byte index 7 will over write least significant byte of element 0 */ > - vresult_uchar = vec_replace_unaligned (src_va_ullint, src_a_ullint, 7); > - vresult_ullint = (vector unsigned long long) vresult_uchar; > + vresult_uchar = vec_replace_unaligned (src_va_uchar, src_a_ullint, 7); > > - if (!vec_all_eq (vresult_ullint, expected_vresult_ullint)) { > + if (!vec_all_eq (vresult_uchar, expected_vresult_uchar)) { > #if DEBUG > - printf("ERROR, vec_replace_unaligned (src_vb_ullint, src_va_ullint, " > + printf("ERROR, vec_replace_unaligned (src_va_uchar, src_va_ullint, " > "index)\n"); > - for(i = 0; i < 2; i++) > - printf(" vresult_ullint[%d] = %d, expected_vresult_ullint[%d] = %d\n", > - i, vresult_ullint[i], i, expected_vresult_ullint[i]); > + for (i = 0; i < 15; i++) > + printf(" vresult_uchar[%d] = 0x%x, expected_vresult_uchar[%d] = 0x%x\n", > + i, vresult_uchar[i], i, expected_vresult_uchar[i]); > #else > abort(); > #endif > } > > src_a_llint = 678; > - src_va_llint = (vector long long int) { 0, 0x101 }; > + src_va_uchar = (vector unsigned char) { 0, 0xa6, 0x2, 0, 0, 0, 0, 0, > + 0x0, 0x1, 0, 0, 0, 0, 0, 0 }; > vresult_llint = (vector long long int) { 0, 0 }; > /* Byte index 7 will over write least significant byte of element 0 */ > - expected_vresult_llint = (vector long long int) { 678*256, 0x100 }; > + expected_vresult_uchar > + = (vector unsigned char) { 0x0, 0xa6, 0x2, 0x0, 0x0, 0xa6, 0x2, 0x0, > + 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }; > > - vresult_uchar = vec_replace_unaligned (src_va_llint, src_a_llint, 7); > - vresult_llint = (vector signed long long) vresult_uchar; > + vresult_uchar = vec_replace_unaligned (src_va_uchar, src_a_llint, 7); > > - if (!vec_all_eq (vresult_llint, expected_vresult_llint)) { > + if (!vec_all_eq (vresult_uchar, expected_vresult_uchar)) { > #if DEBUG > - printf("ERROR, vec_replace_unaligned (src_vb_llint, src_va_llint, " > + printf("ERROR, vec_replace_unaligned (src_va_uchar, src_va_llint, " > "index)\n"); > - for(i = 0; i < 2; i++) > - printf(" vresult_llint[%d] = %d, expected_vresult_llint[%d] = %d\n", > - i, vresult_llint[i], i, expected_vresult_llint[i]); > + for (i = 0; i < 16; i++) > + printf(" vresult_uchar[%d] = %d, expected_vresult_uchar[%d] = %d\n", > + i, vresult_uchar[i], i, expected_vresult_uchar[i]); > #else > abort(); > #endif > } > > src_a_double = 678.0; > - src_va_double = (vector double) { 0.0, 50.0 }; > + // src_va_double = (vector double) { 0.0, 50.0 }; > + src_va_uchar = (vector unsigned char) { 0, 0, 0, 0, 0, 0, 0, 0, > + 0, 0, 0, 0, 0, 0, 0, 0 }; > vresult_double = (vector double) { 0.0, 0.0 }; > expected_vresult_double = (vector double) { 0.0, 678.0 }; > > - vresult_uchar = vec_replace_unaligned (src_va_double, src_a_double, 0); > + vresult_uchar = vec_replace_unaligned (src_va_uchar, src_a_double, 0); > vresult_double = (vector double) vresult_uchar; > > - if (!vec_all_eq (vresult_double, expected_vresult_double)) { > + if (!vec_all_eq (vresult_double, expected_vresult_double)) { > #if DEBUG > - printf("ERROR, vec_replace_unaligned (src_vb_double, src_va_double, " > + printf("ERROR, vec_replace_unaligned (src_va_uchar, src_va_double, " > "index)\n"); > - for(i = 0; i < 2; i++) > + for (i = 0; i < 2; i++) > printf(" vresult_double[%d] = %f, expected_vresult_double[%d] = %f\n", > i, vresult_double[i], i, expected_vresult_double[i]); > #else > @@ -295,7 +312,5 @@ main (int argc, char *argv []) > return 0; > } > > -/* { dg-final { scan-assembler-times {\mvinsw\M} 6 } } */ > -/* { dg-final { scan-assembler-times {\mvinsd\M} 6 } } */ > - > - > +/* { dg-final { scan-assembler-times {\mvinsw\M} 8 } } */ > +/* { dg-final { scan-assembler-times {\mvinsd\M} 4 } } */ Why do you have this change? As changelog, it just updates some types as the prototypes change and formats, it's not clear to me why it can cause the expected insn count to change. BR, Kewen