В любом случае доверять такие "ответственные" операции сишному компилятору не стоит, а уж тем более при оптимизации. Начиная с какой то версии 4.х.х в GCC появилась возможность устанавливать аттрибуты оптимизации для отдельных функций. Не знаю, кому как, но фича весьма и весьма полезная. Делаем вот так:
Код
void Move_interrupts(void) __attribute__ ((optimize(0)));
и можем быть
почти уверены, что защитили код функции он извратных посягательств оптимизатора

---
Пардон, забыл, что регистры объявлены как volatile и тем самым защищены уже. Просто я с этой оптимизацией до конца не разобрался, и на мой взгляд, gcc параноик, скока не отключай оптимизацию, он все равно будет оптимизировать. Точно, маньяк

И меня параноиком сделал. Я чуть ли не каждую переменную с volatile объявляю :D
Сообщение отредактировал artymen - Nov 8 2010, 18:18