diff options
author | Ilya Leoshkevich <iii@linux.ibm.com> | 2020-12-10 15:43:59 +0100 |
---|---|---|
committer | Ilya Leoshkevich <iii@linux.ibm.com> | 2021-03-08 14:41:39 +0100 |
commit | 3cb8aab390ccf31e4581863b080db30c6735e51e (patch) | |
tree | 94ad54a15d2535fb4ebac9feee12414da40f4556 /gcc/lra-constraints.c | |
parent | 8a6a62614a8ae4544770420416d1632d6c3d3f6e (diff) | |
download | gcc-3cb8aab390ccf31e4581863b080db30c6735e51e.zip gcc-3cb8aab390ccf31e4581863b080db30c6735e51e.tar.gz gcc-3cb8aab390ccf31e4581863b080db30c6735e51e.tar.bz2 |
IBM Z: Fix usage of "f" constraint with long doubles
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 <iii@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.
gcc/testsuite/ChangeLog:
2020-12-14 Ilya Leoshkevich <iii@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.
Diffstat (limited to 'gcc/lra-constraints.c')
0 files changed, 0 insertions, 0 deletions