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.