Важная информация

User Tag List

Показано с 1 по 10 из 53

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

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Sinclair User Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,045
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    143
    Спасибо Благодарностей получено 
    463
    Поблагодарили
    326 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

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

    давно занимает эта тема
    вот, решил потестировать все компиляторы, до которых дотянулись руки
    проверял на банальнейшей штуке - заливке всего экрана черным цветом, вот такой вот код:
    Код:
    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)
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •