А вот еще: Способ решения проблемы тут один - использовать инструкцию xor, которая обеспечивает атомарный доступ в любом случае, даже если требуется изменить большое битовое поле.
Он не один - ведь предыдущие способы могут использоваться тоже. А вот про то, что промежуточные (после первого xor) значения в полях SFR могут приводить к нежелательным эффектам, вы не упомянули.