[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