rs6000: Generate _Decimal128 to _Decimal32 hardware conversion instructions
commit8a8c2573568aa17ada6163f90991701bc4470976
authorPeter Bergner <bergner@linux.ibm.com>
Sat, 18 Jul 2020 02:06:30 +0000 (17 21:06 -0500)
committerPeter Bergner <bergner@linux.ibm.com>
Sat, 18 Jul 2020 02:11:23 +0000 (17 21:11 -0500)
tree48fc8c8aa8f3469c9d424545ac2345184d52865b
parentab660b01c33ece8d73445c26ed2e7ba2471c70db
rs6000: Generate _Decimal128 to _Decimal32 hardware conversion instructions

We do not currently generate hardware conversion instructions when
converting from _Decimal128 to _Decimal32.  There is no one instruction
that does the conversion, so we currently call the __dpd_trunctdsd2
lib function to do the conversion for us.  However, there is a short
sequence of dfp hardware instructions that will do the conversion
correctly.

2020-07-17  Peter Bergner  <bergner@linux.ibm.com>

gcc/
PR target/92488
* config/rs6000/dfp.md (trunctdsd2): New define_insn.
* config/rs6000/rs6000.md (define_attr "isa"): Add p9.
(define_attr "enabled"): Handle p9.

gcc/testsuite/
PR target/92488
* gcc.target/powerpc/convert-fp-128.c (bl, drsp, drdpq): Update counts.
(__dpd_trunctdsd2): Make conditional on !hard_dfp.
(__dpd_extendsddd2, __dpd_extendsdtd2, __dpd_truncddsd2,
__dpd_extendddtd2, __dpd_trunctddd2): Use !hard_dfp.
* gcc.target/powerpc/pr92488.c: New test.
gcc/config/rs6000/dfp.md
gcc/config/rs6000/rs6000.md
gcc/testsuite/gcc.target/powerpc/convert-fp-128.c
gcc/testsuite/gcc.target/powerpc/pr92488.c [new file with mode: 0644]