PDA

Просмотр полной версии : к вопросу о разумности использования компиляторов C на спеке



Eltaron
10.09.2005, 18:34
давно занимает эта тема
вот, решил потестировать все компиляторы, до которых дотянулись руки
проверял на банальнейшей штуке - заливке всего экрана черным цветом, вот такой вот код:


int main()
{
unsigned char* t;
t = 16384;
while (t<16384+6144)
{
*t = 255;
t++;
}
return 0;
}

специально не использовал никаких библиотек, если что, их всегда можно написать самому, да и не нужна на спеке добрая половина их возможностей.
первым попался под руку z88dk
вот что он мне выдал


._main
ld hl,16384 ;const
push hl
.i_3
pop hl
push hl
ld de,22528 ;const
ex de,hl
call l_ult
jp nc,i_4
pop hl
push hl
ld (hl),#(255 % 256 % 256)
pop hl
inc hl
push hl
dec hl
jp i_3
.i_4
ld hl,0 ;const
pop bc
ret

то есть даже в таком примитивном коде наворочено по максимуму
причем, это только асмовый исходник, после линковки он добавляет еще мусора
пытаться скомпилировать этот код руками не стал, нервы дороже
в общем, барахло, а не компилятор

Дальше был sdcc
им уже вполне можно пользоваться, судите сами:


org #9c40
_main_start::
_main:
ld bc,#4000
_l00101:
ld e,c
ld d,b
ld a,e
sub a,#00
ld a,d
sbc a,#58
jp p, _l00103
ld a,#FF
ld (bc),a
inc bc
jp _l00101
_l00103:
ld hl,#0000
_l00104:
ret

слишком много явно лишних операций(типа вычитания нуля из аккумулятора), но это уже что-то
но хотелось лучшего и я полез в инет
нашел еще компилятор от Softools, но он слишком хотел денег и у меня запуститься отказался наотрез
и, в конце-концов наткнулся на компилятор от IAR. Плох он тем, что нет command-line утилит, все встроено в IDE, и писать приходится в нем, неудобно, все же FAR роднее
вот такое вот чудо он нагенерировал:


org #9c40
main:
PUSH BC
PUSH IX
LD IX,0
ADD IX,SP
PUSH AF
LD (IX-2),0
LD (IX-1),64
l0001:
LD BC,22528
LD L,(IX-2)
LD H,(IX-1)
AND A
SBC HL,BC
JR NC,l0000
l0002:
LD L,(IX-2)
LD H,(IX-1)
LD (HL),255
INC (IX-2)
JR NZ,l0003
INC (IX-1)
l0003:
JR l0001
l0000:
LD SP,IX
POP IX
POP BC
RET

оно, конечно, работает, но не радует, блин
и тут меня как ударило - что-то слишком активно с памятью он работает, и я полез искать в опциях настройки компиляции
и вот оно! оптимизация - Default/Size/Speed
ну, поставил Speed на максимум
вот что выдал:


org #9c40
main:
PUSH BC
PUSH DE
LD DE,16384
l0001:
LD BC,22528
LD H,D
LD L,E
AND A
SBC HL,BC
JR NC,l0000
l0002:
LD H,D
LD L,E
LD (HL),255
INC DE
JR l0001
l0000:
POP DE
POP BC
RET

довольно непривычно глазу(я б не так написал :-)), но работает
а, главное, действительно оптимизировано, лень такты подсчитывать, но, думаю, это самый быстрый вариант

к чему я это все? да ни к чему, просто хотелось радостью поделиться, нашел хоть один нормальный компилятор :-)
вообще, неудивительно, что он дает такой неплохой код, все-таки коммерческая разработка для промышленного применения
если кто заинтересовался - компилер можно бесплатно скачать с www.iar.com(4 мега). Там написано, что это демо-версия, но никаких ограничений пока не заметил

ЗЫ везде из сгенеренного компилером кода вычищен весь мусор и сам код переделан для нормального ассемблирования сторонним спектрумским ассемблером(я юзал sjasm)

lvd
10.09.2005, 23:32
Дальше был sdcc
ld a,e
sub a,#00
ld a,d
sbc a,#58
jp p, _l00103

Ошибка. Должно быть jp c/nc, потому что #ff00 -#5800 - будет флаг N стоять.



довольно непривычно глазу(я б не так написал :-)), но работает
а, главное, действительно оптимизировано, лень такты подсчитывать, но, думаю, это самый быстрый вариант


Посчитай и убедись, что сдцц всё же в данном случае дал наиболее оптимальный код - без коматозных 16-битных конструкций и тд. Вот ещё бы и правильный был бы =)

breeze
11.09.2005, 00:42
если кто заинтересовался - компилер можно бесплатно скачать с www.iar.com(4 мега). Там написано, что это демо-версия, но никаких ограничений пока не заметил

это этот линк ? http://supp.iar.com/FilesPublic/EWDEMO/000560/ewz80d.zip

Eltaron
11.09.2005, 08:09
это этот линк ? http://supp.iar.com/FilesPublic/EWDEMO/000560/ewz80d.zip
он самый


Посчитай и убедись, что сдцц всё же в данном случае дал наиболее оптимальный код - без коматозных 16-битных конструкций и тд. Вот ещё бы и правильный был бы =)
ну не знаю, один коматозный sbc идет 15 тактов, а у sdcc два некоматозных, но по 7, почти то же самое
но эт я так, навскидку, внимательно потом посчитаю

Eltaron
11.09.2005, 12:26
ладно, соглашусь, что если бы sdcc не делал ошибок и умел бы выкидывать ненужные инструкции, то цены бы ему не было :-))
но это в том примере
а счас для сравнения вот такое:
main.c:


#include "main.h"

void main(void)
{
gotoXY(10,10);
printf("Hello, world!");
}

main.h:


void gotoXY(char x, char y);
void printf(char* data);

естественно, линковщик будет ругаться, ибо тел продекларированных функций нет, но черт с ним, с линковщиком, все равно у него на выходе что-то непотребное, проще обычным ассемблером ассемблировать

вот sdcc:


_main_start::
_main:
ld hl,#0x0A0A
push hl
call _gotoXY
pop af
ld hl,#__str_0
push hl
call _printf
pop af
00101$:
ret
_main_end::
__str_0:
.ascii "Hello, world!"


а вот iar ewz80:


main:
PUSH BC
PUSH DE
LD C,10
LD E,C
CALL gotoXY
LD DE,?0000 ; вот это место мне не нравится, к божескому виду приводится только встроенным линкером
CALL printf
POP DE
POP BC
RET


комментарии, думаю, излишни
один ld e,c чего стоит :)
да и sdcc передает аргументы через стек, как принято на pc, а iar если аргументов мало, заполняет ими регистры
еще sdcc чуть что, начинает воротить огород вокруг индексных регистров, ewz80 тоже, но реже и код у него выглядит лучше(может, конечно, работает хуже :), не тестировал)
в общем, мне определенно нравится iar'овский компайлер :)
но нашел у него большую проблему - он не вставляет в ассемблерный листинг строковые(а может и не только) константы, счас думаю, как это обходить...

lvd
11.09.2005, 16:58
комментарии, думаю, излишни
один ld e,c чего стоит :)
да и sdcc передает аргументы через стек, как принято на pc, а iar если аргументов мало, заполняет ими регистры
еще sdcc чуть что, начинает воротить огород вокруг индексных регистров, ewz80 тоже, но реже и код у него выглядит лучше(может, конечно, работает хуже :), не тестировал)
в общем, мне определенно нравится iar'овский компайлер :)
но нашел у него большую проблему - он не вставляет в ассемблерный листинг строковые(а может и не только) константы, счас думаю, как это обходить...

Одним словом, любой компюлер цэ для з80 можно заставить бред нагенерить. О чём и речь - на з80 нормально можно только на асме прогать. Ни один компайлер не догадается на for(i=0;i<256;i++) a[i]=0; нагенерить ld sp,:ld de,0:push de:push de:...:push de. А кодер в маинлупе или в инте где критично время исполнения - такое автоматом влепит.

Raider
12.09.2005, 00:26
Отпишу мысли..


давно занимает эта тема
вот, решил потестировать все компиляторы, до которых дотянулись руки
проверял на банальнейшей штуке - заливке всего экрана черным цветом, вот такой вот код:


int main()
{
unsigned char* t;
t = 16384;
while (t<16384+6144)
{
*t = 255;
t++;
}
return 0;
}




Еще есть некий Avocet compiler - доступен в edonkey network (правда лучше пользовать emule клиента).

Еще есть GCC. И к нему есть патч (текстовая заплатка на исходники чтобы получить кодогенерацию для z80).

Еще должны быть ссылки на сайте Zilog (если zilog еще живой, не был там лет 5-6 уже наверное).


Ты неправильно сделал то что поместил пример прямо внутрь int main()
это чревато. Всегда тестируй в отдельной функции:



void test() {

}


main - системный вход и мало ли что туда может попадать. Непредсказуемо :)
туда по-идее должна попадать argc и argv и возвращаться результат.


хорошо, если компилятор додумается посчитать инвариантные константы. в (t<16384+6144) Но он не обязан.

Указатели в любом компиляторе оптимизируются плохо, и лучше всего их заменять адресацией t[x] - может выйти эффективнее.

Указатель t - 16-битный. А это форсирует компилятор применять 16-битную арифметику, т.к. ты ему написал операцию сравнения (t<16384+6144) которые явно 16-битные, так что эффективного кода для z80 не жди. Эффективнее может оказаться следущее:



unsigned char *t = 0x4000;
register i; // или unsigned short

for(i=0x1800; i != 0; i--) *t++ = (unsigned char)0xFF;


А вообще, должно было быть


memset( 0x4000, 0x00, 0x1800)

- компилятор должен позвать либо библиотечную функцию, либо заменить ее на встроенный intrinsic в виде LDIR'а.

Мое мнение - писать на компайлерах наверное можно, но нужно четко понимать что за чем стоит там внутри. В основном, писать логику программы, и из нее дергать функции на асме.

p.s.
Из компиляторов самый перспективный будет GCC (в теории), особенно, если довести его кодогенерацию для z80 до ума. Вполне вероятно, что какая-то из фирм так и сделала, это обычный путь, пройденый уже не раз.

Eltaron
12.09.2005, 10:51
main - системный вход и мало ли что туда может попадать. Непредсказуемо
я и не смотрел на код до и после моего цикла
а внутри него никаких последствий от main'а быть уже не должно


туда по-идее должна попадать argc и argv и возвращаться результат.
ну, это понятно, не первый раз замужем :-)
просто плох тот компилятор, который при отсутствии argv и argc будет городить код для их обработки, а компайлер, не могущий посчитать константу вообще можно сразу на свалку


т.к. ты ему написал операцию сравнения (t<16384+6144) которые явно 16-битные
это да, конечно же надо цикл обратно к нулю крутить, но я же не задавался мыслью написать оптимально, чтоб компилер выдал красотищу, я писал примитив и смотрел, что скажут разные компилеры

а gcc для z80 - это очень интересно, надо поискать... Avocet поставил на закачку, качнется, потестю

jerri
12.09.2005, 11:20
Я бы рекомендовaл пoсмотреть изнутри игрушку Mr Whimpy & Shi Vampires

Очень интересный результат применения компиляторов

key-jee
12.09.2005, 20:21
Мое мнение - писать на компайлерах наверное можно, но нужно четко понимать что за чем стоит там внутри. В основном, писать логику программы, и из нее дергать функции на асме.Золотые слова..

jerri
12.09.2005, 23:01
я вышеквоченное не писал че за глюки?

Dexus
12.09.2005, 23:09
я вышеквоченное не писал че за глюки?
Эот слова Raider'а
квотильщик иногда глюкавит. вообще глюкавый форум %)

key-jee
13.09.2005, 05:05
я вышеквоченное не писал че за глюки?Согласен - мой косяк :biggrin: Вот что бывает когда почти всю мессагу стерёшь вместе с тегами.. вот потом и вспоминаешь, чью же мессагу ты квотишь :smile: Мне в данном случает почему-то твой ник запомнился, а не ник Raider'а..

Извиняюсь перед обоими..

SfS
18.09.2005, 14:37
По поводу SDCC - там вроде отдельной программой оптимизатор идет, который можно самому настроить.

Raider
18.09.2005, 20:46
я и не смотрел на код до и после моего цикла
а внутри него никаких последствий от main'а быть уже не должно


Не совсем так. Как повезет. Могут быть side effects.

Оптимизирующий компилятор (мы же проверяем оптимизацию) занимается распределением процессорных ресурсов, таких как регистры процессора, ячейки во фрейме стека, формы команд, предпочтение коротких форм адресации, итд итп. (ну это как бы по-идее, на самом деле не стоит ожидать всего такого от примитивных компиляторов типа z88, zcc, smallc и им подобных).

Простенький компилятор обязан следовать всему что ты напишешь. И сигнатуре функции в том числе.

И между

void foo() {}

и

void foo(int variable) {}

может быть разница.

во втором случае при вызове функции уже существует фрейм стека. А это предполагает то, что раз фрейм есть, в каком-то регистре нужно держать его адрес. Компилятор "настораживается" и перестает например использовать внутри функции этот регистр. Такое может быть запросто.

Либо может быть такой вариант - параметр поступает в функцию в регистре. Компилятор не смог разобраться что параметр так и не использован внутри функции, и продолжает его там держать, "забивая" тем самым регистр. Возможно не на всю функцию. Возможно только в самом ее начале. Но это может привести к неприятным перестановкам команд и иногда вообще может сломать код. Поэтому все-таки желательно чтобы было все "чистенько".

Для z80 компиляторов можно попробовать избегать использования фреймов стека и локальных переменных, обращаясь к глобальным переменным модуля (их можно объявить как static и они будут видны только этому модулю). Это может построить более эффективный, быстрый код, так как обращение к глобальной переменной это будет прямой

LD A,(...)
или LD HL,(...)

а вот обращение к автоматической переменной на фрейме стека это для z80 уже "корячение", т.к. минимально нужно обеспечить механизм обращения к переменным стека, а это возможно только через какой-то регистр.




ну, это понятно, не первый раз замужем :-)
просто плох тот компилятор, который при отсутствии argv и argc будет городить код для их обработки, а компайлер, не могущий посчитать константу вообще можно сразу на свалку


выше я сказал, что ждать волшебства от простеньких компиляторо не нужно. Они вполне могут иметь side-effects.



это да, конечно же надо цикл обратно к нулю крутить, но я же не задавался мыслью написать оптимально, чтоб компилер выдал красотищу, я писал примитив и смотрел, что скажут разные компилеры


Но для меня полезнее знать следущее. Когда я пишу УЖЕ эффективный код, насколько компилятор помогает мне в этом, насколько эффективный он строит код согласно моим замыслам.

Eltaron
15.10.2005, 23:10
Еще есть некий Avocet compiler - доступен в edonkey network (правда лучше пользовать emule клиента).
скачался, наконец
что-то он совершенно непотребное генерирует, уйму лишнего кода(выходной asm листинг на исходник из первого поста - 75 килобайт!), вовсю работает с двухбайтными операциями и не оптимизирует вообще ничего
причем, в составе есть некий Pre-optimizer, но ни описания его работы, ни списка настроек нигде нет
фтопку, в общем, не впечатлило меня :-))

GriV
20.11.2005, 09:55
А никто ведь не запрещает самому взять и написать компилятор С (я про плюсы ничего не грю ;)))

Теоретически это несложно - есть СИнтаксис, есть умелые руки ;)

Sinus
21.11.2005, 03:20
я писал (не 100% СИ конечно), правда под вакуумный процессор в сферическом прострнстве (читать виртуальный). юзаю как скриптовый язык для писишных и амижных проектов.

если будет время, то заюмусь на досуге портом на спек.
правда он АНТИоптимизирующий ^_~

надо кому? ибо я быстрее на спеке на асме напишу.

ws_mason
21.11.2005, 06:57
Надо. Компилятор Си нужен для Спектрума. Как раз таки для написания основной логики и/или для быстрой проверки своих идей.

Sinus
21.11.2005, 11:34
на самом деле кроме как быстро протестить идею, больше ничего и нельзя будет сделать ^_~ ибо будут тормоза.

я собираюсь делать именно нативный (т.е. хост-машина == спектрум) компилер.
ибо те кто юзают пэцэ могут заюзать разные другие компилеры (точно не помню, но два есть совсем хороших. они правда не бесплатные, но всё давно сломано)

Sinus
21.11.2005, 11:39
GriV: кстати об C++ - плюсы легко делаются в виде препроцессора (C++ => C), точнее легко беруться из старых опенсорсовских плюсанутых компилеров.
например так работает SAS/C на амиге.

lvd
21.11.2005, 13:54
я собираюсь делать именно нативный (т.е. хост-машина == спектрум) компилер.


А может на спеке прокатит и более простой компилер? Синтаксис упростить, всякие ужасные 32битные типы выкинуть (можно вообще типы выкинуть, оставить байт и ворд), компилять не в натив, а в байткод. Для скриптования сойдёт. =))

fk0
21.11.2005, 17:56
int main() {
unsigned char* t;
t = 16384;
while (t<16384+6144) {
*t = 255;
t++;
}
return 0;
}



Не надо ламерить! На C такое пишется гораздо проще:

memset(0x4000, 0x1a00, 0);

fk0
21.11.2005, 17:58
к чему я это все? да ни к чему, просто хотелось радостью поделиться, нашел хоть один нормальный компилятор :-)
вообще, неудивительно, что он дает такой неплохой код, все-таки коммерческая разработка для промышленного применения
если кто заинтересовался - компилер можно бесплатно скачать с www.iar.com(4 мега). Там написано, что это демо-версия, но никаких ограничений пока не заметил


Нет ограничений? А размер кода? Ха-ха.

Нормальный компилятор? Нормальный компилятор называется HiTech-C.

Vitamin
22.11.2005, 00:34
Нормальный компилятор? Нормальный компилятор называется HiTech-C.
А его ктонить тестил на предмет качества кода?

valker
22.11.2005, 10:06
Нет ограничений? А размер кода? Ха-ха.

Нормальный компилятор? Нормальный компилятор называется HiTech-C.

В природе существует версия 4.06A (кракнутая). Никаких ограничений (пока) не замечено.

Sinus
22.11.2005, 11:46
lvd: более простой компилер? а он вообще нужен тогда?
C хорош тем, что можно делать реюзинг кода. А более другой компилер нафих не нужен, ибо для тесту идей вполне катит Basic48 + Tobos

а насчёт компиления в байт-код, так только так и можно нормально работать со всякими ужасными 32-битными указателями ^_~

lvd
22.11.2005, 12:52
lvd: более простой компилер? а он вообще нужен тогда?
C хорош тем, что можно делать реюзинг кода.

Какого-такого кода? Весь код НА СПЕКЕ пишется на асме онли, и будет так только и писаться. Более высокоуровневый язык может быть нужен только для скриптинга в играх, например. А там никакого нах реюзинга. Учись смотреть на спек трезво! =)



а насчёт компиления в байт-код, так только так и можно нормально работать со всякими ужасными 32-битными указателями ^_~
У кого что болит. Байткод стековой машины хорош тем, что по сути выполняет обратную польскую запись, в коею обычные инфиксные выражения переводятся при помощи 1 стека.

Sinus
22.11.2005, 17:24
lvd
скриптинг в играх на спеке возможет разве что только в адвентюрах и RPG-шках. ибо во всех остальных случаях будет тормозно.

создание C компилера на спеке интересно так скажем не с практической, а с научной точки зрения ^_~

а насчет обратной польской записи это очевидно, я про динамическое распределение памяти > 64k и что нормальный линейный указатель интересней
чем двойка [банк-памяти, адрес-в-банке]

lvd
23.11.2005, 00:53
lvd
скриптинг в играх на спеке возможет разве что только в адвентюрах и RPG-шках. ибо во всех остальных случаях будет тормозно.
Что именно будет тормозно, о великий теоретик гамедева на спектруме! Просвети нижайшего слугу твоего! :)



создание C компилера на спеке интересно так скажем не с практической, а с научной точки зрения ^_~

Атлична! Создай и доклади о результатах. Мож даже статью напишешь куда - мы будем гордиться таким умищем с мировой славой! =)))



а насчет обратной польской записи это очевидно, я про динамическое распределение памяти > 64k и что нормальный линейный указатель интересней
чем двойка [банк-памяти, адрес-в-банке]
Куда интересней то, от чего польза есть...

Sinus
23.11.2005, 11:07
Что именно будет тормозно, о великий теоретик гамедева на спектруме! Просвети нижайшего слугу твоего! :)
что будет тормозно? всё!
допустим мы делаем простенькую аркадку (типа марио). но не такую, какую делали в 80-х годах, а посовременнее. с фреймовым скролом хотя бы.
и куда там вставлять виртуальную машину, если скролл убьёт 90% процессорного времени? а остальные 10% уйдут на проигравание музы и опрос управления.


Атлична! Создай и доклади о результатах. Мож даже статью напишешь куда - мы будем гордиться таким умищем с мировой славой! =)))
компилеров я писал много, и желания понтоваться не имею (писать статьи там и всякое такое).
мне интересно посмотреть насколько оно будет юзабельно. я и посмотрю. а если тебе нужны доклады и результаты, то это не ко мне.


Куда интересней то, от чего польза есть...
о! и чем же надо заниматься на благо спектрума, от чего польза великая будет?
игрушки шпарить? или может системок понаделать?
демки?
а! надо газету сделать! только что-то никто даже пальцем ни для чего пошевелить не хочет.
делай, не делай, спеку плучше не станет.

lvd
23.11.2005, 23:08
что будет тормозно? всё!
допустим мы делаем простенькую аркадку (типа марио). но не такую, какую делали в 80-х годах, а посовременнее. с фреймовым скролом хотя бы.

С фреймовым скроллом в очке 10x10? Или на весь экран?


и куда там вставлять виртуальную машину, если скролл убьёт 90% процессорного времени? а остальные 10% уйдут на проигравание музы и опрос управления.

Ты писал компиляторы, а я писал мультитасковые интры. Так что небоись, вставлю, если надо.




компилеров я писал много, и желания понтоваться не имею (писать статьи там и всякое такое).
мне интересно посмотреть насколько оно будет юзабельно. я и посмотрю. а если тебе нужны доклады и результаты, то это не ко мне.

Но тем не менее уже понтуешься. "Я! Компилер на спеке! компилеров тонны написал!" и тд.



о! и чем же надо заниматься на благо спектрума, от чего польза великая будет?
игрушки шпарить? или может системок понаделать?
демки?
а! надо газету сделать! только что-то никто даже пальцем ни для чего пошевелить не хочет.
делай, не делай, спеку плучше не станет.

Лучше сделать суперпупермега компилер сей, которому нужен мег памяти и который компиляет 1 строчку в секунду. Вот это будет мега-польза. аласм и прочие асмы закопают.

Максагор
24.11.2005, 06:17
Народ, а никто не хочет протестить на оптимальность/объем/скорость различные верианты Си под CP/M, выложенные у меня на сайте http://atmturbo.nedopc.com ?
Интересно узнать результаты...

Ewgeny7
24.11.2005, 07:08
Лучше сделать суперпупермега компилер сей, которому нужен мег памяти и который компиляет 1 строчку в секунду.
Спеку ценны любые начинания! :) Но компилеров и асмов уже имеется огромная куча, а гейммейкерство пока что испытывает бАльшие затруднения в виде дефиците оного...

Sinus
24.11.2005, 11:38
lvd:
фреймовый скролл? во весь экран конечно!
фреймовые скроллы в очке- это ламозо.



Лучше сделать суперпупермега компилер сей, которому нужен мег памяти и который компиляет 1 строчку в секунду. Вот это будет мега-польза. аласм и прочие асмы закопают.
... не понял фишки. кому нужен мег памяти и что компилит 1 строчку в секунду?

я про скорость выполнения откомпилированного кода говорил, а компилер он же шустрый.

lvd
24.11.2005, 12:37
lvd:
фреймовый скролл? во весь экран конечно!
фреймовые скроллы в очке- это ламозо.

Ламозо - это фреймовый скролл на весь экран (по горизонтали, хехе). Потому что не нужен и вреден в гамах. Свободен =)



... не понял фишки. кому нужен мег памяти и что компилит 1 строчку в секунду?

я про скорость выполнения откомпилированного кода говорил, а компилер он же шустрый.

Ну да, я помню, как такие шустрые трупоси и борлантси на 2шках работали. И не надо говорить, что у тебя быстрее будет. Будет быстрее - код говёный получится. Будет медленнее - код всё равно говёный по сравнению с асмом. Итого - нахуа?

Sinus
24.11.2005, 13:02
Ламозо - это фреймовый скролл на весь экран (по горизонтали, хехе). Потому что не нужен и вреден в гамах. Свободен =)

да ну нафих! фреймовость рулит!
или рулит тормозной скролл по знакоместам?


Ну да, я помню, как такие шустрые трупоси и борлантси на 2шках работали. И не надо говорить, что у тебя быстрее будет. Будет быстрее - код говёный получится. Будет медленнее - код всё равно говёный по сравнению с асмом. Итого - нахуа?

ну а я с чего начинал? нахуа на спеке компилер если асм есть?

lvd
24.11.2005, 22:13
да ну нафих! фреймовость рулит!

Ну покажи мне хоть одну ПОЛНОЭКРАННУЮ фреймовую гаму, где весь ентот экран скролится фреймово? Нету таких, потому что нафик не надо.


или рулит тормозной скролл по знакоместам?

А что, savage например не рулит?



ну а я с чего начинал? нахуа на спеке компилер если асм есть?
Я тебе объяснил для чего. А для чего компилер именно сей - я не знаю. Ты же фонат их.

Ewgeny7
25.11.2005, 06:32
To Sinus:
Уважая Ваше мнение по всем вопросам, все-таки "нахуа" выражаем наше модераторское сомнение :)

Eltaron
25.11.2005, 09:16
Не надо ламерить! На C такое пишется гораздо проще:

memset(0x4000, 0x1a00, 0);
да что ты говоришь....
как это ты про ZeroMemory(..) еще не вспомнил?

там же _русским по белому_ написано, что _нарочно_ ни одной стандартной либы не подключено
если охота хлебнуть горя, вручную распихивая с одновременным зарабатыванием геморроя - компиль свой memset

fk0
25.11.2005, 09:57
memset(0x4000, 0x1a00, 0);

да что ты говоришь....
как это ты про ZeroMemory(..) еще не вспомнил?


Я вообще не знаю что это такое и знать не хочу. Я знаю ISO, IEEE, POSIX...
Про микрософт ничего не знаю и знать не хочу.



там же _русским по белому_ написано, что _нарочно_ ни одной стандартной либы не подключено


И не надо. Только *.h. Ибо эта функция разворачивается компилятором в LDIR.

Sinus
25.11.2005, 10:53
Ну покажи мне хоть одну ПОЛНОЭКРАННУЮ фреймовую гаму, где весь ентот экран скролится фреймово? Нету таких, потому что нафик не надо.
... ну почти целый. были такие.
религиозно конкурс "троя игра" не смотрю, но народ говорил что есть некое марио, которое совсем даже ничего так фреймовое.


А что, savage например не рулит?
мне не нравится.
рулит Monstrland. но это немного не в тему фреймового скролла.

зы. я закругляюсь, ибо мы плавно переходим в овтопик ^_~

lvd
25.11.2005, 11:44
To Sinus:
Уважая Ваше мнение по всем вопросам, все-таки "нахуа" выражаем наше модераторское сомнение :)

Выражаем наше юзерское сомнение, что модератор забрёл не в свой раздел! =))

Eltaron
26.11.2005, 12:21
Про микрософт ничего не знаю и знать не хочу.
а, ну все с тобой понятно, это ты пальцы гнул :-)
я так и думал, что бездумно наехать может тока либо ламер, прочевший книжку про С пару недель назад, либо пальцегнущий профи :-)


И не надо. Только *.h. Ибо эта функция разворачивается компилятором в LDIR.
если бы я хотел потестить качество разворачивания компилятором мемсета в лдир, я бы так и сказал
а я смотрел на код, который нагенерит компайлер на простой цикл и работу с памятью

fk0
26.11.2005, 14:44
если бы я хотел потестить качество разворачивания компилятором мемсета в лдир, я бы так и сказал
а я смотрел на код, который нагенерит компайлер на простой цикл и работу с памятью

Если бы ты хотел что-то протестировать, ты бы без особого труда
набрёл в гугле на многочисленные benchmark's. Не знаю как на счёт
пальцегнутых профи, а у всяких KEIL software в компиляторы тестируются так.

CityAceE
30.11.2005, 04:17
А что если взять HiSoft C (ведь именно он является самым нормальным?) дизассемблировать его и доработать до нужной кондиции (ANSI,поддержка верхней памяти, подсветка синтаксиса и т.д. и т.п.)? Или это это чушь?

fk0
30.11.2005, 18:19
А что если взять HiSoft C (ведь именно он является самым нормальным?) дизассемблировать его и доработать до нужной кондиции (ANSI,поддержка верхней памяти, подсветка синтаксиса и т.д. и т.п.)? Или это это чушь?

Дизассемблировать? Проще с нуля написать, если с таким качеством
кода. "Dragon book" в руки, и вперёд. Можно в сторону sdcc и z88dk
посмотривать...

Alexander Bondarenko (500:3432/3)
05.12.2005, 00:16
*Здравствуй, Stanislav!*

Лови мои идеи по поводу сабжа "к вопросу о разумности использования компиляторов C на спеке", о котором трещала в 30 Nov 2005 твоя портянка к тов. All.


А что если взять HiSoft C (ведь именно он является самым нормальным?)
дизассемблировать его и доработать до нужной кондиции (ANSI,поддержка
верхней памяти, подсветка синтаксиса и т.д. и т.п.)? Или это это чушь?

А чё, ноpмальная идейка. Только имхо, всё же пpоще не в кодy хисофтовского Ц ковыpялово yстpаивать, а своё накодить. Шyстpее выйдет гоpаздо. :)

/Вот и всё, Stanislav, можешь листать дальше.../

... C миру по исходничку - и готова программка.

andrews
13.07.2006, 19:47
давно занимает эта тема
если кто заинтересовался - компилер можно бесплатно скачать с www.iar.com(4 мега). Там написано, что это демо-версия, но никаких ограничений пока не заметил

ЗЫ везде из сгенеренного компилером кода вычищен весь мусор и сам код переделан для нормального ассемблирования сторонним спектрумским ассемблером(я юзал sjasm)30 дней эта радость продолжится если ее вовремя не вылечить

Aprisobal
25.07.2006, 20:21
Не знаю, может быть на форуме нельзя давать ссылки на программы с лекарством, но всё же:
HiTech Z80 C v7.50:
http://rapidshare.com/files/3964641/HiTech_Z80_C-compiler.v.7.50.w.CR.exe.html
Embedded Systems - Avocet WideUI V3.28 ANSI-C Compiler for Z80:
http://rapidshare.com/files/3964506/Embedded_Systems_-_Avocet_WideUI_V3.28_ANSI-C_Compiler_for_Z80.rar.html
Интересно было бы узнать насколько они хороши.

Vladson
18.01.2008, 16:02
Мои замеры (к сожалению не на реальном спеки а на эмуляторе)

Первый не смог запустить (не понятно кто такой "l_ult" и с чем его едят)

Дальше был sdcc
0.1636сек

нашел еще компилятор от Softools
0.3914сек

поставил Speed на максимум
вот что выдал:
0.183сек

Вывод, юзайте мозги и пишите сразу на ASM а компиляторы оставьте для процессоров с кэшем


org #9c40
ld de,16384
ld hl,22528
_vladson:
ld a,255
ld (de),a
inc de
ld a,d
sub h
jr nz,_vladson
ld a,e
sub l
jr nz,_vladson
ret
0.0978сек

Vitamin
18.01.2008, 18:12
Который раз кидаю уже ссылку на тему:
http://zx.pk.ru/showthread.php?t=4110

Там есть тесты разных компиляторов (которые удалось найти). Хотя замечу, что тест не мешало бы сделать другой (были идеи), более ориентированный на выделение достоинств и недостатков разных компиляторов.

andrews
19.01.2008, 17:54
Вывод, юзайте мозги и пишите сразу на ASM а компиляторы оставьте для процессоров с кэшем
вот-вот, а Blackfin, основа ZX Yellow Spectrum, именно из таких процессоров