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