Simon Thum wrote:

> > newtail = (oldtail + 1) % QUEUE_SIZE; 
> > miEventQueue.tail = newtail;
> > 
> > becoming
> > 
> > miEventQueue.tail++;
> > miEventQueue.tail |= QUEUE_SIZE - 1;

Er, shouldn't this be "&=" ?

> I don't think a compiler should be doing this to a non-local store. It
> could probably be considered a bug. C doesn't really have a memory model
> but few rules likely to forbid this. I didn't check, but I'd be highly
> surprised by this being legal.

Unless an lvalue is declared "volatile", the compiler is free to
generate code which modifies it as and when it sees fit, so long as it
has the correct value "in the end". In the meantime, it can freely
store arbitrary data there if it wishes.

This is why the "volatile" keyword was added to the ANSI C standard:
so that the compiler could optimise memory access as it saw fit, while
providing an opt-out for the cases where "intermediate" values are
significant (signals, interrupts, memory-mapped I/O, threads, etc).

-- 
Glynn Clements <[EMAIL PROTECTED]>
_______________________________________________
xorg mailing list
xorg@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/xorg

Reply via email to