The attached patchset adds support for the IBM z13 machine to the GCC S/390 backend.
The machine has been announced recently: http://www-03.ibm.com/press/us/en/pressrelease/45808.wss IBM z/Architecture Principles of Operation http://publibfi.boulder.ibm.com/epubs/pdf/dz9zr010.pdf The required Binutils support is upstream since January: https://sourceware.org/ml/binutils/2015-01/msg00197.html Highlights from a toolchain perspective are: - 32 128 bit vector registers (overlapping with the existing 16 64 bit floating point registers) - vector double instructions - vector integer instructions - scalar vector instructions (allowing to have more floating point registers for scalar operations) - vector string instructions I would like to commit this patchset also to GCC 5 branch in order to enable distros to pick it up more easily. Andreas Krebbel (13): recog: Increased max number of alternatives. optabs: Fix vec_perm -> V16QI middle end lowering. S/390 Fix secondary reload issue with store/load relative operands. S/390 Add -march/-mtune=z13 option. S/390 Vector base support. Vector base support - testcases S/390 Add vector scalar instruction support. S/390 zvector builtin support. S/390 Add zvector testcases. Testsuite These testcases require disabling hardware vector support on S/390. Testsuite S/390 vector types are only 8 byte aligned. S/390 Vector ABI GNU Attribute. S/390 Invalid vector binary ops gcc/common/config/s390/s390-common.c | 3 + gcc/config.gcc | 26 +- gcc/config/s390/constraints.md | 28 + gcc/config/s390/predicates.md | 12 +- gcc/config/s390/s390-builtin-types.def | 747 ++++++ gcc/config/s390/s390-builtins.def | 2486 ++++++++++++++++++++ gcc/config/s390/s390-builtins.h | 160 ++ gcc/config/s390/s390-c.c | 907 +++++++ gcc/config/s390/s390-modes.def | 61 + gcc/config/s390/s390-opts.h | 1 + gcc/config/s390/s390-protos.h | 17 + gcc/config/s390/s390.c | 2314 +++++++++++++++--- gcc/config/s390/s390.h | 220 +- gcc/config/s390/s390.md | 800 +++++-- gcc/config/s390/s390.opt | 11 + gcc/config/s390/s390intrin.h | 3 + gcc/config/s390/t-s390 | 27 + gcc/config/s390/vecintrin.h | 311 +++ gcc/config/s390/vector.md | 1228 ++++++++++ gcc/config/s390/vx-builtins.md | 2081 ++++++++++++++++ gcc/configure | 36 + gcc/configure.ac | 7 + gcc/optabs.c | 18 +- gcc/recog.h | 2 +- gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11b.c | 1 + gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11c.c | 1 + gcc/testsuite/gcc.target/s390/s390.exp | 18 + gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c | 18 + gcc/testsuite/gcc.target/s390/vector/vec-abi-2.c | 15 + gcc/testsuite/gcc.target/s390/vector/vec-abi-3.c | 101 + gcc/testsuite/gcc.target/s390/vector/vec-abi-4.c | 19 + .../gcc.target/s390/vector/vec-abi-align-1.c | 48 + .../gcc.target/s390/vector/vec-abi-attr-1.c | 18 + .../gcc.target/s390/vector/vec-abi-attr-2.c | 53 + .../gcc.target/s390/vector/vec-abi-attr-3.c | 18 + .../gcc.target/s390/vector/vec-abi-attr-4.c | 17 + .../gcc.target/s390/vector/vec-abi-attr-5.c | 19 + .../gcc.target/s390/vector/vec-abi-attr-6.c | 24 + .../gcc.target/s390/vector/vec-abi-single-1.c | 24 + .../gcc.target/s390/vector/vec-abi-single-2.c | 12 + .../gcc.target/s390/vector/vec-abi-struct-1.c | 37 + .../gcc.target/s390/vector/vec-abi-vararg-1.c | 60 + .../gcc.target/s390/vector/vec-abi-vararg-2.c | 18 + .../gcc.target/s390/vector/vec-clobber-1.c | 38 + gcc/testsuite/gcc.target/s390/vector/vec-cmp-1.c | 45 + gcc/testsuite/gcc.target/s390/vector/vec-cmp-2.c | 38 + .../s390/vector/vec-dbl-math-compile-1.c | 48 + .../gcc.target/s390/vector/vec-genbytemask-1.c | 70 + .../gcc.target/s390/vector/vec-genbytemask-2.c | 46 + .../gcc.target/s390/vector/vec-genmask-1.c | 70 + .../gcc.target/s390/vector/vec-genmask-2.c | 46 + gcc/testsuite/gcc.target/s390/vector/vec-init-1.c | 68 + .../s390/vector/vec-int-math-compile-1.c | 40 + .../gcc.target/s390/vector/vec-scalar-cmp-1.c | 49 + gcc/testsuite/gcc.target/s390/vector/vec-shift-1.c | 108 + gcc/testsuite/gcc.target/s390/vector/vec-sub-1.c | 51 + .../s390/zvector/vec-dbl-math-compile-1.c | 67 + gcc/testsuite/gcc.target/s390/zvector/vec-elem-1.c | 11 + .../gcc.target/s390/zvector/vec-genbytemask-1.c | 21 + .../gcc.target/s390/zvector/vec-genmask-1.c | 24 + gcc/testsuite/gcc.target/s390/zvector/vec-lcbb-1.c | 31 + .../gcc.target/s390/zvector/vec-overloading-1.c | 77 + .../gcc.target/s390/zvector/vec-overloading-2.c | 54 + .../gcc.target/s390/zvector/vec-overloading-3.c | 19 + .../gcc.target/s390/zvector/vec-overloading-4.c | 18 + .../gcc.target/s390/zvector/vec-test-mask-1.c | 25 + gcc/testsuite/lib/target-supports.exp | 3 +- 67 files changed, 12449 insertions(+), 645 deletions(-) create mode 100644 gcc/config/s390/s390-builtin-types.def create mode 100644 gcc/config/s390/s390-builtins.def create mode 100644 gcc/config/s390/s390-builtins.h create mode 100644 gcc/config/s390/s390-c.c create mode 100644 gcc/config/s390/t-s390 create mode 100644 gcc/config/s390/vecintrin.h create mode 100644 gcc/config/s390/vector.md create mode 100644 gcc/config/s390/vx-builtins.md create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-2.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-3.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-4.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-align-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-2.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-3.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-4.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-5.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-attr-6.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-single-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-single-2.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-struct-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-abi-vararg-2.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-clobber-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-cmp-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-cmp-2.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-dbl-math-compile-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-genbytemask-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-genbytemask-2.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-genmask-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-genmask-2.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-init-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-int-math-compile-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-scalar-cmp-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-shift-1.c create mode 100644 gcc/testsuite/gcc.target/s390/vector/vec-sub-1.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-dbl-math-compile-1.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-elem-1.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-genbytemask-1.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-genmask-1.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-lcbb-1.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-overloading-1.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-overloading-2.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-overloading-3.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-overloading-4.c create mode 100644 gcc/testsuite/gcc.target/s390/zvector/vec-test-mask-1.c -- 1.7.9.5