On 3/4/21 3:08 PM, Ilya Leoshkevich wrote: > v1: https://gcc.gnu.org/pipermail/gcc-patches/2021-January/563799.html > v1 -> v2: > - Handle constraint modifiers, use AR constraint instead of R, add > testcases for & and %. > > v2: https://gcc.gnu.org/pipermail/gcc-patches/2021-January/564380.html > v2 -> v3: > - The main prereq is now committed: > https://gcc.gnu.org/pipermail/gcc-patches/2021-March/566237.html > - Dropped long-double-asm-abi.c test, because its prereq is not > approved (yet): > https://gcc.gnu.org/pipermail/gcc-patches/2021-March/566218.html > - Removed superfluous constraint pointer increment. > > > > After switching the s390 backend to store long doubles in vector > registers, "f" constraint broke when used with the former: long doubles > correspond to TFmode, which in combination with "f" corresponds to > hard regs %v0-%v15, however, asm users expect a %f0-%f15 pair. > > Fix by using TARGET_MD_ASM_ADJUST hook to convert TFmode values to > FPRX2mode and back. > > gcc/ChangeLog: > > 2020-12-14 Ilya Leoshkevich <i...@linux.ibm.com> > > * config/s390/s390.c (f_constraint_p): New function. > (s390_md_asm_adjust): Implement TARGET_MD_ASM_ADJUST. > (TARGET_MD_ASM_ADJUST): Likewise. > * config/s390/vector.md (fprx2_to_tf): Rename from *fprx2_to_tf, > add memory alternative. > (tf_to_fprx2): New pattern. > > gcc/testsuite/ChangeLog: > > 2020-12-14 Ilya Leoshkevich <i...@linux.ibm.com> > > * gcc.target/s390/vector/long-double-asm-commutative.c: New > test. > * gcc.target/s390/vector/long-double-asm-earlyclobber.c: New > test. > * gcc.target/s390/vector/long-double-asm-in-out.c: New test. > * gcc.target/s390/vector/long-double-asm-inout.c: New test. > * gcc.target/s390/vector/long-double-asm-matching.c: New test. > * gcc.target/s390/vector/long-double-asm-regmem.c: New test. > * gcc.target/s390/vector/long-double-volatile-from-i64.c: New > test.
Ok. Thanks! Andreas