Christophe Lyon <christophe.l...@linaro.org> writes: > On Mon, 30 Sep 2019 at 17:24, Richard Sandiford <richard.sandif...@arm.com> > wrote: > > Richard Sandiford <richard.sandif...@arm.com> writes: > > The aarch64_vector_pcs handling in > aarch64_hard_regno_call_part_clobbered > > checks whether the mode might be bigger than 16 bytes, since on SVE > > targets the (non-SVE) vector PCS only guarantees that the low 16 bytes > > are preserved. But for multi-register modes, we should instead test > > whether each single-register part might be bigger than 16 bytes. > > (The size is always divided evenly between registers.) > > > > The testcase uses XImode as an example where this helps. > > > > Tested on aarch64-linux-gnu (with and without SVE). OK to install? > > > > Richard > > > > > > 2019-09-10 Richard Sandiford <richard.sandif...@arm.com> > > > > gcc/ > > * config/aarch64/aarch64.c > (aarch64_hard_regno_call_part_clobbered): > > For multi-registers modes, test how big each register part is. > > > > gcc/testsuite/ > > * gcc.target/aarch64/torture/simd-abi-8.c: New test. > > I've now applied this as r276305. > > > > Hi Richard, > > I've noticed that the new test fails on aarch64_be:
Bah, yes, sorry. Here's what I installed after testing on aarch64-linux-gnu and aarch64_be-elf. As well as fixing the BE failure, it tighten the test so that it doesn't allow saving and restoring 128-bit vectors as Q registers. Thanks, Richard 2019-10-04 Richard Sandiford <richard.sandif...@arm.com> gcc/testsuite/ * gcc.target/aarch64/torture/simd-abi-8.c: Use -mlittle-endian. Check that there are no Q register saves or restores. Index: gcc/testsuite/gcc.target/aarch64/torture/simd-abi-8.c =================================================================== --- gcc/testsuite/gcc.target/aarch64/torture/simd-abi-8.c 2019-09-30 16:23:21.547518094 +0100 +++ gcc/testsuite/gcc.target/aarch64/torture/simd-abi-8.c 2019-10-04 14:27:26.298598005 +0100 @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-std=gnu99" } */ +/* { dg-options "-std=gnu99 -mlittle-endian" } */ /* { dg-skip-if "" { *-*-* } { "-O0" } { "" } } */ #include <arm_neon.h> @@ -18,3 +18,5 @@ g (int64x2x4_t *ptr) /* { dg-final { scan-assembler-times {\tld1\t} 1 } } */ /* { dg-final { scan-assembler-times {\tst1\t} 1 } } */ +/* { dg-final { scan-assembler-not {\tld[pr]\tq} } } */ +/* { dg-final { scan-assembler-not {\tst[pr]\tq} } } */