https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79197
--- Comment #8 from Michael Meissner <meissner at gcc dot gnu.org> --- I agree the expander should call gpc_reg_operand and not reg_operand. This is due to the fact that on PowerPCs with separate floating point registers, SFmode is represented internally as DFmode when it is in the floating point/vector registers (i.e. my change on January 4th, 2017). I evidently missed the expander. The history is originally we had a define_expand and three separate insns, one in rs6000.md that handled the non-VSX case, one in spe.md, and one in vsx.md that handled VSX, and it had a common insn for DF, V2DF, and V4SF modes. We later moved the scalar processing to rs6000.md. However, since spe.md has its own unsigned fix insns, and it uses wildly different constraints, etc. we need to keep a separate define_expand, and two define_insns (in rs6000.md and spe.md). Note, I have no way of testing SPE, other than by hand inspection of the assembly code.