На самом деле у вариантов исполнения стека данных в GCC и в IAR есть и положительные, и отрицательные стороны.
Решение с отдельными стеками данных и возвратов, кстати, не только на AVR применяется (и не только IAR'овское это изобретение). Для расширения кругозора рекомендую посмотреть на C166. Там тоже отдельный SP, а для указателя стека данных используется R0. И компилятор не IAR

.
А еще в C166 есть супер-полезная комманда atomic #n, которая запрещает прерывания на время выполнения следующих n инструкций. Очень и очень удобно для всяких семафоров, многословной периферии и прочего.
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин