asm("\taddl %2, %1\n"
"\tseto %0\n"
"\tmovl %1, %%ecx\n"
"\tshll $8, %%ecx\n"
"\tsarl $31, %%ecx\n"
"\tmovl %1, %%edx\n"
"\tshrl $23, %%edx\n"
"\tandl $1, %%edx\n"
"\tandl $8388607, %1\n"
"\tandl $-8388608, %%ecx\n"
"\torl %1, %%ecx\n"
"\torb %0, %%dl\n"
"\tshlq $32, %%rcx\n"
"\tmovzbl %%dl, %0\n"
"\torq %%rcx, %0\n"
: "=r"(overflow), "+r"(lhs)
: "r"(rhs)
: "cc", "rcx", "edx");