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.

Reply via email to