[PATCH 4/4] IBM Z: Test long doubles in vector registers

Andreas Krebbel krebbel@linux.ibm.com
Thu Nov 5 07:28:27 GMT 2020


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  <iii@linux.ibm.com>
>>>
>>> 	* 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 <stdarg.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <assert.h>
>>> +
>>> +#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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <assert.h>
>>> +
>>> +#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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <assert.h>
>>> +
>>> +#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 <stdint.h>
>>> +
>>> +__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 <math.h>
>>> +
>>> +#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 <assert.h>
>>> +
>>> +#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 <assert.h>
>>> +
>>> +#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 <assert.h>
>>> +
>>> +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} } } */
>>>
> 



More information about the Gcc-patches mailing list