User Tag List

Страница 6 из 13 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя
Показано с 51 по 60 из 125

Тема: LLVM Backend для Z80

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    29.12.2010
    Адрес
    Москва
    Сообщений
    1,869
    Спасибо Благодарностей отдано 
    142
    Спасибо Благодарностей получено 
    110
    Поблагодарили
    66 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Компилер нужен именно с поддержкой 32-битных типов (хотя бы целочисленных), ибо 8/16 битных С-компилеров для Z80/8080 и так пруд пруди.
    А для чего нужны 32-битные типы на Спектруме? Что за программы будут писаться?

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

  3. #2

    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Не обязательно на спеке. Например для ОС и ФС.

  4. #3

    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Цитата Сообщение от mastermind Посмотреть сообщение
    Насколько я понимаю, она просто генерит ir-код используя доступные на процессоре операции. (т.е. полезно для быстрой реализации всяких умножений/делений, операций с разрядностью больше 8 и т.д.).
    Вот это было бы очень здорово. Компилер нужен именно с поддержкой 32-битных типов (хотя бы целочисленных), ибо 8/16 битных С-компилеров для Z80/8080 и так пруд пруди.
    Разобрался я с этим RTLIB. Вообщем эта штука немного другое делает. Если в двух словах, то она для неподдерживаемых архитектурой команд вставляет вызовы функций с заданными именами. Т.е. можно будет написать библиотеку где будут эти функции и просто линковать скомпилированную программу с этой библиотекой. Например Z80 никак не поддерживает команду умножения и деления, а в llvm есть такие команды.
    Код:
    define i8 @test(i8 %a, i8 %b)
    {
    	%res = mul i8 %a, %b
    	ret i8 %res
    }
    После компиляции получается вот что:
    Код:
    	call	_mathLib_MULi8
    	ret
    Аргументы передаются в регистрах A, B. Функция возвращает результат в регистре A.

    Однако llvm все же радует кое чем. Например если архитектура имеет только 16 битные регистры, то llvm сам умеет создавать цепочку команд для вычисления 32 битных (и более) чисел с помощью имеющихся регистров.
    Последний раз редактировалось EARL; 02.11.2012 в 18:14.

  5. #4

    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,581
    Спасибо Благодарностей отдано 
    64
    Спасибо Благодарностей получено 
    112
    Поблагодарили
    97 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    Однако llvm все же радует кое чем. Например если архитектура имеет только 16 битные регистры, то llvm сам умеет создавать цепочку команд для вычисления 32 битных (и более) чисел с помощью имеющихся регистров.
    Это действительно радует.

    ---------- Post added at 18:29 ---------- Previous post was at 18:27 ----------

    Цитата Сообщение от Andrew771 Посмотреть сообщение
    А для чего нужны 32-битные типы на Спектруме? Что за программы будут писаться?
    Портирование системного ПО с других платформ зачастую упирается в отсутствие поддержки компилятором long (32 бита). Простейший пример - библиотеки ФАТ32. Именно портирование, а не писание с нуля - реальный шанс поиметь на Спеке (или Орионе или еще чем-то) какое-то новое ПО. Просто в силу того, что уже никто не выдаст нужное количество человекочасов, сколько нужно для написания чего-то серьезного с нуля - уже не тот запал.
    Последний раз редактировалось Error404; 02.11.2012 в 18:32.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  6. #5

    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    SfS, я думаю все операции с float все равно лучше делать в виде отдельной библиотеки. А на счет формата float, то в любом случае это будет IEEE 754, т.е. как раз стандартный, а не то что используется в бейсике.

  7. #6

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    SfS, я думаю все операции с float все равно лучше делать в виде отдельной библиотеки. А на счет формата float, то в любом случае это будет IEEE 754, т.е. как раз стандартный, а не то что используется в бейсике.
    ну как оно внутри будет - неважно) а вот IEEE 754 - это руль)

  8. #7

    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На данный момент уже могут компилироваться многие программы работающие с 8 битной арифметикой. Имеются некоторые недоделки в плане условий (if). Для примера приведу код вычисления crc8:
    Код:
    unsigned char test(unsigned char *a, unsigned char size)
    {
    	unsigned char crc = 0xFF;
    	unsigned char i;
    
    	while (size--)
    	{
    		crc ^= *a++;
    		for (i = 0; i < 8; i++)
    			crc = crc & 0x80 ? (crc<<1) ^ 0x31 : crc<<1;
    	}
    	return crc;
    }
    А вот что мы получаем на выходе (входные данные передаются через HL - указатель на массив, A - длина массива):
    Код:
    ; BB#0:                                 ; %entry
    	ld	b, a
    	ld	c, -1
    	jp	.BB0_3
    .BB0_2:                                 ; %while.cond.loopexit
                                            ;   in Loop: Header=BB0_3 Depth=1
    	inc	hl
    .BB0_3:                                 ; %while.cond.loopexit
                                            ; =>This Loop Header: Depth=1
                                            ;     Child Loop BB0_5 Depth 2
    	ld	a, b
    	cp	0
    	jp	z, .BB0_1
    ; BB#4:                                 ; %while.body
                                            ;   in Loop: Header=BB0_3 Depth=1
    	ld	a, (hl)
    	xor	c
    	ld	e, a
    	ld	d, 0
    	dec	b
    .BB0_5:                                 ; %for.body
                                            ;   Parent Loop BB0_3 Depth=1
                                            ; =>  This Inner Loop Header: Depth=2
    	ld	a, e
    	and	-128
    	ld	hx, a
    	sla	e
    	ld	a, e
    	xor	49
    	ld	c, a
    	ld	a, hx
    	cp	0
    	jp	nz, .BB0_7
    ; BB#6:                                 ; %for.body
                                            ;   in Loop: Header=BB0_5 Depth=2
    	ld	c, e
    .BB0_7:                                 ; %for.body
                                            ;   in Loop: Header=BB0_5 Depth=2
    	inc	d
    	ld	a, d
    	cp	8
    	ld	e, c
    	jp	z, .BB0_2
    	jp	.BB0_5
    .BB0_1:                                 ; %while.end
    	ld	a, c
    	ret
    Конечно не всё идеально, но crc8 вычисляется правильно. Если у кого-то есть свои примеры и интересно во что они скомпилируются, кидайте, покажу. Но замечу еще раз, что пока работа полностью реализована только для 8 битной арифметики, т.е. int пока в вычислениях использовать не получится. В ближайшее время займусь как раз реализацией 16 битной арифметики. Пока из нового все.

  9. #8

    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    365
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Интересный проект.
    Интересно как будет выглядеть декодер mp3 в Z80 асме ).

    P.S. а х86 фронт-энд вы случайно не планируете сделать ) ?

  10. #9

    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    shurik-ua, front-end'ов для llvm существует уже не мало. Начиная от clang или gcc+DragonEgg заканчивая Lua.

  11. #10

    Регистрация
    27.01.2005
    Сообщений
    924
    Спасибо Благодарностей отдано 
    28
    Спасибо Благодарностей получено 
    193
    Поблагодарили
    154 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Уже результат. Таки инты надо)

Страница 6 из 13 ПерваяПервая ... 2345678910 ... ПоследняяПоследняя

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

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

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

Ваши права

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