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

User Tag List

Страница 8 из 13 ПерваяПервая ... 456789101112 ... ПоследняяПоследняя
Показано с 71 по 80 из 125

Тема: LLVM Backend для Z80

  1. #71
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  2. #72
    Activist Аватар для Sergey
    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    473
    Спасибо Благодарностей отдано 
    94
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    8 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    С другой стороны можно вместо HL использовать IX, тогда обращение будет выглядеть более приятно:
    Код:
    	ld e,(ix+offset)
    	ld d,(ix+offset+1)
    6 байт и всего две команды, но тут у нас выделение и освобождение памяти на стеке будет чуть больше размером, т.к. работать будем с IX.

    Если предположить, что наша программа будет находится в озу, то можно придти к такому варианту выделения памяти:
    Код:
    	ld (.stack),sp
    	ld hl,-size
    	add hl,sp
    	ld sp,hl
    	...
    	ld sp,0
    .stack	$-2
    	ret
    Дополнительно к этому можно добавить опцию, указывающую будет ли программа работать в озу или пзу, чтобы генерировать нужный код.

    Собственно вопросов всего три:
    1) Как лучше выделять память на стеке? Какой регистр использовать - HL или IX?
    2) Как обращаться к переменным на стеке
    3) Использовать лучше "честный" метод или сделать возможность включения более быстрого?

    Если еще есть какие-то замечения и/или пожелания по данному вопросу, буду рад выслушать.
    Немного поздновато, конечно. Но, тем не менее.
    Сам столкнулся вчера с такой проблемой:
    Да, во-первых, данные со стэка медленно забираются, а во-вторых, если в процедуре много работы с ними (особенно в циклах), то программа из за косвенной адресации через индексные регистры замедляется чрезвычайно! Ведь любая операция съедает 19 тактов, и это на 1 байт данных(!).
    Решил проблему так:
    взял вместо Си-исходника, сгенерённый SDCC asm-исходник. Добавил в конце п/п пустые переменные, соответствующие аргументам функции. В начале процедуры добавил копирование аргументов со стека через LDI/LDIR.
    Соответственно, вручную пришлось править весь исходник, но оно того стоило: теперь работает в разы быстрее.
    Думаю также с локальными переменными поступить.
    Последний раз редактировалось Sergey; 05.09.2013 в 11:14.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

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

    По умолчанию

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

  4. #74
    Activist Аватар для Sergey
    Регистрация
    23.12.2006
    Адрес
    Славный город Самара
    Сообщений
    473
    Спасибо Благодарностей отдано 
    94
    Спасибо Благодарностей получено 
    12
    Поблагодарили
    8 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    Sergey, на данный момент генерируется код, работающий со стеком через индексные регистры. В последствии можно будет сделать опцию и добавить какой-нибудь другой алгоритм передачи параметров.
    В описанном тобой способе есть свои минусы. Например не получится реализовать рекурсивные функции, однако, в некоторых случаях это приемлемо и даст хороший прирост скорости
    Это понятно. Также ещё этот метод не подойдёт для ПЗУ.
    Думаю, опцию можно реализовать как "__naked" в SDCC.

    Кстати, если что, готов в бетатестеры.

    ---------- Post added at 16:07 ---------- Previous post was at 16:00 ----------

    Ах да, чуть не забыл: реквестирую инструкцию препроцессора для выравнивания кода/данных на границу слова. В SDCC такой фичи очень не хватает, ведь DMA в TS-Config работает только с четными адресами.
    С уважением,
    Gris / Red Triangle.
    _____________________________________
    ZX-EVO/TS-Labs config/NGS/HDD/SD-card
    Amiga A1200/Blizzard 1230@50/32/60GB
    Amiga A1200/Apollo 1260@66/32/60GB
    UnAmiga (C5) AGA GM7123 VideoDAC

  5. #75
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вчера скачал всё репозитории.
    llvm собрался, а вот clang не захотел

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

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    вчера скачал всё репозитории.
    llvm собрался, а вот clang не захотел
    Собирал с помощью скрипта ./configure или cmake?
    ZX Evolution 4096 Rev.C + NeoGS 4096 Rev.C + PAL Coder Rev.C + FDD 3.5/HDD/CDROM
    Reverse U8

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

  8. #77
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    Собирал с помощью скрипта ./configure или cmake?
    cmake

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

    По умолчанию

    Странно. У меня с помощью cmake все собирается. Проблемы могут быть как раз только при использовании ../configure.
    Нужен лог сборки, чтобы понять в чем проблема.
    Можешь написать мне на почту или в аську, разберемся.
    ZX Evolution 4096 Rev.C + NeoGS 4096 Rev.C + PAL Coder Rev.C + FDD 3.5/HDD/CDROM
    Reverse U8

  10. #79
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    сейчас не могу и когда смогу не знаю. наверное я гдето сам прокосячил. но если доберусь - напишу.

  11. #80
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем поглядел.

    Собираю llvm:
    # cmake -DCMAKE_INSTALL_PREFIX=/home/salex/app-clang-z80/ ..
    # make -j6
    # make install

    Всё пучком, инсталлирует.

    Далее собираю clang

    #cmake -DCLANG_PATH_TO_LLVM_BUILD=/home/salex/app-clang-z80/ -DCMAKE_INSTALL_PREFIX=/home/salex/app-clang-z80/ ..
    # make

    Получаю:

    make[2]: *** Нет правила для сборки цели `/home/salex/app-clang-z80/bin/llvm-tblgen', требуемой для `include/clang/Driver/Options.inc.tmp'. Останов.
    make[1]: *** [include/clang/Driver/CMakeFiles/ClangDriverOptions.dir/all] Ошибка 2
    make: *** [all] Ошибка 2

    И ещё - многопоточная сборка для сlang вообще не работает почемуто. (Ключ make -j6)

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

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

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

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

Ваши права

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