я вышеквоченное не писал че за глюки?
я вышеквоченное не писал че за глюки?
С уважением,
Jerri / Red Triangle.
Эот слова Raider'аСообщение от jerri
квотильщик иногда глюкавит. вообще глюкавый форум %)
Согласен - мой косякСообщение от jerri
Вот что бывает когда почти всю мессагу стерёшь вместе с тегами.. вот потом и вспоминаешь, чью же мессагу ты квотишь
Мне в данном случает почему-то твой ник запомнился, а не ник Raider'а..
Извиняюсь перед обоими..
По поводу SDCC - там вроде отдельной программой оптимизатор идет, который можно самому настроить.
Не совсем так. Как повезет. Могут быть side effects.Сообщение от Eltaron
Оптимизирующий компилятор (мы же проверяем оптимизацию) занимается распределением процессорных ресурсов, таких как регистры процессора, ячейки во фрейме стека, формы команд, предпочтение коротких форм адресации, итд итп. (ну это как бы по-идее, на самом деле не стоит ожидать всего такого от примитивных компиляторов типа z88, zcc, smallc и им подобных).
Простенький компилятор обязан следовать всему что ты напишешь. И сигнатуре функции в том числе.
И между
void foo() {}
и
void foo(int variable) {}
может быть разница.
во втором случае при вызове функции уже существует фрейм стека. А это предполагает то, что раз фрейм есть, в каком-то регистре нужно держать его адрес. Компилятор "настораживается" и перестает например использовать внутри функции этот регистр. Такое может быть запросто.
Либо может быть такой вариант - параметр поступает в функцию в регистре. Компилятор не смог разобраться что параметр так и не использован внутри функции, и продолжает его там держать, "забивая" тем самым регистр. Возможно не на всю функцию. Возможно только в самом ее начале. Но это может привести к неприятным перестановкам команд и иногда вообще может сломать код. Поэтому все-таки желательно чтобы было все "чистенько".
Для z80 компиляторов можно попробовать избегать использования фреймов стека и локальных переменных, обращаясь к глобальным переменным модуля (их можно объявить как static и они будут видны только этому модулю). Это может построить более эффективный, быстрый код, так как обращение к глобальной переменной это будет прямой
LD A,(...)
или LD HL,(...)
а вот обращение к автоматической переменной на фрейме стека это для z80 уже "корячение", т.к. минимально нужно обеспечить механизм обращения к переменным стека, а это возможно только через какой-то регистр.
выше я сказал, что ждать волшебства от простеньких компиляторо не нужно. Они вполне могут иметь side-effects.ну, это понятно, не первый раз замужем :-)
просто плох тот компилятор, который при отсутствии argv и argc будет городить код для их обработки, а компайлер, не могущий посчитать константу вообще можно сразу на свалку
Но для меня полезнее знать следущее. Когда я пишу УЖЕ эффективный код, насколько компилятор помогает мне в этом, насколько эффективный он строит код согласно моим замыслам.это да, конечно же надо цикл обратно к нулю крутить, но я же не задавался мыслью написать оптимально, чтоб компилер выдал красотищу, я писал примитив и смотрел, что скажут разные компилеры
Alex Raider, Flash inc. 1992-1997 Новосибирск
скачался, наконецСообщение от Raider
что-то он совершенно непотребное генерирует, уйму лишнего кода(выходной asm листинг на исходник из первого поста - 75 килобайт!), вовсю работает с двухбайтными операциями и не оптимизирует вообще ничего
причем, в составе есть некий Pre-optimizer, но ни описания его работы, ни списка настроек нигде нет
фтопку, в общем, не впечатлило меня :-))
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
я писал (не 100% СИ конечно), правда под вакуумный процессор в сферическом прострнстве (читать виртуальный). юзаю как скриптовый язык для писишных и амижных проектов.
если будет время, то заюмусь на досуге портом на спек.
правда он АНТИоптимизирующий ^_~
надо кому? ибо я быстрее на спеке на асме напишу.
Надо. Компилятор Си нужен для Спектрума. Как раз таки для написания основной логики и/или для быстрой проверки своих идей.
на самом деле кроме как быстро протестить идею, больше ничего и нельзя будет сделать ^_~ ибо будут тормоза.
я собираюсь делать именно нативный (т.е. хост-машина == спектрум) компилер.
ибо те кто юзают пэцэ могут заюзать разные другие компилеры (точно не помню, но два есть совсем хороших. они правда не бесплатные, но всё давно сломано)
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)