On Mon, Mar 03, 2008 at 11:08:24PM -0500, Robert Dewar wrote: > Segher Boessenkool wrote: > >>>The Linux kernel, and probably some user-space applications and > >>>libraries > >>>as well, depend on GCC guaranteeing (a variant of) the following: > >>> "any access to a naturally aligned scalar object in memory > >>> that is not a bit-field will be performed by a single machine > >>> instruction whenever possible" > >>>and it seems the current compiler actually does work like this. > >>Seems a pity to have the bit-field exception here, why is it there? > > > >Bit-fields will generally require a read-modify-write instruction, > >and I don't think we actually guarantee to generate one right now. > > Well if they do require more than one instruction, the rule has > no effect ("whenever possible"). If they can be done in one > instruction (as on the x86), then why not require this, why > make a special case?
Because for the consumers whether the operation is done using a single machine instruction is uninteresting. What matters is if that instruction is atomic. x86 read-modify-write instructions aren't atomic, unless lock prefix is used (and we definitely don't want to use lock prefix on all bitfield accesses) - it actually means there are separate read, modify and write uops. Jakub