https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65342
--- Comment #8 from Iain Sandoe <iains at gcc dot gnu.org> --- BTW, is: (define_insn "movdi_low_st" [(set (mem:DI (lo_sum:DI (match_operand:DI 1 "gpc_reg_operand" "b,b,b") (match_operand 2 "" "Y,,"))) (match_operand:DI 0 "gpc_reg_operand" "r,r,*!d"))] "TARGET_MACHO && TARGET_64BIT" "* { switch (which_alternative) { case 0: return \"std %0,lo16(%2)(%1)\"; case 1: { output_asm_insn (\"la %1,lo16(%2)(%1)\", operands); ^^^^^ permitted? (i.e. modifying %1, which is an input operand) return (\"std %0,0(%1)\"); } case 2: return \"stfd %0,lo16(%2)(%1)\"; default: gcc_unreachable (); } }" [(set_attr "type" "store") (set_attr "length" "4")])