https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104292
--- Comment #1 from Avi Kivity <avi at scylladb dot com> --- btw, I see that the equivalent bool_and generates optimal code. bool_and(bool, bool): movl %esi, %eax andl %edi, %eax ret Perhaps bool is written with the expectation that any non-zero value is true? But aren't non-zero values other than 1 undefined behavior?