------- Additional Comments From bjoern dot m dot haase at web dot de
2005-10-01 18:46 -------
The question merely is to find out if this is a bug / a bug of the
documentation or no bug at all.
After the fix for PR22000 the actual issue I had stepped over originally is
indeed fixed: The protection of volatile *variables* now indeed works. The
question that is still open, however, is: Is gcc generally allowed to schedule
statements across asm volatile statements? E.g. look at an hypothetical
example where someone would, e.g. like to disable irqs for speed reasons.
asm volatile ("/* disable irq */" : : ); // 1
for (i=0; i < 1000; i++) // 2
{
a [i] *= 3;
}
asm volatile ("/* enable irq */" : : ); // 3
After reading the specs "In addition, GCC will not reschedule instructions
across a volatile `asm' instruction.", I still think that we either
1) still have a bug or
2) have a documentation that "caused at least some people to understand it
differently from than it was meant to be understood" (saying this in order to
avoid the terminus documentation bug).
In case that scheduling is meant to be allowed if no volatile variable access
is concerned, we probably would need to change the present implementation of
irq disabling in the avr-libc's header files.
Bjoern
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24165