Я пишу встроенный код для MSP430, используя компилятор IAR на самом высоком уровне оптимизации (скорость или размер ничего не меняют).
Я определяю функцию как статическую, а затем ссылаюсь на нее только один раз в одном и том же файле.
Поскольку функция имеет внутреннюю связь и используется ровно один раз, я ожидал, что оптимизатор выполнит встроенное расширение. Я не вижу причин, чтобы этого не делать.
Функция короткая, в результате получается 16 слов машинного кода. Это называется из ISR.
Добавление ключевого слова inline делает функцию встроенной, но оптимизатору, похоже, нужна подсказка. Если он встроен, то в стеке сохраняются два push
/ pop
, один calla
и один reta
.
.
Правильно ли ожидать, что будет выполнено встроенное расширение (даже без ключевого слова inline
), или я что-то упустил?
Редактировать: еще несколько тестов показали, что линейное расширение зависит от размера функции, и что порог был довольно низким. Кажется, около 15 или 16 слов машинного кода. Кроме того, оптимизатор не расширяется, если не указано ключевое слово.
Я до сих пор не понимаю, почему это не так (читабельность не должна заботить оптимизатора, не так ли?), Но я понимаю, что IAR может ответить только на это.