https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63568
--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> --- True. E.g. on my x86_64 i7 Nehalem I see (using ./cc1 -quiet -O2 qq.c -mbmi) andn %edi, %edx, %edi andl %edx, %esi movl %edi, %eax orl %esi, %eax ret for return (a & ~m) | (b & m); and xorl %edi, %esi movl %edi, %eax andl %esi, %edx xorl %edx, %eax ret for return a ^ ((a ^ b) & m);