А чего с ней не так?
---------- Post added at 22:23 ---------- Previous post was at 22:16 ----------
Под гибридностью SDCC я имел ввиду то, что не каждый сишный компилятор вызывает внешний препроцессор, внешний ассемблер и т.д. Обмен промежуточными данными между звеньями организован через файлы, которые пишутся на диск и потом читаются с него. Это потери скорости. Плюс оптимальная кодогенерация SDCC, не имеющая аналогов. Есть некоторый потенциал увеличить скорость оптимизацией работы алгоритмов эвристики кодогенератора, о чём упомянул Филипп Краузе, но положение в целом изменить можно только пересмотром архитектуры компилятора и убиранием звеньев.
А сравнивать скорость SDCC и других компиляторов для Z80 смысла нет — последние не дают такого качества кода.
ну какой-нибудь (даже глобальный)
char* hello = "Hello, world!"
порождает код в духе
Так обычно секция .bss себя ведет. А в .data сразу должны лежать проинициализированные данные.Код:ld hl, #_hello ld (hl), 'H' inc hl ld (hl), 'e' inc hl ld (hl), 'l' итд
---------- Post added at 02:15 ---------- Previous post was at 01:32 ----------
А еще я в последнее время часто натыкаюсь на вот такие извраты
Почему нельзя сделать ld a, (#_variable) - непонятно. Значение, загруженное в iy нигде больше не используется, так что тут не в оптимизации какой-нибудь дело.Код:; char variable = 0; ; ... ld iy, #_variable ld a, (iy + 0)
С HL же подобное вообще сплошь и рядом
любая запись нового значения в переменную порождает такой код, даже если переменная в следующий раз используется только через 50 строк. LD (NN), A не у дел совершенно.Код:ld hl, #_variable ld (hl), a
А то с ней не так, что когда я пишу глобальную или статическую переменную - то она должна сразу инициализировться в секции _DATA
Вместо этого - генерится огромный код, который инитит эту переменную. Дикость и глупость.
В ассемблере генеритКод:char a=2;
Чо - руки отвалятся написать сразуКод:.area _DATA _a:: .ds 1 .area _GSINIT ;cls.c:4: char a=2; ld iy,#_a ld 0 (iy),#0x02
Экономия - время инициализации и куча памяти. Руки бы пооборвал...Код:.area _DATA _a:: .db 2
---------- Post added at 06:41 ---------- Previous post was at 06:38 ----------
Не. В секцию .bss помещаются неинициализированные данные. Которые по стандарту С забиваются нулём.
Но то, что вместо констант в секции .data генерится код - согласен - идиотизм...
Но-но, потише, лошадки. Филипп Краузе — такой же энтузиаст, как и мы. Ему не платят за разработку кодогенератора Z80 для SDCC.
Мне стыдно будет показать Филиппу эту ветку, насколько неблагодарно некоторые... гм... оценивают его труд. Обвиняя во всех смертных грехах. А Вы не думали о том, что может он просто ещё не добрался до этого направления работы?
Так что поменьше эмоций. Вам никто ничего не должен хорошо и безплатно делать. Мы здесь все никому ничего не должны. А Вы не принимаете промежуточные черновые варианты поведения кодогенератора за эталон?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
V6Z80P - Back for Good
я бы не сделал лучше, но тоже мог бы на это накатить, если бы меня это сильно заботило, но факта с "косяком" это не отменяет. а уж наезд или просто сгоряча высказал что думал... каждый сам решит.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)