Чего? Вы видели определение регистров процессора в заголовочных
фалах? Там стоит __IO aka volatile. И ни один компилятор не имеет
права выкинуть/оптимизировать доступ к этим регистрам на любом
уровне оптимизации. Мои примеры скомпилированы на максимальной
оптимизации в IAR. Ну это же азы эмбеддерства, даже удивительно,
что такие вещи объяснять надо.