-
- Я мечтаю, что сохраняет только используемые. Вроде, при обсуждении
аппаратного механизма, проскакивало, что для маленьких
обработчиков, где затрагивается мало регистров, программное
сохранение контекста может выиграть, но только если делать пролог и
эпилог вручную. Компилятор не оптимизирует количество сохраняемых
регистров. - Nikolay_Po(24.04.2025 11:53)
- Что ж, неважнецкий какой-то компилятор, значит. )) IAR AVR чётко
сохраняет только те, которые меняются. Но! Стоит внутри П/П сделать
ещё один вызов - всё. IAR сохраняет все регистры. Хотя вызов (я
делал косвенные, т.е. через указатели) очень простой. Вот там я
применял "__raw", т.е. указание IAR'у не сохранять ничего. Я сам
сохранял что нужно (особенно эффективна пересылка пары регистров в
другую пару за 1 такт), отчего реакция и отработка П/П
увеличивалась в разы. - vpv.vpv(25.04.2025 07:45)
- Попробовал заинлайнить в прерывании все вызовы. Заинлайнилось. Ни одного вызова подпрограммы. Но как было 22 инструкции пролога, так и осталось. Не оптимизирует сборка GCC 12 от WCH. - Nikolay_Po(25.04.2025 22:57)
- Спасибо. У меня точно есть вызовы из прерывания. И много коротких. Попробую заинлайнить - вдруг догадатется посокращать сохранение. - Nikolay_Po(25.04.2025 09:58)
- Мечта сбылась. Утверждается, что LLVM умеет IPRA. Но если
посмотреть на цифры, то реальная "польза" весьма скромная. Когда в
дизассемблере видишь сохранение кучи регистров, это немного
расстраивает, конечно. SciFi(1 знак., 24.04.2025 12:01, ссылка)
- В какой версии GCC оно заработает? Интересно. - Nikolay_Po(24.04.2025 12:27)
- Не знаю. Но могу дать ссылку на рабочий тулчейн. Я попробовал,
работает. SciFi(1 знак., 24.04.2025 12:28, ссылка)
- Что-то вроде 19.1.7. У меня пока в комплекте с IDE версия 12. - Nikolay_Po(24.04.2025 12:30)
- Если что, LLVM и GCC - это совсем не одно и то же. - SciFi(24.04.2025 12:30)
- Я думал, что GCC - это типа обёртки для LLVM. - Nikolay_Po(24.04.2025 12:32)
- Если что, LLVM и GCC - это совсем не одно и то же. - SciFi(24.04.2025 12:30)
- Что-то вроде 19.1.7. У меня пока в комплекте с IDE версия 12. - Nikolay_Po(24.04.2025 12:30)
- Не знаю. Но могу дать ссылку на рабочий тулчейн. Я попробовал,
работает. SciFi(1 знак., 24.04.2025 12:28, ссылка)
- В какой версии GCC оно заработает? Интересно. - Nikolay_Po(24.04.2025 12:27)
- Что ж, неважнецкий какой-то компилятор, значит. )) IAR AVR чётко
сохраняет только те, которые меняются. Но! Стоит внутри П/П сделать
ещё один вызов - всё. IAR сохраняет все регистры. Хотя вызов (я
делал косвенные, т.е. через указатели) очень простой. Вот там я
применял "__raw", т.е. указание IAR'у не сохранять ничего. Я сам
сохранял что нужно (особенно эффективна пересылка пары регистров в
другую пару за 1 такт), отчего реакция и отработка П/П
увеличивалась в разы. - vpv.vpv(25.04.2025 07:45)
- Я мечтаю, что сохраняет только используемые. Вроде, при обсуждении
аппаратного механизма, проскакивало, что для маленьких
обработчиков, где затрагивается мало регистров, программное
сохранение контекста может выиграть, но только если делать пролог и
эпилог вручную. Компилятор не оптимизирует количество сохраняемых
регистров. - Nikolay_Po(24.04.2025 11:53)