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

User Tag List

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

Тема: LLVM Backend для Z80

  1. #1
    Member Аватар для EARL
    Регистрация
    17.01.2006
    Адрес
    Тамбов
    Сообщений
    97
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    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. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Activist
    Регистрация
    21.12.2005
    Адрес
    Kyiv/Ukraine
    Сообщений
    415
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

  4. #3
    Vitamin C++ Аватар для Vitamin
    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,254
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    34 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

    По умолчанию

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

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

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

  6. #5
    goblinish
    Гость

    По умолчанию

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

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

    По умолчанию

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

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

    По умолчанию

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

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

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

    По умолчанию

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

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

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

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

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

    По умолчанию

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


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

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

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

    По умолчанию

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

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

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

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

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

Ваши права

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