Строго говоря, все эти __z88dk_fastcall отдают деревней. Лет сто как принято объявлять при вызове параметр (или локальную переменную) "register" и тогда он/она передается компилятором не на стеке, а в регистре/регистрах. Именно так общепринято делают все нормальные компиляторы (в т.ч. и hiTech C), при этом при вызове можно сколько угодно переменных объявить как register, но компилятор загрузит в регистры столько их сколько позволяет платформа, а остальные пускай и так объявленные передаст стеком. Это дает совместимость исходников для всех платформ и нет никаких ограничений по количеству или разрядности параметров, например тот же hiTech C генерируя с такого общего исходника код Z80 позволяет только один регистр процессора задействовать, для 8086 уже 3 регистра и т.д.
И это, Олег, все помнят ваш прошлогодний каминаут на тему "я ленив но заносчив и поэтому все с чем не разобрался - виноват hiTech C", так что давайте меньше экспрессии в заявлениях или вникайте в детали (что даст аналогичный эффект).
- - - Добавлено - - -
PS. У hiTech C (по крайней мере v3.09 каким пользуюсь я) безусловно больше ограничений чем у современного SDCC, но он, извините, написан в сжатые сроки и при царе горохе (и как написан!), работает в 64кб под CP/M, а не в 64Гб под виндой 30 лет спустя (из которых первые 15 лет тем SDCC пользоваться было нельзя не заплевав монитор)





Ответить с цитированием