Цитата(Rst7 @ Dec 2 2008, 10:25)

Все понятно. Я так и предполагал, что это векторизация, не знал только, что можно отключить.
Ну так для AVR можно сразу выключить эту оптимизацию, потому как нет нативной поддержки в системе комманд. Это будет самая грамотная настройка

Вот это одна из причин почему я не перелезаю с gcc3.4.6 на 4.x.x.
Почему-то когда gcc стал переползать на 4.x.x в каждой новой версии свои приколы
и без хорошего знания "спецключиков" и без проверки "а что же получилось..."
работать сложно.
Цитата
Плохеет. Спору нет.
Теперь давайте я попробую проявить телепатические способности

Приведенный код - это, видимо, разнообразная печаталка символов на графический дисплей? Если да, то имеет смысл развернуть циклы для ускорения, все-таки это самое узкое место в гуйне. А при развороте проигрыша у IAR'а - ну отсилы несколько процентов. Что на общем фоне повышения производительности - так и не заметно.
Не угадали, это обмен по UART или I2C на довольно большой скорости (~350Кбит/c)
в условиях довольно жесткого реалтайма (такт 500 мкс.) и копирование нужно сделать
в пределах 1 такта и еще много чего...
конечно циклы можно было и подразвернуть, но обошлось и так причем с некоторым запасом...
Цитата
А вот другого плана алгоритм - я тут попробовал собрать свою процедуру md5, оптимизированную под AVR... Гнусь сдался по всем параметрам - по размеру кода, по скорости, по требуемому стеку (собственно, взаимосвязь проста - ниасилил разложить все что можно в регистрах, полез в стек и сдался).
Да, бывает что гнусь дуреет на алгоритмах когда нужно много регистров,
ну или на сложной арифметике какой... и тогда нужно бить выражения на части.
Но пример конечно был про то что не всегда он так уж плох, а иногда очень
даже лучше..
Цитата(ARV @ Dec 2 2008, 13:40)

а смысл? и так понятно, что по размеру это существенно оптимальнее... а вот сравнить с результатом IAR-а - это интересно, ведь с высказывания, что все началось... вот и поглядеть, плохеет ли ему в этом случае, или нет.
Господа "оптимизаторы", я по-моему сразу дал понять что разговор о скорости
выполнения при сохранении разумных размеров...
Вынос проверок за циклы, вложенные(двоичный поиск) if вместо switch(16бит) итд,
в данном конкретном случае только для достижения скорости.
Ну и конечно все переменные которые участвуют в этом коде локальные.