https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82701
--- Comment #1 from H. Peter Anvin <hpa at zytor dot com> ---
I just stumbled onto this technique somewhat by accident:
union dw {
uint64_t q;
uint32_t l[2];
};
union dw aa, bb;
aa.q = a;
bb.q = b;
asm("add %2,%0; adc %3,%1"