https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70052

--- Comment #5 from Michael Meissner <meissner at gcc dot gnu.org> ---
The intention of the "j" operand is to provide an alternative that can easily
set the floating point value to 0 via XXLXOR.  If decimal64 0.0 is not all 0
bits, then we shouldn't allow that alternative.

Something like:

(define_mode_attr "zero" [(SF "j")
                          (DF "j")
                          (TF "j")
                          (IF "j")
                          (KF "j")
                          (SD "wn")
                          (DD "wn")
                          (TD "wn")])

And then replace the "j" in :FMOVE32, :FMOVE64, and :FMOVE128 move patterns
with <zero>.

Fortunately, since rs6000_emit_move doesn't do anything special for decimal
constants, and always loads them up, you don't have to edit that function.

The "wn" constraint will always be NO_REGS.  It is made for use in
mode_iterators and mode_attrs for this type of case.

Reply via email to