https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83832
--- Comment #2 from Oleg Endo <olegendo at gcc dot gnu.org> --- bset, bclr, bnot insns can be utiized with inline asm: asm volatile ("bclr %1,%0.B" : "+Q" (*(volatile unsigned char*)byte_addr) : "ir" (bitnum) : "memory"); When the bitnum is not a constant and passed in a register, it should be taken into account that only the lower 3 bits will be used, i.e. it effectively does an "bitnum & 3" operation. It should be encoded in the pattern so that explicit ands get eliminated.