Да и пусть себе теряются, компилятор не ждёт от функции сохранности флагов (и правильно делает).
Шынни, мне CP/M не интересна как таргет, вместо этого хочу приспособить компилятор для разработки под Спектрум, а тут BDOS нет.
- - - Добавлено - - -
Продолжим исследования. Хайтех для входа в любоую функцию генерирует:
Спишем на то, что хайтек - компилятор однопроходный. И не знает на момент генерации кода входа в функцию, сколько байтов надо выделить на стеке для лок. переменных. Это он узнаёт уже потом.Код:CALL ncsv DW 0 ; Сколько байт резервировать на стеке для локальных переменных FnBody: ... ; Тут начинается сама функция ; А заканчивается она не RET, а JP cret
SDCC же многопроходный, поэтому вместо вызова фрейма входа и выделения 0 байтов на стеке он просто вызывает функцию напрямую. И она возвращается по RET.
Я не готов сходу дать список отличий Hi-Tech C v3.09 и SDCC, но в этом SDCC сильно лучше. Вызов функций - вещь базовая, и она должна быть устроена максимально производительно. Возражения?
SDCC с ключиком --opt-code-size генерит такой вход в процедуру:
C ключиком --opt-code-speed:Код:call ___sdcc_enter_ix push af push af ; Надо выделить 4 байта на стеке ... ld sp, ix pop ix retКод:push ix ld ix,#0 add ix,sp push af push af ; Надо выделить 4 байта на стеке ... ld sp, ix pop ix ret




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