Hi!
On Wed, Aug 26, 2020 at 10:45:26PM -0400, Michael Meissner wrote:
> * config/rs6000/rs6000.md (FSCALAR): New mode iterator for floating
> point scalars.
We have the long-established SFDF for a very similar thing. So maybe
just call this SFDFTF or SDTF or something?
Alternatively, we have FP for all the floating point modes -- maybe
add a BFP that will then we just the (IEEE) binary floating point modes?
> (Fm): New mode attribute for floating point scalars.
Not happy about this at all. Just make *one* attribute that is the
constraint to use for any mode? And if there are multiple choices for
what constraint to use with some mode, well, hiding that behind a mode
attribute is obfuscation then.
The <Fv> attribute always is "wa" nowadays (I should clean that up some
day, heh). And <Ff> is either "f" or "d", but those two constraints are
identical these days.
I have no idea what "F" means? (Or "m"!)
> (s<minmax><mode>): Add support for the ISA 3.1 IEEE 128-bit
> minimum and maximum instructions.
> (s<minmax><mode>3_vsx): Add support for the ISA 3.1 IEEE 128-bit
> minimum and maximum instructions.
> +/* Macro whether the float128 min/max instructions are enabled. */
> +#define FLOAT128_IEEE_MINMAX_P(MODE) \
> + (TARGET_POWER10 && TARGET_FLOAT128_HW && FLOAT128_IEEE_P (MODE))
This is a horrible name. It is about the minmax*c* insns. And the "_P"
is wrong (this macro is not checking if the mode is a minmax, whatever
that would mean!)
> +;; Constraints to use for scalar FP operations
> +(define_mode_attr Fm [(SF "wa")
> + (DF "wa")
> + (TF "v")
> + (KF "v")])
You miss a lot of context here... This of course is *not* for all
scalar FP ops. Ah, so the "m" is for "minmax" I guess.
> (define_insn "*s<minmax><mode>3_vsx"
> - [(set (match_operand:SFDF 0 "vsx_register_operand" "=<Fv>")
> - (fp_minmax:SFDF (match_operand:SFDF 1 "vsx_register_operand" "<Fv>")
> - (match_operand:SFDF 2 "vsx_register_operand" "<Fv>")))]
> + [(set (match_operand:FSCALAR 0 "vsx_register_operand" "=<Fm>")
> + (fp_minmax:FSCALAR
> + (match_operand:FSCALAR 1 "vsx_register_operand" "<Fm>")
> + (match_operand:FSCALAR 2 "vsx_register_operand" "<Fm>")))]
> "TARGET_VSX && TARGET_HARD_FLOAT"
> {
> + if (FLOAT128_IEEE_P (<MODE>mode))
> + return "xs<minmax>cqp %0,%1,%2";
Nope. Since you need to handle this with completely separate code
anyway, just make it a separate instruction pattern please. And there
is no need for a define_expand for it, so you can just leave that one
intact as-is.
Segher