SDCC - Small Device C Compiler
В компилятор SDCC (начиная с ревизии #6588), добавлен новый регистровый оптимизатор, который генерит более компактный код z80.
По заявлянию автора нового оптимизатора Philipp Klaus Krause, в теперешнем виде, этот оптимизатор уже сравнялся по размеру генерируемого кода, с компилером HITECH-C 7.80PL2
(Также уже запланированы всячиские новые улучшения для оптимизатора.)
Сам оптимизатор был запланирован уже давно.
SDCC - Small Device C Compiler
В SDCC теперь есть поддержка работы с Си данными, в разных банках памяти. Реализовано это через стандартный Embedded C механизм "Named address spaces".
Пример:
void set_bank0(void); // функция включения банка 0
void set_bank1(void); // функция включения банка 1
__addressmod set_bank0 space_bank0; // "Именованное адресное пространство" space_bank0, которое использует ф-цию set_bank0
__addressmod set_bank1 space_bank1; // "Именованное адресное пространство" space_bank1, которое использует ф-цию set_bank1
space_bank0 int x; // int в адресном пространстве space_bank0
space_bank1 int* y; // указатель на int в адресном пространстве space_bank1
space_bank0 int *space_bank1 z; // указатель в адресном пространстве space_bank1, который указывает на на int, в адресном пространстве space_bank0
Суть метода:
SDCC автоматически вызывает необходимую функцию при доступе (чтение или запись) к переменной. (Функция должна подключить нужную банку в адресное пространство CPU. )
Manual.
Ветка обсуждения из sdcc-user mail list (есть пример кода).