https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49611
--- Comment #16 from David <gccbugzilla at limegreensocks dot com> --- I've tried it now and it seems to do good things. This code: int main(int argc, char *argv[]) { char x; asm("setc" : "=@ccc"(x)); if (!x) return 6; else return argc; } produces this output (-O3): movl $6, %eax /APP # 6 "./r.cpp" 1 setc # 0 "" 2 /NO_APP cmovc %ebx, %eax addq $32, %rsp popq %rbx ret Although a minor variation (change "return argc" to "return 7") ends up doing setc+cmpb, so it's not a perfect solution. Still, if I were Richard, I'd be closing this bug. If someone has optimization issues with his solution, that's a new bug.