From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 899D73861972 for ; Thu, 5 Nov 2020 07:28:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 899D73861972 Received: from pps.filterd (m0098404.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 0A572x70151633 for ; Thu, 5 Nov 2020 02:28:35 -0500 Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com with ESMTP id 34m5ft3fmf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 05 Nov 2020 02:28:34 -0500 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.0.42/8.16.0.42) with SMTP id 0A57NRFX026834 for ; Thu, 5 Nov 2020 07:28:32 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma04ams.nl.ibm.com with ESMTP id 34h01ucxfx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 05 Nov 2020 07:28:31 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 0A57SSa59175786 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 5 Nov 2020 07:28:28 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9E2E8A4069; Thu, 5 Nov 2020 07:28:28 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2E74DA405B; Thu, 5 Nov 2020 07:28:28 +0000 (GMT) Received: from [9.145.174.26] (unknown [9.145.174.26]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTP; Thu, 5 Nov 2020 07:28:28 +0000 (GMT) Subject: Re: [PATCH 4/4] IBM Z: Test long doubles in vector registers To: Ilya Leoshkevich Cc: gcc-patches@gcc.gnu.org References: <20201103213637.1876906-1-iii@linux.ibm.com> <20201103214656.1877781-1-iii@linux.ibm.com> <49af2dd9a1b08dea55afeeb716f20d15e7a5290e.camel@linux.ibm.com> From: Andreas Krebbel Message-ID: Date: Thu, 5 Nov 2020 08:28:27 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <49af2dd9a1b08dea55afeeb716f20d15e7a5290e.camel@linux.ibm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.312, 18.0.737 definitions=2020-11-05_02:2020-11-05, 2020-11-05 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 mlxscore=0 phishscore=0 suspectscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxlogscore=999 adultscore=0 impostorscore=0 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2011050048 X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Nov 2020 07:28:42 -0000 On 04.11.20 23:19, Ilya Leoshkevich wrote: > On Wed, 2020-11-04 at 18:28 +0100, Andreas Krebbel wrote: >> These tests all use the -mzvector option but do not appear to make >> use of the z vector languages >> extensions. I think that option could be removed. Then these tests >> should be moved to the vector subdir. > > Will change, thanks! > >> You could do the asm scanning also in dg-do run tests. > > This doesn't seem to work. For example, if I add > > /* { dg-final { scan-assembler-times {aaa} 999 } } */ > > to long-double-from-double-run.c, it won't fail. You will have to add --save-temps to dg-options to make it work. Otherwise the scan test will stay unresolved. Andreas > >> >> Andreas >> >> >> On 03.11.20 22:46, Ilya Leoshkevich wrote: >>> gcc/testsuite/ChangeLog: >>> >>> 2020-11-03 Ilya Leoshkevich >>> >>> * gcc.target/s390/zvector/long-double-callee-abi-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-caller-abi-run.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-caller-abi-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-copysign-run.c: New test. >>> * gcc.target/s390/zvector/long-double-copysign-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-fprx2-constant.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-double-run.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-double-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-float-run.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-float-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-i16-run.c: New test. >>> * gcc.target/s390/zvector/long-double-from-i16-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-i32-run.c: New test. >>> * gcc.target/s390/zvector/long-double-from-i32-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-i64-run.c: New test. >>> * gcc.target/s390/zvector/long-double-from-i64-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-i8-run.c: New test. >>> * gcc.target/s390/zvector/long-double-from-i8-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-from-u16-run.c: New test. >>> * gcc.target/s390/zvector/long-double-from-u16-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-u32-run.c: New test. >>> * gcc.target/s390/zvector/long-double-from-u32-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-u64-run.c: New test. >>> * gcc.target/s390/zvector/long-double-from-u64-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-from-u8-run.c: New test. >>> * gcc.target/s390/zvector/long-double-from-u8-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-to-double-run.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-to-double-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-to-float-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-float-scan.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-to-i16-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-i16-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-to-i32-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-i32-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-to-i64-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-i64-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-to-i8-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-i8-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-to-u16-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-u16-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-to-u32-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-u32-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-to-u64-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-u64-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-to-u8-run.c: New test. >>> * gcc.target/s390/zvector/long-double-to-u8-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-vec-duplicate.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-wf.h: New test. >>> * gcc.target/s390/zvector/long-double-wfaxb-run.c: New test. >>> * gcc.target/s390/zvector/long-double-wfaxb-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-wfaxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfcxb-0001.c: New test. >>> * gcc.target/s390/zvector/long-double-wfcxb-0111.c: New test. >>> * gcc.target/s390/zvector/long-double-wfcxb-1011.c: New test. >>> * gcc.target/s390/zvector/long-double-wfcxb-1101.c: New test. >>> * gcc.target/s390/zvector/long-double-wfdxb-run.c: New test. >>> * gcc.target/s390/zvector/long-double-wfdxb-scan.c: New test. >>> * gcc.target/s390/zvector/long-double-wfdxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfixb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfkxb-0111.c: New test. >>> * gcc.target/s390/zvector/long-double-wfkxb-1011.c: New test. >>> * gcc.target/s390/zvector/long-double-wfkxb-1101.c: New test. >>> * gcc.target/s390/zvector/long-double-wflcxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wflpxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfmaxb-2.c: New test. >>> * gcc.target/s390/zvector/long-double-wfmaxb-3.c: New test. >>> * gcc.target/s390/zvector/long-double-wfmaxb-disabled.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-wfmaxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfmsxb-disabled.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-wfmsxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfmxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfnmaxb-disabled.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-wfnmaxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfnmsxb-disabled.c: New >>> test. >>> * gcc.target/s390/zvector/long-double-wfnmsxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfsqxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wfsxb-1.c: New test. >>> * gcc.target/s390/zvector/long-double-wfsxb.c: New test. >>> * gcc.target/s390/zvector/long-double-wftcixb-1.c: New test. >>> * gcc.target/s390/zvector/long-double-wftcixb.c: New test. >>> --- >>> .../zvector/long-double-callee-abi-scan.c | 20 +++++++ >>> .../s390/zvector/long-double-caller-abi-run.c | 4 ++ >>> .../zvector/long-double-caller-abi-scan.c | 13 ++++ >>> .../s390/zvector/long-double-copysign-run.c | 14 +++++ >>> .../s390/zvector/long-double-copysign-scan.c | 11 ++++ >>> .../s390/zvector/long-double-fprx2-constant.c | 11 ++++ >>> .../zvector/long-double-from-double-run.c | 12 ++++ >>> .../zvector/long-double-from-double-scan.c | 9 +++ >>> .../s390/zvector/long-double-from-float-run.c | 12 ++++ >>> .../zvector/long-double-from-float-scan.c | 10 ++++ >>> .../s390/zvector/long-double-from-i16-run.c | 12 ++++ >>> .../s390/zvector/long-double-from-i16-scan.c | 11 ++++ >>> .../s390/zvector/long-double-from-i32-run.c | 12 ++++ >>> .../s390/zvector/long-double-from-i32-scan.c | 11 ++++ >>> .../s390/zvector/long-double-from-i64-run.c | 12 ++++ >>> .../s390/zvector/long-double-from-i64-scan.c | 11 ++++ >>> .../s390/zvector/long-double-from-i8-run.c | 12 ++++ >>> .../s390/zvector/long-double-from-i8-scan.c | 11 ++++ >>> .../s390/zvector/long-double-from-u16-run.c | 12 ++++ >>> .../s390/zvector/long-double-from-u16-scan.c | 11 ++++ >>> .../s390/zvector/long-double-from-u32-run.c | 12 ++++ >>> .../s390/zvector/long-double-from-u32-scan.c | 11 ++++ >>> .../s390/zvector/long-double-from-u64-run.c | 12 ++++ >>> .../s390/zvector/long-double-from-u64-scan.c | 11 ++++ >>> .../s390/zvector/long-double-from-u8-run.c | 12 ++++ >>> .../s390/zvector/long-double-from-u8-scan.c | 11 ++++ >>> .../s390/zvector/long-double-to-double-run.c | 12 ++++ >>> .../s390/zvector/long-double-to-double-scan.c | 9 +++ >>> .../s390/zvector/long-double-to-float-run.c | 12 ++++ >>> .../s390/zvector/long-double-to-float-scan.c | 10 ++++ >>> .../s390/zvector/long-double-to-i16-run.c | 12 ++++ >>> .../s390/zvector/long-double-to-i16-scan.c | 11 ++++ >>> .../s390/zvector/long-double-to-i32-run.c | 12 ++++ >>> .../s390/zvector/long-double-to-i32-scan.c | 11 ++++ >>> .../s390/zvector/long-double-to-i64-run.c | 12 ++++ >>> .../s390/zvector/long-double-to-i64-scan.c | 13 ++++ >>> .../s390/zvector/long-double-to-i8-run.c | 12 ++++ >>> .../s390/zvector/long-double-to-i8-scan.c | 11 ++++ >>> .../s390/zvector/long-double-to-u16-run.c | 13 ++++ >>> .../s390/zvector/long-double-to-u16-scan.c | 11 ++++ >>> .../s390/zvector/long-double-to-u32-run.c | 13 ++++ >>> .../s390/zvector/long-double-to-u32-scan.c | 11 ++++ >>> .../s390/zvector/long-double-to-u64-run.c | 13 ++++ >>> .../s390/zvector/long-double-to-u64-scan.c | 11 ++++ >>> .../s390/zvector/long-double-to-u8-run.c | 13 ++++ >>> .../s390/zvector/long-double-to-u8-scan.c | 11 ++++ >>> .../s390/zvector/long-double-vec-duplicate.c | 13 ++++ >>> .../gcc.target/s390/zvector/long-double-wf.h | 60 >>> +++++++++++++++++++ >>> .../s390/zvector/long-double-wfaxb-run.c | 11 ++++ >>> .../s390/zvector/long-double-wfaxb-scan.c | 10 ++++ >>> .../s390/zvector/long-double-wfaxb.c | 8 +++ >>> .../s390/zvector/long-double-wfcxb-0001.c | 10 ++++ >>> .../s390/zvector/long-double-wfcxb-0111.c | 10 ++++ >>> .../s390/zvector/long-double-wfcxb-1011.c | 10 ++++ >>> .../s390/zvector/long-double-wfcxb-1101.c | 10 ++++ >>> .../s390/zvector/long-double-wfdxb-run.c | 11 ++++ >>> .../s390/zvector/long-double-wfdxb-scan.c | 10 ++++ >>> .../s390/zvector/long-double-wfdxb.c | 8 +++ >>> .../s390/zvector/long-double-wfixb.c | 8 +++ >>> .../s390/zvector/long-double-wfkxb-0111.c | 10 ++++ >>> .../s390/zvector/long-double-wfkxb-1011.c | 10 ++++ >>> .../s390/zvector/long-double-wfkxb-1101.c | 10 ++++ >>> .../s390/zvector/long-double-wflcxb.c | 8 +++ >>> .../s390/zvector/long-double-wflpxb.c | 8 +++ >>> .../s390/zvector/long-double-wfmaxb-2.c | 24 ++++++++ >>> .../s390/zvector/long-double-wfmaxb-3.c | 14 +++++ >>> .../zvector/long-double-wfmaxb-disabled.c | 9 +++ >>> .../s390/zvector/long-double-wfmaxb.c | 8 +++ >>> .../zvector/long-double-wfmsxb-disabled.c | 9 +++ >>> .../s390/zvector/long-double-wfmsxb.c | 8 +++ >>> .../s390/zvector/long-double-wfmxb.c | 8 +++ >>> .../zvector/long-double-wfnmaxb-disabled.c | 10 ++++ >>> .../s390/zvector/long-double-wfnmaxb.c | 8 +++ >>> .../zvector/long-double-wfnmsxb-disabled.c | 10 ++++ >>> .../s390/zvector/long-double-wfnmsxb.c | 8 +++ >>> .../s390/zvector/long-double-wfsqxb.c | 8 +++ >>> .../s390/zvector/long-double-wfsxb-1.c | 21 +++++++ >>> .../s390/zvector/long-double-wfsxb.c | 8 +++ >>> .../s390/zvector/long-double-wftcixb-1.c | 15 +++++ >>> .../s390/zvector/long-double-wftcixb.c | 8 +++ >>> 80 files changed, 934 insertions(+) >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-callee-abi-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-caller-abi-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-caller-abi-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-copysign-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-copysign-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-fprx2-constant.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-double-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-double-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-float-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-float-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i16-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i16-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i32-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i32-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i64-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i64-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i8-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i8-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u16-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u16-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u32-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u32-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u64-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u64-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u8-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u8-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-double-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-double-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-float-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-float-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-i16-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-i16-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-i32-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-i32-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-i64-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-i64-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-i8-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-i8-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-u16-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-u16-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-u32-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-u32-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-u64-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-u64-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-u8-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-to-u8-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-vec-duplicate.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wf.h >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfaxb-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfaxb-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfaxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfcxb-0001.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfcxb-0111.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfcxb-1011.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfcxb-1101.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfdxb-run.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfdxb-scan.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfdxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfixb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfkxb-0111.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfkxb-1011.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfkxb-1101.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wflcxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wflpxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmaxb-2.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmaxb-3.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmaxb-disabled.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmaxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmsxb-disabled.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmsxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfnmaxb-disabled.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfnmaxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfnmsxb-disabled.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfnmsxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfsqxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfsxb-1.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfsxb.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wftcixb-1.c >>> create mode 100644 gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wftcixb.c >>> >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> callee-abi-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-callee-abi-scan.c >>> new file mode 100644 >>> index 00000000000..005bfa9977a >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-callee-abi- >>> scan.c >>> @@ -0,0 +1,20 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch -fno-unroll- >>> loops" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) long double >>> +long_double_callee (long double x, int n, ...) >>> +{ >>> + long double sum = x; >>> + va_list vl; >>> + int i; >>> + >>> + va_start (vl, n); >>> + for (i = 0; i < n; i++) >>> + sum += va_arg (vl, long double); >>> + va_end (vl); >>> + >>> + return sum; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tvl\t} 3 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> caller-abi-run.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-caller-abi-run.c >>> new file mode 100644 >>> index 00000000000..d1756f5d34c >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-caller-abi- >>> run.c >>> @@ -0,0 +1,4 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include "long-double-callee-abi-scan.c" >>> +#include "long-double-caller-abi-scan.c" >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> caller-abi-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-caller-abi-scan.c >>> new file mode 100644 >>> index 00000000000..ef690733fbf >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-caller-abi- >>> scan.c >>> @@ -0,0 +1,13 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +long double long_double_callee (long double x, int n, ...); >>> + >>> +int >>> +main () >>> +{ >>> + assert (long_double_callee (1.L, 2, 2.L, 3.L) == 6.L); >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tvst\t} 3 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> copysign-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> copysign-run.c >>> new file mode 100644 >>> index 00000000000..c874b64d78e >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-copysign- >>> run.c >>> @@ -0,0 +1,14 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-copysign-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_copysign (1.1L, 2.2L) == 1.1L); >>> + assert (long_double_copysign (1.1L, -2.2L) == -1.1L); >>> + assert (long_double_copysign (-1.1L, 2.2L) == 1.1L); >>> + assert (long_double_copysign (-1.1L, -2.2L) == -1.1L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> copysign-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-copysign-scan.c >>> new file mode 100644 >>> index 00000000000..6a44c0eff61 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-copysign- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_copysign (long double x, long double y) >>> +{ >>> + return __builtin_copysignl (x, y); >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tvsel\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> fprx2-constant.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-fprx2-constant.c >>> new file mode 100644 >>> index 00000000000..02a6a1f69c5 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-fprx2- >>> constant.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mtune=z14 -funroll-loops" } */ >>> + >>> +long double a; >>> +int d; >>> +void >>> +b () >>> +{ >>> + for (int c = 0; c < d; ++c) >>> + a = (a - c) / (c + 1); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-double-run.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-double-run.c >>> new file mode 100644 >>> index 00000000000..7a960ad119d >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from- >>> double-run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-double-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_double (42.) == 42.L); >>> + assert (long_double_from_double (-42.) == -42.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-double-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-double-scan.c >>> new file mode 100644 >>> index 00000000000..db9ba4534c3 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from- >>> double-scan.c >>> @@ -0,0 +1,9 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_double (double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\twflld\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-float-run.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-float-run.c >>> new file mode 100644 >>> index 00000000000..41256b39abc >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-float- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-float-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_float (42.F) == 42.L); >>> + assert (long_double_from_float (-42.F) == -42.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-float-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-float-scan.c >>> new file mode 100644 >>> index 00000000000..4b9b570fcfb >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-float- >>> scan.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_float (float x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tldebr\t} 1 } } */ >>> +/* { dg-final { scan-assembler-times {\n\twflld\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i16-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i16-run.c >>> new file mode 100644 >>> index 00000000000..6c0fac93da5 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-i16- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-i16-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_i16 (42) == 42.L); >>> + assert (long_double_from_i16 (-42) == -42.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i16-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i16-scan.c >>> new file mode 100644 >>> index 00000000000..18af4d82f57 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-i16- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_i16 (int16_t x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcxfbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i32-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i32-run.c >>> new file mode 100644 >>> index 00000000000..2baa6e156f7 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-i32- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-i32-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_i32 (42) == 42.L); >>> + assert (long_double_from_i32 (-42) == -42.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i32-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i32-scan.c >>> new file mode 100644 >>> index 00000000000..433b6bbffe5 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-i32- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_i32 (int32_t x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcxfbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i64-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i64-run.c >>> new file mode 100644 >>> index 00000000000..c6f460064e0 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-i64- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-i64-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_i64 (42) == 42.L); >>> + assert (long_double_from_i64 (-42) == -42.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i64-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-i64-scan.c >>> new file mode 100644 >>> index 00000000000..f418dffd8b0 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-i64- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_i64 (int64_t x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcxgbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i8-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i8-run.c >>> new file mode 100644 >>> index 00000000000..15c46d8a909 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-i8- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-i8-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_i8 (42) == 42.L); >>> + assert (long_double_from_i8 (-42) == -42.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i8-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-i8-scan.c >>> new file mode 100644 >>> index 00000000000..7a8b3fdaad0 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-i8- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_i8 (int8_t x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcxfbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u16-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u16-run.c >>> new file mode 100644 >>> index 00000000000..495b3f9f18d >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-u16- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-u16-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_u16 (42) == 42.L); >>> + assert (long_double_from_u16 (-42) == 65494.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u16-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u16-scan.c >>> new file mode 100644 >>> index 00000000000..b65e10269df >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-u16- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_u16 (uint16_t x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcxlfbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u32-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u32-run.c >>> new file mode 100644 >>> index 00000000000..072ae99ef24 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-u32- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-u32-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_u32 (42) == 42.L); >>> + assert (long_double_from_u32 (-42) == 4294967254.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u32-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u32-scan.c >>> new file mode 100644 >>> index 00000000000..408e3d1b570 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-u32- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_u32 (uint32_t x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcxlfbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u64-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u64-run.c >>> new file mode 100644 >>> index 00000000000..6146c322611 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-u64- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-u64-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_u64 (42) == 42.L); >>> + assert (long_double_from_u64 (-42) == 18446744073709551574.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u64-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-from-u64-scan.c >>> new file mode 100644 >>> index 00000000000..856912d5689 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-u64- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_u64 (uint64_t x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcxlgbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u8-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u8-run.c >>> new file mode 100644 >>> index 00000000000..d769d006499 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-u8- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-from-u8-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_from_u8 (42) == 42.L); >>> + assert (long_double_from_u8 (-42) == 214.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u8-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> from-u8-scan.c >>> new file mode 100644 >>> index 00000000000..d1421d4322c >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-from-u8- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +long_double_from_u8 (uint8_t x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcxlfbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> double-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> to-double-run.c >>> new file mode 100644 >>> index 00000000000..b68ce88529a >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-double- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-double-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_double (42.L) == 42.); >>> + assert (long_double_to_double (-42.L) == -42.); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> double-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> to-double-scan.c >>> new file mode 100644 >>> index 00000000000..78ce18b38c4 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-double- >>> scan.c >>> @@ -0,0 +1,9 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +__attribute__ ((noipa, used)) static double >>> +long_double_to_double (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\twflrx\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> float-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> float-run.c >>> new file mode 100644 >>> index 00000000000..70a8a3e7f73 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-float- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-float-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_float (42.L) == 42.F); >>> + assert (long_double_to_float (-42.L) == -42.F); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> float-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> to-float-scan.c >>> new file mode 100644 >>> index 00000000000..1f0b60a3f03 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-float- >>> scan.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +__attribute__ ((noipa, used)) static float >>> +long_double_to_float (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times >>> {\n\twflrx\t%v\d+,%v\d+,0,3\n} 1 } } */ >>> +/* { dg-final { scan-assembler-times {\n\tledbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i16-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i16-run.c >>> new file mode 100644 >>> index 00000000000..2044baa45af >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i16- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-i16-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_i16 (42.L) == 42); >>> + assert (long_double_to_i16 (-42.L) == -42); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i16-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i16-scan.c >>> new file mode 100644 >>> index 00000000000..3c47ae97c39 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i16- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static int16_t >>> +long_double_to_i16 (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcfxbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i32-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i32-run.c >>> new file mode 100644 >>> index 00000000000..9f98ea39f6f >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i32- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-i32-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_i32 (42.L) == 42); >>> + assert (long_double_to_i32 (-42.L) == -42); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i32-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i32-scan.c >>> new file mode 100644 >>> index 00000000000..978b4751bff >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i32- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static int32_t >>> +long_double_to_i32 (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcfxbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i64-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i64-run.c >>> new file mode 100644 >>> index 00000000000..f2a27ff4fec >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i64- >>> run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-i64-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_i64 (42.L) == 42); >>> + assert (long_double_to_i64 (-42.L) == -42); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i64-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i64-scan.c >>> new file mode 100644 >>> index 00000000000..38a212ac3c7 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i64- >>> scan.c >>> @@ -0,0 +1,13 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static int64_t >>> +long_double_to_i64 (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times >>> {\n\tvpdi\t%v\d+,%v\d+,%v\d+,1\n} 1 } } */ >>> +/* { dg-final { scan-assembler-times >>> {\n\tvpdi\t%v\d+,%v\d+,%v\d+,5\n} 1 } } */ >>> +/* { dg-final { scan-assembler-times {\n\tcgxbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i8-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i8- >>> run.c >>> new file mode 100644 >>> index 00000000000..0e0624b2788 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i8-run.c >>> @@ -0,0 +1,12 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-i8-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_i8 (42.L) == 42); >>> + assert (long_double_to_i8 (-42.L) == -42); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i8-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> i8-scan.c >>> new file mode 100644 >>> index 00000000000..d015b8a307b >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-i8- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static int8_t >>> +long_double_to_i8 (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tcfxbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u16-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u16-run.c >>> new file mode 100644 >>> index 00000000000..7bac113a04c >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u16- >>> run.c >>> @@ -0,0 +1,13 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-u16-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_u16 (42.L) == 42); >>> + /* Not (-42 & 0xffff) due to loss of precision. */ >>> + assert (long_double_to_u16 (-42.L) == 0); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u16-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u16-scan.c >>> new file mode 100644 >>> index 00000000000..a7694ceb3ad >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u16- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static uint16_t >>> +long_double_to_u16 (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tclfxbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u32-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u32-run.c >>> new file mode 100644 >>> index 00000000000..b85038c0723 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u32- >>> run.c >>> @@ -0,0 +1,13 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-u32-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_u32 (42.L) == 42); >>> + /* Not (-42 & 0xffffffff) due to loss of precision. */ >>> + assert (long_double_to_u32 (-42.L) == 0); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u32-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u32-scan.c >>> new file mode 100644 >>> index 00000000000..ff97803d320 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u32- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static uint32_t >>> +long_double_to_u32 (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tclfxbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u64-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u64-run.c >>> new file mode 100644 >>> index 00000000000..e781637dac3 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u64- >>> run.c >>> @@ -0,0 +1,13 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-u64-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_u64 (42.L) == 42); >>> + /* Not (-42 & 0xffffffffffffffff) due to loss of precision. */ >>> + assert (long_double_to_u64 (-42.L) == 0); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u64-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u64-scan.c >>> new file mode 100644 >>> index 00000000000..d97c0ec35dd >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u64- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static uint64_t >>> +long_double_to_u64 (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tclgxbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u8-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u8- >>> run.c >>> new file mode 100644 >>> index 00000000000..7ae330b6aa1 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u8-run.c >>> @@ -0,0 +1,13 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-to-u8-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (long_double_to_u8 (42.L) == 42); >>> + /* Not (-42 & 0xff) due to loss of precision. */ >>> + assert (long_double_to_u8 (-42.L) == 0); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u8-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-to- >>> u8-scan.c >>> new file mode 100644 >>> index 00000000000..0500bc1c946 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-to-u8- >>> scan.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +__attribute__ ((noipa, used)) static uint8_t >>> +long_double_to_u8 (long double x) >>> +{ >>> + return x; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\tclfxbr\t} 1 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-vec- >>> duplicate.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> vec-duplicate.c >>> new file mode 100644 >>> index 00000000000..2ce9da33b8e >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-vec- >>> duplicate.c >>> @@ -0,0 +1,13 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -funroll-loops -march=z14 -mtune=z14" } */ >>> + >>> +long double a, b; >>> +double *c; >>> +long double *d; >>> + >>> +void >>> +e () >>> +{ >>> + while (d != &a) >>> + *d++ = b * *c++; >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double-wf.h >>> b/gcc/testsuite/gcc.target/s390/zvector/long-double-wf.h >>> new file mode 100644 >>> index 00000000000..a564fc62d47 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wf.h >>> @@ -0,0 +1,60 @@ >>> +#ifndef LONG_DOUBLE_WF_H >>> +#define LONG_DOUBLE_WF_H 1 >>> + >>> +#include >>> + >>> +#define ADD(x, y, z) ((x) + (z)) >>> +#define DIV(x, y, z) ((x) / (z)) >>> +#define FABSL(x, y, z) (fabsl (y)) >>> +#define ISINFL(x, y, z) (isinfl (x) ? (y) : (z)) >>> +#define MUL(x, y, z) ((x) * (z)) >>> +#define MUL_ADD(x, y, z) ((x) * (y) + (z)) >>> +#define MUL_SUB(x, y, z) ((x) * (y) - (z)) >>> +#define NEG(x, y, >>> z) \ >>> + ({ >>> \ >>> + volatile long double r = >>> -(y); \ >>> + r; >>> \ >>> + }) >>> +#define NEG_MUL_ADD(x, y, z) NEG (0, MUL_ADD (x, y, z), 0) >>> +#define NEG_MUL_SUB(x, y, z) NEG (0, MUL_SUB (x, y, z), 0) >>> +#define QUIET_IFEQUAL(x, y, z) ((x) == (y) ? (z) : 0) >>> +#define QUIET_IFGREATER(x, y, z) (__builtin_isgreater (x, y) ? (z) >>> : 0) >>> +#define QUIET_IFLESS(x, y, z) (__builtin_isless (x, y) ? (z) : 0) >>> +#define QUIET_IFUNORDERED(x, y, z) (__builtin_isunordered (x, y) ? >>> (z) : 0) >>> +#define SIGNALING_IFEQUAL(x, y, z) (((x) >= (y) && (x) <= (y)) ? >>> (z) : 0) >>> +#define SIGNALING_IFGREATER(x, y, z) ((x) > (y) ? (z) : 0) >>> +#define SIGNALING_IFLESS(x, y, z) ((x) < (y) ? (z) : 0) >>> +#define ROUNDL(x, y, z) (roundl (y)) >>> +#define SQRTL(x, y, z) (sqrtl (y)) >>> +#define SUB(x, y, z) ((x) - (z)) >>> + >>> +#define >>> LONG_DOUBLE_WF(op) >>> \ >>> + long double test >>> ( \ >>> + long double x0, long double x1, long double x2, long double >>> x3, \ >>> + long double x4, long double x5, long double x6, long double >>> x7, \ >>> + long double x8, long double x9, long double x10, long double >>> x11, \ >>> + long double x12, long double x13, long double x14, long >>> double x15) \ >>> + { >>> \ >>> + while (x15 < >>> 1E+30) \ >>> + { >>> \ >>> + x0 = op (x1, x2, >>> x3); \ >>> + x1 = op (x2, x3, x4) + >>> 1; \ >>> + x2 = op (x3, x4, x5) + >>> 2; \ >>> + x3 = op (x4, x5, x6) + >>> 3; \ >>> + x4 = op (x5, x6, x7) + >>> 4; \ >>> + x5 = op (x6, x7, x8) + >>> 5; \ >>> + x6 = op (x7, x8, x9) + >>> 6; \ >>> + x7 = op (x8, x9, x10) + >>> 7; \ >>> + x8 = op (x9, x10, x11) + >>> 8; \ >>> + x9 = op (x10, x11, x12) + >>> 9; \ >>> + x10 = op (x11, x12, x13) + >>> 10; \ >>> + x11 = op (x12, x13, x14) + >>> 11; \ >>> + x12 = op (x13, x14, x15) + >>> 12; \ >>> + x13 = op (x14, x15, x0) + >>> 13; \ >>> + x14 = op (x15, x0, x1) + >>> 14; \ >>> + x15 = op (x0, x1, x2) + >>> 15; \ >>> + } >>> \ >>> + return >>> x15; >>> \ >>> + } >>> + >>> +#endif >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfaxb-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfaxb-run.c >>> new file mode 100644 >>> index 00000000000..de7770068ea >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfaxb-run.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-wfaxb-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (wfaxb (1.11L, 2.22L, 3.33L) == 6.66L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfaxb-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfaxb-scan.c >>> new file mode 100644 >>> index 00000000000..2bbf408416a >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfaxb- >>> scan.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +wfaxb (long double x, long double y, long double z) >>> +{ >>> + return x + y + z; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\twfaxb\t} 2 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfaxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfaxb.c >>> new file mode 100644 >>> index 00000000000..354dbe226b0 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfaxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (ADD); >>> + >>> +/* { dg-final { scan-assembler {\n\twfaxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfcxb-0001.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfcxb-0001.c >>> new file mode 100644 >>> index 00000000000..d0a32d51902 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfcxb- >>> 0001.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (QUIET_IFUNORDERED); >>> + >>> +/* { dg-final { scan-assembler {\n\twfcxb\t} } } */ >>> +/* jo == brc 0b0001, ... */ >>> +/* { dg-final { scan-assembler {\n\tjo\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfcxb-0111.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfcxb-0111.c >>> new file mode 100644 >>> index 00000000000..04a34e7373c >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfcxb- >>> 0111.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (QUIET_IFEQUAL); >>> + >>> +/* { dg-final { scan-assembler {\n\twfcxb\t} } } */ >>> +/* jne == brc 0b0111, ... */ >>> +/* { dg-final { scan-assembler {\n\tjne\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfcxb-1011.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfcxb-1011.c >>> new file mode 100644 >>> index 00000000000..f221a56ffb8 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfcxb- >>> 1011.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (QUIET_IFLESS); >>> + >>> +/* { dg-final { scan-assembler {\n\twfcxb\t} } } */ >>> +/* jnl == brc 0b1011, ... */ >>> +/* { dg-final { scan-assembler {\n\tjnl\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfcxb-1101.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfcxb-1101.c >>> new file mode 100644 >>> index 00000000000..d2353ebe30c >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfcxb- >>> 1101.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (QUIET_IFGREATER); >>> + >>> +/* { dg-final { scan-assembler {\n\twfcxb\t} } } */ >>> +/* jnh == brc 0b1101, ... */ >>> +/* { dg-final { scan-assembler {\n\tjnh\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfdxb-run.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfdxb-run.c >>> new file mode 100644 >>> index 00000000000..7ac752dc289 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfdxb-run.c >>> @@ -0,0 +1,11 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +#include "long-double-wfdxb-scan.c" >>> + >>> +int >>> +main (void) >>> +{ >>> + assert (wfdxb (2.22L, 1.11L, 2.L) == 1.L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfdxb-scan.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfdxb-scan.c >>> new file mode 100644 >>> index 00000000000..31eea0f9329 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfdxb- >>> scan.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +__attribute__ ((noipa, used)) static long double >>> +wfdxb (long double x, long double y, long double z) >>> +{ >>> + return (x / y) / z; >>> +} >>> + >>> +/* { dg-final { scan-assembler-times {\n\twfdxb\t} 2 } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfdxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfdxb.c >>> new file mode 100644 >>> index 00000000000..7d854cac1bc >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfdxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (DIV); >>> + >>> +/* { dg-final { scan-assembler {\n\twfdxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfixb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfixb.c >>> new file mode 100644 >>> index 00000000000..5e16ffa58e6 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfixb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (ROUNDL); >>> + >>> +/* { dg-final { scan-assembler {\n\twfixb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfkxb-0111.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfkxb-0111.c >>> new file mode 100644 >>> index 00000000000..2e7b1c37d08 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfkxb- >>> 0111.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (SIGNALING_IFEQUAL); >>> + >>> +/* { dg-final { scan-assembler {\n\twfkxb\t} } } */ >>> +/* jne == brc 0b0111, ... */ >>> +/* { dg-final { scan-assembler {\n\tjne\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfkxb-1011.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfkxb-1011.c >>> new file mode 100644 >>> index 00000000000..2d2020af842 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfkxb- >>> 1011.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (SIGNALING_IFLESS); >>> + >>> +/* { dg-final { scan-assembler {\n\twfkxb\t} } } */ >>> +/* jnl == brc 0b1011, ... */ >>> +/* { dg-final { scan-assembler {\n\tjnl\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfkxb-1101.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfkxb-1101.c >>> new file mode 100644 >>> index 00000000000..f17f83ca568 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfkxb- >>> 1101.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (SIGNALING_IFGREATER); >>> + >>> +/* { dg-final { scan-assembler {\n\twfkxb\t} } } */ >>> +/* jnh == brc 0b1101, ... */ >>> +/* { dg-final { scan-assembler {\n\tjnh\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wflcxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wflcxb.c >>> new file mode 100644 >>> index 00000000000..c69161beca9 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wflcxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (NEG); >>> + >>> +/* { dg-final { scan-assembler {\n\twflcxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wflpxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wflpxb.c >>> new file mode 100644 >>> index 00000000000..df3c1dbccb8 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wflpxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (FABSL); >>> + >>> +/* { dg-final { scan-assembler {\n\twflpxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmaxb-2.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmaxb-2.c >>> new file mode 100644 >>> index 00000000000..9335680a70c >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfmaxb-2.c >>> @@ -0,0 +1,24 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch -mvx-long- >>> double-fma" } */ >>> + >>> +int a, c, d, f, k, l, m; >>> +long double b, e, g, h, i; >>> +double j; >>> + >>> +void >>> +n (void) >>> +{ >>> + while (m) >>> + { >>> + a = b * d; >>> + b = c; >>> + c = d * e + 2; >>> + e = f + g + 4; >>> + f = h + 6; >>> + g = h * 0 + i + 7; >>> + h = i + 9; >>> + i = j * k + 0 + 10; >>> + j = l; >>> + m = a * b; >>> + } >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmaxb-3.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmaxb-3.c >>> new file mode 100644 >>> index 00000000000..9cc2b85f673 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfmaxb-3.c >>> @@ -0,0 +1,14 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch -mvx-long- >>> double-fma" } */ >>> + >>> +long double a, c, d; >>> +int b; >>> +void >>> +e (void) >>> +{ >>> + while (d) >>> + { >>> + a = 0 * c + 0; >>> + d = b; >>> + } >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmaxb-disabled.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmaxb-disabled.c >>> new file mode 100644 >>> index 00000000000..c9e5a7b066c >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfmaxb- >>> disabled.c >>> @@ -0,0 +1,9 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (MUL_ADD); >>> + >>> +/* { dg-final { scan-assembler {\n\twfmxb\t} } } */ >>> +/* { dg-final { scan-assembler {\n\twfaxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmaxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmaxb.c >>> new file mode 100644 >>> index 00000000000..fddad943f18 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfmaxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch -mvx-long- >>> double-fma" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (MUL_ADD); >>> + >>> +/* { dg-final { scan-assembler {\n\twfmaxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmsxb-disabled.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfmsxb-disabled.c >>> new file mode 100644 >>> index 00000000000..e78178b9a0b >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfmsxb- >>> disabled.c >>> @@ -0,0 +1,9 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (MUL_SUB); >>> + >>> +/* { dg-final { scan-assembler {\n\twfmxb\t} } } */ >>> +/* { dg-final { scan-assembler {\n\twfsxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmsxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmsxb.c >>> new file mode 100644 >>> index 00000000000..1fe71ecf09f >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfmsxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch -mvx-long- >>> double-fma" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (MUL_SUB); >>> + >>> +/* { dg-final { scan-assembler {\n\twfmsxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfmxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfmxb.c >>> new file mode 100644 >>> index 00000000000..ce311f89db4 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfmxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (MUL); >>> + >>> +/* { dg-final { scan-assembler {\n\twfmxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfnmaxb-disabled.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfnmaxb-disabled.c >>> new file mode 100644 >>> index 00000000000..da8a73adcee >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfnmaxb- >>> disabled.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (NEG_MUL_ADD); >>> + >>> +/* { dg-final { scan-assembler {\n\twfmxb\t} } } */ >>> +/* { dg-final { scan-assembler {\n\twfaxb\t} } } */ >>> +/* { dg-final { scan-assembler {\n\twflcxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfnmaxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfnmaxb.c >>> new file mode 100644 >>> index 00000000000..75b28137048 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfnmaxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch -mvx-long- >>> double-fma" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (NEG_MUL_ADD); >>> + >>> +/* { dg-final { scan-assembler {\n\twfnmaxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfnmsxb-disabled.c b/gcc/testsuite/gcc.target/s390/zvector/long- >>> double-wfnmsxb-disabled.c >>> new file mode 100644 >>> index 00000000000..9a07d049ed4 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfnmsxb- >>> disabled.c >>> @@ -0,0 +1,10 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (NEG_MUL_SUB); >>> + >>> +/* { dg-final { scan-assembler {\n\twfmxb\t} } } */ >>> +/* { dg-final { scan-assembler {\n\twfsxb\t} } } */ >>> +/* { dg-final { scan-assembler {\n\twflcxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfnmsxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfnmsxb.c >>> new file mode 100644 >>> index 00000000000..16b80890725 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfnmsxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch -mvx-long- >>> double-fma" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (NEG_MUL_SUB); >>> + >>> +/* { dg-final { scan-assembler {\n\twfnmsxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfsqxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfsqxb.c >>> new file mode 100644 >>> index 00000000000..2f42483dfee >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfsqxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (SQRTL); >>> + >>> +/* { dg-final { scan-assembler {\n\twfsqxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfsxb-1.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfsxb-1.c >>> new file mode 100644 >>> index 00000000000..dd2f244a4eb >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfsxb-1.c >>> @@ -0,0 +1,21 @@ >>> +/* { dg-do run } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> +#include >>> + >>> +typedef float tf __attribute__ ((mode (TF))); >>> +static tf x; >>> +static tf y; >>> + >>> +__attribute__ ((noipa)) static tf >>> +sub (void) >>> +{ >>> + return x - y; >>> +} >>> + >>> +int >>> +main (void) >>> +{ >>> + x = 1.5L; >>> + y = 2.5L; >>> + assert (sub () == -1.0L); >>> +} >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wfsxb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfsxb.c >>> new file mode 100644 >>> index 00000000000..d27cf8ca3de >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wfsxb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (SUB); >>> + >>> +/* { dg-final { scan-assembler {\n\twfsxb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wftcixb-1.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wftcixb-1.c >>> new file mode 100644 >>> index 00000000000..6915d8ed8a4 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wftcixb-1.c >>> @@ -0,0 +1,15 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O1 -march=z14 -mzvector -mzarch" } */ >>> + >>> +int a, b; >>> + >>> +void >>> +c (void) >>> +{ >>> + long double d; >>> + a = d; >>> + if (__builtin_isinf (d)) >>> + b = 0; >>> +} >>> + >>> +/* { dg-final { scan-assembler {\n\twftcixb\t} } } */ >>> diff --git a/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wftcixb.c b/gcc/testsuite/gcc.target/s390/zvector/long-double- >>> wftcixb.c >>> new file mode 100644 >>> index 00000000000..1134e26ee87 >>> --- /dev/null >>> +++ b/gcc/testsuite/gcc.target/s390/zvector/long-double-wftcixb.c >>> @@ -0,0 +1,8 @@ >>> +/* { dg-do compile } */ >>> +/* { dg-options "-O3 -march=z14 -mzvector -mzarch" } */ >>> + >>> +#include "long-double-wf.h" >>> + >>> +LONG_DOUBLE_WF (ISINFL); >>> + >>> +/* { dg-final { scan-assembler {\n\twftcixb\t} } } */ >>> >