or1k: Initial support for FPU
authorStafford Horne <shorne@gmail.com>
Sun, 21 Jul 2019 21:01:59 +0000 (21:01 +0000)
committerStafford Horne <shorne@gcc.gnu.org>
Sun, 21 Jul 2019 21:01:59 +0000 (21:01 +0000)
commit44080af98edf7d8a59a94dd803f60cf0505fba34
tree4ad7a9f769f0596da8bb827b2b3e4b2e11c71002
parent1e2e81c1a36a51f4660d30a0278366a8a0727a9d
or1k: Initial support for FPU

This adds support for OpenRISC hardware floating point instructions.
This is enabled with the -mhard-float option.

Double-prevision floating point operations work using register pairing as
specified in: https://openrisc.io/proposals/orfpx64a32.  This has just been
added in the OpenRISC architecture specification 1.3.
This is enabled with the -mdouble-float option.

Not all architectures support unordered comparisons so an option,
-munordered-float is added.

Currently OpenRISC does not support sf/df or df/sf conversions, but this has
also just been added in architecture specification 1.3.

gcc/ChangeLog:

* config.gcc (or1k*-*-*): Add mhard-float, mdouble-float, msoft-float
and munordered-float validations.
* config/or1k/constraints.md (d): New register constraint.
* config/or1k/predicates.md (fp_comparison_operator): New.
* config/or1k/or1k.c (or1k_print_operand): Add support for printing 'd'
operands.
(or1k_expand_compare): Normalize unordered comparisons.
* config/or1k/or1k.h (reg_class): Define DOUBLE_REGS.
(REG_CLASS_NAMES): Add "DOUBLE_REGS".
(REG_CLASS_CONTENTS): Add contents for DOUBLE_REGS.
* config/or1k/or1k.md (type): Add fpu.
(fpu): New instruction reservation.
(F, f, fr, fi, FI, FOP, fop): New.
(<fop><F:mode>3): New ALU instruction definition.
(float<fi><F:mode>2): New conversion instruction definition.
(fix_trunc<F:mode><fi>2): New conversion instruction definition.
(fpcmpcc): New code iterator.
(*sf_fp_insn): New instruction definition.
(cstore<F:mode>4): New expand definition.
(cbranch<F:mode>4): New expand definition.
* config/or1k/or1k.opt (msoft-float, mhard-float, mdouble-float,
munordered-float): New options.
* doc/invoke.texi: Document msoft-float, mhard-float, mdouble-float and
munordered-float.

From-SVN: r273650
gcc/ChangeLog
gcc/config.gcc
gcc/config/or1k/constraints.md
gcc/config/or1k/or1k.c
gcc/config/or1k/or1k.h
gcc/config/or1k/or1k.md
gcc/config/or1k/or1k.opt
gcc/config/or1k/predicates.md
gcc/doc/invoke.texi