реклама на сайте
подробности

 
 
> WinAVR-20081205 и тенденции, С каждым релизом WinAVR размер кода растет :(
ARV
сообщение Feb 12 2009, 07:19
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Я знаю, что на этом форуме присутствуют люди, которые не только глубоко знают GCC и, в частности, WinAVR, но и участвуют в той или иной мере в совершенствовании этих продуктов. Поэтому в первую очередь мой вопрос к ним. Я понимаю, что мои вопросы почти риторические, но беспокойство от них у меня сильное...

Скачал WinAVR-20081205 (до этого был 20080610), провел тест на проекте для AT90CAN128. Было 18204 байт результрующего кода (WinAVR 20080610), стало 18350 байт. Исходник не менял, естественно, как и все параметры сборки проекта. Ранее при переходе с 20080411 так же было замечено увеличение итогового кода для проекта. То есть я делаю вывод, что от релиза к релизу GCC генерирует все менее и менее компактный код для AVR (про другие платформы не скажу, ибо не пользуюсь). Неоднократно были замечены всякие странные фокусы при сохранении регистров в прологе функций, некоторые "чудеса" оптимизации и "странности" в обработчиках прерываний (заглядываю на AVR Freaks)...

Что это? Целенаправленное стремление снизить качество GCC для AVR, косвенные следствия каких-то неведомых мне улучшений, непредвиденные последствия исправления багов или что-то еще? Казалось бы, добавилась поддержка новых микроконтроллкров - и на тебе: поддержка старых ухудшилась... Чего ждать в будущем? Единственный качественный бесплатный компилятор - неужели он обречен?!

Может быть, есть какие-то рекомендации по борьбе с такими особенностями? скажем, какие-то ключи компилятора или еще что-то, что позволит получить хотя бы прежний код с новым компилятором?

P.S. Пожалуйста, не надо ответов типа "хотите бесплатно - жрите, что дают!"... Ведь смысл бесплатного продукта не в том, чтобы унизить и заставить жрать помои...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alx2
сообщение Feb 12 2009, 10:32
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(ARV @ Feb 12 2009, 12:19) *
Было 18204 байт результрующего кода (WinAVR 20080610), стало 18350 байт.
Хочу заметить, что размер кода - не единственно возможный критерий качества оптимизации. Может может там с оптимизацией по скорости выполнения стало лучше?
Цитата(ARV @ Feb 12 2009, 13:25) *
с моей точки зрения, сохранение чего бы то ни было при входе в main() для AVR без ОС - это вообще никогда не нужно!
логичнее было бы сделать опцию именно для включения сохранения контекста main()
Не согласен. Во-первых, для указания компилятору, что из функции (любой, а не только main!) никогда не выполняется возврат, существует специальный атрибут. во-вторых, сохранение регистров, которые потом не будут нужны, не нарушает работу программы, а лишь делает код не таким оптимальным, как мог бы. Обратное же (несохранение регистров, которые впоследствии нужны) нарушит работу программы. Поэтому дефолтным поведением должно быть именно сохранение регистров (если специально не указано, что функция noreturn).
Цитата(ARV @ Feb 12 2009, 14:33) *
в конкретно моем случае я перебрал все опции оптимизации, затрагивающие циклы, включая и выключая их - в лучшем случае изменения размеров не обнаружено
Предлагаю гвоворить более конкретно: вот пример кода, вот результат компиляции gcc такой-то версии с такими-то опциями, а вот - другой версии. Или с другими опциями. Вот анализ арботы оптимизатора. А так - совершенно беспредметный разговор получается...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 12 2009, 15:27
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(alx2 @ Feb 12 2009, 12:32) *
Поэтому дефолтным поведением должно быть именно сохранение регистров (если специально не указано, что функция noreturn).
Буквально сегодня добавил в mspgcc проверку, есть ли выход из функции. Если выхода нет - не сохраняются регистры и не генерится эпилог. Т.е. этакий автоматический __attribute__((noreturn)). Судя по листингу - получается. Даже для main(). Не знаю насколько все изменилось в gcc 4.x по сравнению с 3.х, но можно предположить, что возможность такой проверки осталась - ведь компилятор как-то умеет генерить предупреждения об отсутствии return в функции, возвращающей значения и о наличии точек выхода в функции с атрибутом noreturn. Остается дописать по одному условию в функции генерации пролога и эпилога.

Цитата(ARV @ Feb 12 2009, 14:17) *
это предел? еще хачу! smile.gif
smile.gif http://electronix.ru/forum/index.php?s=&am...st&p=393663


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ARV   WinAVR-20081205 и тенденции   Feb 12 2009, 07:19
- - _Pasha   Когда я "находил 10 отличий", дело было ...   Feb 12 2009, 07:54
|- - ARV   Цитата(_Pasha @ Feb 12 2009, 10:54) Когда...   Feb 12 2009, 08:25
|- - _Pasha   Цитата(ARV @ Feb 12 2009, 12:25)  и, кста...   Feb 12 2009, 08:57
- - ARV   в конкретно моем случае я перебрал все опции оптим...   Feb 12 2009, 09:33
- - ReAl   Вот что интересно - на небольшом проекте с scmRTOS...   Feb 12 2009, 09:45
|- - ARV   Цитата(ReAl @ Feb 12 2009, 12:45) Похоже,...   Feb 12 2009, 09:49
||- - demiurg_spb   Кстати, на младших контроллерах очень полезно вклю...   Feb 12 2009, 09:52
||- - ARV   Цитата(demiurg_spb @ Feb 12 2009, 12:52) ...   Feb 12 2009, 10:00
||- - demiurg_spb   Цитата(ARV @ Feb 12 2009, 13:00) а в чем ...   Feb 12 2009, 10:07
|- - MrYuran   Цитата(ReAl @ Feb 12 2009, 12:45) Похоже,...   Feb 12 2009, 09:52
- - MrYuran   Цитата(ARV @ Feb 12 2009, 10:19) Было 182...   Feb 12 2009, 09:47
|- - ARV   Цитата(MrYuran @ Feb 12 2009, 12:47) Итог...   Feb 12 2009, 09:54
- - _Pasha   Я добавил последний AVR-libc  в 20071221. Держу на...   Feb 12 2009, 09:56
- - ARV   на моем проекте -mshort-calls вообще не сработала ...   Feb 12 2009, 10:24
|- - _Pasha   Цитата(ARV @ Feb 12 2009, 13:24) на моем ...   Feb 12 2009, 10:29
|- - demiurg_spb   У меня странная проблема на большом проекте 60КБ и...   Feb 12 2009, 10:45
|- - ReAl   Цитата(Сергей Борщ @ Feb 12 2009, 17:27) ...   Feb 12 2009, 21:34
- - ARV   1. в настоящее время меня интересует качество опти...   Feb 12 2009, 10:55
- - aesok   Цитата(ARV @ Feb 12 2009, 10:19) Скачал W...   Feb 12 2009, 11:17
|- - ARV   Цитата(aesok @ Feb 12 2009, 14:17) Провер...   Feb 12 2009, 11:27
|- - demiurg_spb   Цитата(ARV @ Feb 12 2009, 14:27) влияет: ...   Feb 12 2009, 11:38
||- - _Pasha   Цитата(demiurg_spb @ Feb 12 2009, 14:38) ...   Feb 12 2009, 11:45
||- - aesok   Цитата(_Pasha @ Feb 12 2009, 14:45) Т.е. ...   Feb 12 2009, 11:48
||- - demiurg_spb   На этой странице не встречается "fno-split-wi...   Feb 12 2009, 11:55
|- - aesok   Цитата(ARV @ Feb 12 2009, 14:27) влияет: ...   Feb 12 2009, 11:45
|- - ARV   Цитата(aesok @ Feb 12 2009, 14:38) да. В...   Feb 12 2009, 11:53
|- - aesok   Цитата(ARV @ Feb 12 2009, 14:53) eeprom.h...   Feb 12 2009, 11:56
- - ARV   --param -inline-call-cost =0.........17902 =1,2,3...   Feb 12 2009, 12:17
|- - aesok   Цитата(ARV @ Feb 12 2009, 15:17) при этом...   Feb 12 2009, 12:45
- - _Pasha   -fsplit-wide-types - совершенно очевидно, что в ка...   Feb 12 2009, 12:25
|- - ARV   Цитата(_Pasha @ Feb 12 2009, 15:25) 2ARV:...   Feb 12 2009, 12:41
- - Rst7   Кстати, для тех, кто пользуется максимальной оптим...   Feb 12 2009, 13:39
- - ARV   а вот еще вопрос (не совсем в тему, но касающийся ...   Feb 13 2009, 07:38
|- - MrYuran   Цитата(ARV @ Feb 13 2009, 10:38) каким об...   Feb 13 2009, 07:42
|- - aesok   Цитата(ARV @ Feb 13 2009, 10:38) а вот ещ...   Feb 13 2009, 08:17
- - ARV   увы, такой сложный и, опять-же, индивидуально зата...   Feb 13 2009, 08:27
- - aesok   Цитата(ARV @ Feb 13 2009, 11:27) увы, так...   Feb 13 2009, 08:31
- - ARV   Цитата(aesok @ Feb 13 2009, 11:31) Пока т...   Feb 13 2009, 08:38


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th August 2025 - 08:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01418 секунд с 7
ELECTRONIX ©2004-2016