> volatile unsigned char y; > void f () > { > y |= 32; > } > > I cannot see a reason not to use "orb $32,y" here instead of a three > steps read/modify/write operation. Is this only a missed optimization?
No, it's purposeful. The idea was that this is completely equivalent to y = y | 32; That does two memory operations and it's volatile, so we want to as well. Now in some sense, so does "orb $32,y", but we want to play it safe. For almost all purposes, saying "volatile" means to turn off all optimizations involving that object and I don't think we want to change that at this point because of the possible damage to legacy code.