Цитата Сообщение от valker Посмотреть сообщение
заметил, что иногда этот компилятор генерит лишние команды пересылки между регистрами. А про какую "структуру" ничего нет?
Ну это следствие недостаточно гибкой модели распределения ролей регистров имхо.

Про структуру- надо глянуть как он генерит switch/case конструкции при разном количестве ветвей (проверки или таблица и где порог принятия решения) и как склеивает ветки если надо, какие конструкции лучше использовать.
Например в вышеуказанном примере var = var + 1; дало далеко не оптимальный код. Вот надо глянуть, что будет при var += 1; и var++/++var. Плюс как он делает постфиксный/префиксный инкремент если нужен результат (ну префиксный это понятно...).
Может ли сам делать подстановку тела процедуры в код вместо вызова (например для memcpy). Как выворачивает целочисленное умножение (что сдвигами, а что вызовом) или деление (не уверен что его вообще сдвигами делает). Как делается вызов функции по указателю.


Цитата Сообщение от valker Посмотреть сообщение
В контексте использования С-компилятор + эмулятор хорошо бы какой-нибудь профайлер придумать, чтобы узкие места обнаруживать и на ассемблере переписывать.
По поводу эмулятора- легко можно написать программку конверсии итогового хекс-дампа в снапшот. Формат там такой
[Sn][Len][00][data][crc]

Sn- неизвестно... наверное описание области прошивки(?)
Len- количество следующих за ним байт (включая 00 и crc)
crc- подбирается таким образом, что сумма всех полей, начиная с len и до конца заканчивается на 255.
Для строк типа S2 первые 2 байта data содержат адрес в big endian формате

Ты C-spy щупал? он только с железяками дружит или к нему можно прикрутить программный эмуль?