Да, после красивого ARM кода компиляторов под кортексы местный GNUтый компилер выглядит весьма деревянным.
А именно - работа с регистром страниц памяти.
Если размер памяти scratchpad (то есть оперативки) не превышает 256 байт - то есть одной странички - то всё в порядке, переключать page регистр не надо.
Но если больше 256 байт - то появляется page регистр(ы), состояние которого компилятором не отслеживается, а просто тупо переписывается каждый раз при обращении к памяти:
Код
movi r13,_hi(16)
export r20,_lo(16)
movi r13,_hi(17)
export r22,_lo(17)
movi r13,_hi(17)
export r14,_lo(17)
movi r13,_hi(11)
import r0,_lo(11)
r13 - регистр страницы.
Совершенно лишние три команды, упорно запихивающие одно и то же значение...
Оптимизация Os.
Это здорово увеличивает размер кода, что вообще-то противоречит самой идее компактного процессора.
Неужели так трудно было допилить компилер?
ЗЫ: что-то уже хочется плисину с нормальным хардовым армом, для которого можно писать оптимальный код в кейле или иаре, а не париться с недопроцессорами и такими-же недокомпиляторами для них.
Мелкие кортексы есть у Microsemi, но их или не достать, или дорогие, собаки...