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

User Tag List

Страница 1 из 11 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 110

Тема: LLVM Backend для Z80

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

    По умолчанию LLVM Backend для Z80

    Сейчас работаю над сабжем. Если кто-то не в курсе, то вот пара ссылок:
    http://ru.wikipedia.org/wiki/LLVM
    http://habrahabr.ru/post/47878/
    http://llvm.org/
    На данном этапе возник вопрос как эффективнее выделять память на стеке, т.е. интерпретировать команду alloca:
    Код:
    <result> = alloca <type>[, <ty> <NumElements>][, align <alignment>]
    "Честный" способ выделения памяти выглядит примерно так:
    Код:
    	push hl
    	ld hl,-size
    	add hl,sp
    	ld sp,hl
    	...
    	ld hl,size
    	add hl,sp
    	ld sp,hl
    	pop hl
    	ret
    В данном случае существует минус в том, что обращаться к переменным выделенным на стеке придется следующим образом:
    Код:
    	ld hl,offset
    	add hl,sp
    	ld e,(hl)
    	inc hl
    	ld d,(hl)
    Получается 7 байт на то, чтобы считать слово на стеке. Как-то не очень хорошо))
    С другой стороны можно вместо 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) Использовать лучше "честный" метод или сделать возможность включения более быстрого?

    Если еще есть какие-то замечения и/или пожелания по данному вопросу, буду рад выслушать.

  2. Эти 9 пользователя(ей) поблагодарили EARL за это полезное сообщение:
    alone (18.10.2013), Andrew771 (01.10.2012), mastermind (01.10.2012), nzeemin (17.10.2012), perestoronin (25.11.2012), siril (01.10.2012), troosh (21.05.2015), Valen (21.10.2012), valker (09.10.2012)

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

  4. #2
    Activist
    Регистрация
    21.12.2005
    Адрес
    Kyiv/Ukraine
    Сообщений
    414
    Благодарностей: 48
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Интересная тема.
    А на какой стадии находитесь ? Что-то уже работает или только в начале ?

    По теме:
    Если сможете адресовать по HL, то будет хорошо.
    По IX тоже можно (чуть медленнее код будет).
    Думаю главное стабильность.

    P.S. Когда-то пробовал
    LLVM C++ ==> C backend ==> sdcc
    (хотелось на плюсах программить) но там свои проблемы были
    Последний раз редактировалось Valen; 28.09.2012 в 19:47.
    V6Z80P - Back for Good

  5. #3
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,041
    Благодарностей: 1426
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А что мешает заимплементить оба варианта и переключаться между ними с помощью опций?

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

    По умолчанию

    Цитата Сообщение от Valen Посмотреть сообщение
    Интересная тема.
    А на какой стадии находитесь ? Что-то уже работает или только в начале ?
    Сейчас реализовано немного.. Хм.. Возможность возвращения типов i8, i16. Обработка формальных переменных, в т.ч. есть возможность передавать некоторые параметры в регистрах, остальные на стеке. По сути надо доделать выделение памяти на стеке и дальше уже просто добавлять новые и новые команды.

    Цитата Сообщение от Vitamin Посмотреть сообщение
    А что мешает заимплементить оба варианта и переключаться между ними с помощью опций?
    Я думаю это будет лучшим вариантом, но по началу не хочу на этом зацикливаться и просто добавить какой-то один способ выделения.

    PS. Все наработки сейчас лежат вот здесь http://sourceforge.net/projects/llvmz80/

  7. Эти 2 пользователя(ей) поблагодарили EARL за это полезное сообщение:
    mastermind (01.10.2012), perestoronin (31.03.2014)

  8. #5
    goblinish
    Гость

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    А что мешает заимплементить оба варианта и переключаться между ними с помощью опций?
    Хабр головного мозга, очевидно же..

  9. #6
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Благодарностей: 192
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    1) Как лучше выделять память на стеке?
    Сначала вариант №1. Потом опцией самомодифицирующийся код, но это под вопросом.
    Цитата Сообщение от EARL Посмотреть сообщение
    Какой регистр использовать - HL или IX?
    2) Как обращаться к переменным на стеке
    Сам вчера-сегодня интересовался подобным вопросом, IX удобнее вышел.
    Цитата Сообщение от EARL Посмотреть сообщение
    но тут у нас выделение и освобождение памяти на стеке будет чуть больше размером, т.к. работать будем с IX.
    Выделяй через IX, освобождай через HL.
    Последний раз редактировалось NovaStorm; 28.09.2012 в 20:33.

  10. #7
    Master
    Регистрация
    27.01.2005
    Сообщений
    545
    Благодарностей: 290
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ИМХО, сделай, чтобы всё работало, а потом уж будешь оптимизировать.

    или остановишься на какомто варианте, или опцией разрулишь.

  11. Этот пользователь поблагодарил SfS за это полезное сообщение:
    alone (01.04.2014)

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

    По умолчанию

    NovaStorm, спасибо. Примерно так наверно и сделаю для начала.

    Цитата Сообщение от SfS Посмотреть сообщение
    ИМХО, сделай, чтобы всё работало, а потом уж будешь оптимизировать.

    или остановишься на какомто варианте, или опцией разрулишь.
    Да, оптимизацию буду делать уже на рабочем варианте)

    PS Если есть кто-то, кто знаком с LLVM или просто желает помочь в разработке бэкенда для Z80, то пишите в эту тему или на почту earl1k[собака]mail.ru. Буду рад любой помощи. Одна голова хорошо, а много - лучше.

  13. Эти 2 пользователя(ей) поблагодарили EARL за это полезное сообщение:
    mastermind (01.10.2012), siril (01.10.2012)

  14. #9
    Master
    Регистрация
    27.01.2005
    Сообщений
    545
    Благодарностей: 290
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от EARL Посмотреть сообщение
    NovaStorm, спасибо. Примерно так наверно и сделаю для начала.


    Да, оптимизацию буду делать уже на рабочем варианте)

    PS Если есть кто-то, кто знаком с LLVM или просто желает помочь в разработке бэкенда для Z80, то пишите в эту тему или на почту earl1k[собака]mail.ru. Буду рад любой помощи. Одна голова хорошо, а много - лучше.
    Да за gсс для z80 тебе пива не только я поставить готов)

  15. Этот пользователь поблагодарил SfS за это полезное сообщение:
    perestoronin (26.12.2012)

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

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    Да за gсс для z80 тебе пива не только я поставить готов)
    Ну это не gcc будет конечно, но clang тоже неплох, но сперва нужен рабочий LLVM backend

Страница 1 из 11 12345 ... ПоследняяПоследняя

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

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

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

Ваши права

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