[an error occurred while processing this directive]
Правильно у __AVR__ нет. У Он нормально работает со стеком, и ф-ции действительно таковы. А 51 - не умеет со стеком и пытается все глобально размещать. Отсюда жуткие проблемы.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)