User Tag List

Страница 7 из 13 ПерваяПервая ... 34567891011 ... ПоследняяПоследняя
Показано с 61 по 70 из 125

Тема: LLVM Backend для Z80

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

    По умолчанию

    Нет, хотя релиз всё еще не вышел. Я решил перейти на использование trunk ветки разработки llvm и перешел с subversion на git. Т.е. сейчас уже работаю дальше)) Чуть позже будет ссылка на репозиторий на github'е.

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

  3. #62
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    107
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как продвигается проект?
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

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

    По умолчанию

    За прошедшие пару месяцев я перешел на разработку в trunk ветку LLVM. Часть кода была переписана, другая часть изменена. Была добавлена генерация машинного кода, который сейчас можно увидеть в ассемблерных листингах, а в дальнейшем будет возможность получать бинарные файлы. В целом сейчас имеются пожалуй два основных вопроса, которые нужно решить:
    • Реализовать инструкции для работа с памятью (чтение/запись данных). Здесь основная проблема сейчас в том, что у Z80 есть много команд для чтения/записи данных, но сами опкоды имеют разный формат и при этом они еще используют лишь определенные регистры. Например команды чтения:
      Код:
      LD A,(BC/DE)
      LD r,(HL)
      LD r,(IX/IY+offset)
      LD A,(nn)
      LD HL,(nn)
      LD rp,(nn)
      Тут с точки зрения простоты реализации для LLVM лучше всего было бы иметь команды вида LD rp,(nn), т.е. где нет явно определенных операндов.

    • Как использовать альтернативный набор регистров и стоит ли это делать вообще.

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

    Весь проект находится здесь: https://github.com/earl1k/llvm-z80

  5. #64
    Activist
    Регистрация
    21.08.2009
    Адрес
    Cyprus
    Сообщений
    233
    Спасибо Благодарностей отдано 
    81
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По поводу альтернативных регистров я как-то ломал голову. Идеи такие (в идеале нужно как-то что-то из этого комбинировать наверное):

    1. Определить альтернативные регистры наряду с обычными и потом специальным проходом(-ами) расставлять ΕΧΧ и т.п., разруливать использование регистров из разных наборов в одной операции, группировать операции по набору используемых регистров (возможно имеющийся в llvm механизм scheduling как-то можно для этого заюзать) и пр. Что-то подобное, если я правильно помню, сделано в X86-бэкенде для FP-операций.

    2. Разные наборы регистров - в разных классах, соответственно разные наборы [идентичных] операций для них. (псевдоинструкции пользующие альт. регистры, которые впоследствии преобразуются в обычные) Громоздко или/и нужно дублирующие операции автогенерировать. Проблема расстановки ΕΧΧ и т.п., группировки операций для минимизации кол-ва ΕΧΧ также остается.

    3. Псевдо-32-бит регистры, (HLHL и т.д.) см. например примеры в псевдокоде на http://www.andreadrian.de/oldcpu/Z80..._cruncher.html

    4. Некий вариант п. 1 или 2 с собственным register allocator, учитывающим наличие двух наборов.

    Собственно, задачи правильной расстановки операций ΕΧΧ и группировки регистровых операций для минимизации их кол-ва, необходимо решать в любом случае.
    Последний раз редактировалось mastermind; 19.02.2013 в 19:01.

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

    По умолчанию

    mastermind, я тоже обдумывал разные варианты. Мне как раз кажется наиболее лучшим вариантом будет 1-ый или 3-ий вариант, который ты описал.
    Для 1-го случая надо разобраться получше как работает scheduling, думаю он поможет группировать команды таким образом, чтобы минимизировать кол-во переключения наборов регистров через EXX.
    Для реализации 3-го варианта достаточно просто добавить псевдоинструкции и потом их вручную разворачивать.

  7. #66
    Activist
    Регистрация
    21.08.2009
    Адрес
    Cyprus
    Сообщений
    233
    Спасибо Благодарностей отдано 
    81
    Спасибо Благодарностей получено 
    23
    Поблагодарили
    19 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати, насчет rtlib, вот это видел?: http://compiler-rt.llvm.org/
    The current feature set of compiler-rt is:

    Full support for the libgcc interfaces on supported targets.
    High performance hand tuned implementations of commonly used functions like __floatundidf in assembly that are dramatically faster than the libgcc implementations.
    A target-independent implementation of the Apple "Blocks" runtime interfaces.
    Вроде оно в целом на C написано с вариациями оптимизированного кода на асме для разных процессоров. Т.е. по идее для начала можно тупо заюзать и для Z80, оптимизациями можно и позже заняться.

    О libgcc:
    http://gcc.gnu.org/onlinedocs/gccint/Libgcc.html
    Most of the routines in libgcc handle arithmetic operations that the target processor cannot perform directly. This includes integer multiply and divide on some machines, and all floating-point and fixed-point operations on other machines. libgcc also includes routines for exception handling, and a handful of miscellaneous operations.
    Т.е. софтовая реализация умножений, делений, fp-операций и т.п.

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

    По умолчанию

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

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

    По умолчанию

    Рад, что тема еще не забыта. Работа над проектом идет, правда в последнее время совсем нет времени на него.
    Вот по этой ссылочке есть примерный roadmap с указанием того, что уже реализовано и что планируется реализовать в ближайшее время: https://github.com/earl1k/llvm-z80/wiki/Roadmap

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

    По умолчанию

    Поддерживаю. Пора обновляться и смотреть что нового добавилось и изменилось в LLVM, ведь в прошлом месяце вышла новая версия этой замечательной системы. Вот только возьмусь за это где-то в конце августа-сентябре, т.к. через неделю отпуск и на работе надо дела кое-какие утрясти.
    ZX Evolution 4096 Rev.C + NeoGS 4096 Rev.C + PAL Coder Rev.C + FDD 3.5/HDD/CDROM
    Reverse U8

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

    По умолчанию

    Вернулся из отпуска. Обновил репозиторий объединив имеющиеся наработки со свежей веткой LLVM.

    Репозиторий: https://github.com/earl1k/llvm-z80
    ZX Evolution 4096 Rev.C + NeoGS 4096 Rev.C + PAL Coder Rev.C + FDD 3.5/HDD/CDROM
    Reverse U8

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

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

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

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

Ваши права

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