User Tag List

Показано с 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
    Размещение рекламы на форуме способствует его дальнейшему развитию

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

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

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

Ваши права

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