https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110304
--- Comment #7 from cqwrteur <unlvsur at live dot com> --- for example lets assume you design the interface with both bool carryin and bool * carryout char unsigned carryin=foo(); bool carryout __builtin_addcl(a,b,carryin,&carryout);//carryin will do implicit cast for carryin here, therefore there is an extra comparison instruction. carryin will implicit cast to bool clang's interface does not do any implicit cast for carryin Get Outlook for Android<https://aka.ms/AAb9ysg> ________________________________ From: jakub at gcc dot gnu.org <gcc-bugzi...@gcc.gnu.org> Sent: Monday, June 19, 2023 2:22:10 AM To: unlv...@live.com <unlv...@live.com> Subject: [Bug c++/110304] __builtin_adcs missing and jakub you miss the point of builtin_adcb https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110304 --- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The reason for | rather than + is clang compatibility with its misdesigned interface. It never returns 2 as carry-out, even if you add 0xffffffffU, 0xfffffffU and 0xfffffffU. But, if pattern matching can prove the carry-in is only in [0, 1] range, then all of +, | or ^ act the same and if target provides uaddc5/usubc5 patterns, it will be pattern matched. -- You are receiving this mail because: You are on the CC list for the bug. You reported the bug.