[PATCH 0/4] IBM Z: Store long doubles in vector registers when possible

Ilya Leoshkevich iii@linux.ibm.com
Tue Nov 3 21:36:33 GMT 2020


Bootstrapped and regtested on s390x-redhat-linux with --with-mode=zarch
--with-arch=z14.  Ok for master?

This patch series implements storing long doubles in vector registers
on z14+.  Patches 1 and 2 are initial cleanups.  Patch 3 is the actual
implementation, patch 4 adds tests.

Ilya Leoshkevich (4):
  IBM Z: Remove unused RRe and RXe mode_attrs
  IBM Z: Unhardcode NR_C_MODES
  IBM Z: Store long doubles in vector registers when possible
  IBM Z: Test long doubles in vector registers

 gcc/config/s390/s390-modes.def                |   5 +-
 gcc/config/s390/s390-protos.h                 |   1 +
 gcc/config/s390/s390.c                        |  67 ++-
 gcc/config/s390/s390.h                        |  28 ++
 gcc/config/s390/s390.md                       | 214 ++++++----
 gcc/config/s390/s390.opt                      |  11 +
 gcc/config/s390/vector.md                     | 382 ++++++++++++++++--
 gcc/config/s390/vx-builtins.md                |  38 +-
 .../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 +
 88 files changed, 1534 insertions(+), 146 deletions(-)
 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

-- 
2.25.4



More information about the Gcc-patches mailing list