Most of it. And since gcc 2.6 gcc has been basically right (2.5.8 didnt always
get it right). We don't want to use volatile as that generates sucky code all
over. Instead we prod the compiler into the right code in key places. The
sti/cli and other locks also use these kind of things if you look to ensure
temporaries are written back across interrupt locking