https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126503
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The reason why it works fine on x86_64/i686 is that those targets have the uaddc5_optab/usubc5_optab optabs for the limb mode, so they use _11 = .USUBC (0, _8, _9); not just twice in the loop doing the negation, but also _18 = MEM <unsigned long> [(_BitInt(257) *)&a + 32B]; _19 = (<unnamed-signed:1>) _18; _20 = (<unnamed-unsigned:1>) _19; _21 = (unsigned long) _20; _22 = .USUBC (0, _21, _10); _23 = IMAGPART_EXPR <_22>; _24 = REALPART_EXPR <_22>; _25 = (<unnamed-signed:1>) _24; _26 = (unsigned long) _25; MEM <unsigned long> [(unsigned _BitInt(400) *)&<retval> + 32B] = _26; after the loop.
