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

User Tag List

Страница 57 из 83 ПерваяПервая ... 535455565758596061 ... ПоследняяПоследняя
Показано с 561 по 570 из 824

Тема: Пожелания и планы по эмулятору Башкирия-2М

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

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Основная проблема сейчас: в отладочной информации никак не отражена оптимизация. Например, в результате оптимизации переменные были размещены в регистрах, и доступ к локальным переменным через IX больше стал не нужен. В итоге, стандартный пролог функции PUSH IX/LD IX,0/ADD IX,SP был выкинут, к аргументам он адресуется через SP, но в отладочной информации об этом ни байта, более того, смещения к аргументам так и остались с учётом того, что в стек кладётся IX. Но с этой мелочью я справился (проверяю наличие пролога). Гораздо хуже, что иногда, несмотря на то, что переменная находится в стеке, и в отладочной информации именно это и сказано, переменная временно располагается в регистре, т.е. при отладке по шагам показываемое значение переменной (из стека) не соответствует реальному значению, т.е. переменная как-бы не меняется, хотя на самом деле это не так. А ещё, бывает, в отладочной информации сказано, что переменная в регистре, а имя регистра не указано (пустая строка). Вот так.

    ---------- Post added at 14:56 ---------- Previous post was at 14:49 ----------

    А ещё, такие перлы:
    Код:
    	ld	4 (ix),l
    	C$conio.c$99$1$30	= .
    	.globl	C$conio.c$99$1$30
    ;conio.c:99: } while (value != 0);
    	ld	5 (ix), h
    	ld	a, h
    	or	a,4 (ix)
    	jr	NZ,00101$
    Здесь: ld 5 (ix), h сохранение старшего байта переменной, относящееся к строке 98, и если мы стоим на строке 99, оно ещё не выполнилось. Отладчик покажет половину старого и половину нового значения переменной
    Маркер 99 строки похоже на строку раньше входит. Сначала идет присвоение (видимо 98 строка) - записью HL в IX+4+5, затем проверка на неноль (строка 99).
    Похоже на шутки от Peephole optimization. Если исключить опции оптимизации, то может оно получше станет? Тогда будем отлаживаться без оптимизации.
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

  2. #562
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,849
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    168 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

    ---------- Post added at 18:02 ---------- Previous post was at 17:46 ----------

    Действительно, с опцией --no-peep получилось так:
    Код:
    	ld	4 (ix),l
    	ld	5 (ix),h
    	C$conio.c$99$1$30	= .
    	.globl	C$conio.c$99$1$30
    ;conio.c:99: } while (value != 0);
    	ld	a,5 (ix)
    	or	a, 4 (ix)
    	or	a, a
    	jp	NZ,00101$

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

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    А можно поподробнее про Peephole optimization? Я искал ключи, чтобы отключить оптимизацию, но мне показалось что peephole optimization это какая-то конкретная оптимизация, а не вся, и я даже не стал пробовать. А опцию, чтобы отключить вообще всю оптимизацию я не нашёл.
    Ну, там правила описываются, типа "конструкции { AA; AA; BB } менять на { 2AA; BB }", оптимизатор шерстит окном в несколько соседних строк по тексту и по шаблону меняет совпадающие конструкции. Я особенно их не изучал, но думаю что переставлять или еще как перекашивать строки оно может.

    А опций компилятора там действительно богато:
    Код:
    3.2.8 Optimization Options
    --nogcse Will not do global subexpression elimination, this option may be used when the compiler creates
    undesirably large stack/data spaces to store compiler temporaries (spill locations, sloc). A warning
    message will be generated when this happens and the compiler will indicate the number of extra bytes
    it allocated. It is recommended that this option NOT be used, #pragma nogcse can be used to turn off
    global subexpression elimination for a given function only.
    --noinvariant Will not do loop invariant optimizations, this may be turned off for reasons explained for the previous
    option. For more details of loop optimizations performed see Loop Invariants in section 8.1.4. It is recommended that this option NOT be used, #pragma noinvariant can be used to turn off invariant optimizations for a given function only.
    --noinduction Will not do loop induction optimizations, see section strength reduction for more details. It is recommended that this option is NOT used, #pragma noinduction can be used to turn off induction optimizations for a given function only.
    --nojtbound Will not generate boundary condition check when switch statements are implemented using jumptables. See section 8.1.7 Switch Statements for more details. It is recommended that this option is
    NOT used, #pragma nojtbound can be used to turn off boundary checking for jump tables for a given function only.
    --noloopreverse Will not do loop reversal optimization.
    --nolabelopt Will not optimize labels (makes the dumpfiles more readable).
    --no-xinit-opt Will not memcpy initialized data from code space into xdata space. This saves a few bytes in code space if you don’t have initialized data.
    --nooverlay The compiler will not overlay parameters and local variables of any function, see section Parameters and local variables for more details.
    --no-peep Disable peep-hole optimization with built-in rules.
    --peep-file <filename> This option can be used to use additional rules to be used by the peep hole optimizer. See section 8.1.13 Peep Hole optimizations for details on how to write these rules.
    --peep-asm Pass the inline assembler code through the peep hole optimizer. This can cause unexpected changes to inline assembler code, please go through the peephole optimizer rules defined in the source file tree
    ’<target>/peeph.def’ before using this option.
    --peep-return Let the peep hole optimizer do return optimizations. This is the default without --debug.
    --no-peep-return Do not let the peep hole optimizer do return optimizations. This is the default with --debug.
    --opt-code-speed The compiler will optimize code generation towards fast code, possibly at the expense of code size.
    --opt-code-size The compiler will optimize code generation towards compact code, possibly at the expense of code speed.
    --fomit-frame-pointer Frame pointer will be omitted when the function uses no local variables.
    Я бы для начала удалил из командника компиляции ключи "--opt-*" и добавил все "--no-*", ну может кроме --no-xinit-opt и --nogcse
    Лучше сделать и жалеть, чем не сделать и жалеть.

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

  4. #564
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,849
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    168 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А что это за оптимизация?
    Код:
    	ld	a,-19 (ix)
    	ld	-33 (ix),a
    	ld	a,-18 (ix)
    	ld	-32 (ix),a
    00139$:
    	pop	hl
    	push	hl
    Здесь ix-33 это верхнее значение стека, pop hl как раз его и достаёт.

    ---------- Post added at 18:29 ---------- Previous post was at 18:16 ----------

    Цитата Сообщение от Error404 Посмотреть сообщение
    Я бы для начала удалил из командника компиляции ключи "--opt-*"
    У меня ни одного такого не используется. Похоже, он сам по-умолчанию всю оптимизацию активирует. Отключить всё подряд можно, но, думаю, нет необходимости. Хотя, попробовать нужно.

    ---------- Post added at 18:46 ---------- Previous post was at 18:29 ----------

    Похоже, постинкремент всегда обрабатывается так: для неувеличенного значения заводится временная переменная, туда копируется значение, и переменная увеличивается, далее используется временная переменная. А в вышеописанном случае эта временная переменная оказалась на вершине стека, что и вылилось в pop/push. Только я не понял, почему дальше увеличивалась уже временная переменная, а нормальная (смещение которой указано в отладочной информации) - вообще не использовалась.

  5. #565
    Tim0xA
    Гость

    По умолчанию

    b2m, что с "Кристой-2". Будет поддержка в эмуляторе?

  6. #566
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,849
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    168 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Tim0xA Посмотреть сообщение
    b2m, что с "Кристой-2". Будет поддержка в эмуляторе?
    Наверное будет Там ведь только видеовывод доделать, так?

  7. #567
    Tim0xA
    Гость

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    Наверное будет Там ведь только видеовывод доделать, так?
    Видеовывод, параллельный порт имеет отличия от вектора, плюс последовательный порт.
    Вся существенная инфа тут
    http://www.sensi.org/~svo/scalar/ware/562
    http://www.sensi.org/~svo/scalar/ware/703
    http://www.sensi.org/~svo/scalar/ware/842
    В "секретах" описаны еще разные варианты подключения контроллера дисковода.

  8. #568
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,849
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    168 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от b2m Посмотреть сообщение
    А что это за оптимизация?
    Незнаю, что и делать с оптимизацией. Вобщем, выложил на сайте текущую версию EMU IDE. Переменные показываются в текстовом окне Output. Если какая-либо переменная не показана, или не меняется в процессе отладки, значит (чаще всего) виновата оптимизация. Т.е. отладочная информация не соответствует коду. Вывод содержимого структур пока не сделан.

  9. #569
    Sinclair User Аватар для Eltaron
    Регистрация
    16.01.2005
    Адрес
    Ekaterinburg
    Сообщений
    2,045
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    144
    Спасибо Благодарностей получено 
    463
    Поблагодарили
    326 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Фиг там. Интеграцию с SDCC доделали только до компиляции. Отладчик SDCDB не прицеплен, полагаю ввиду его нестандартности. Т.к. для стандартных протоколов опции интеграции отладчиков в рассмотренном плагине Eclipse просматриваются
    Нету.
    Для любого gdb, отличного от стандартного, надо свой плагин к эклипсу писать. Eclipse шибко умный, он результат своей компиляции сам встроенными парсерами парсит, чтобы понять, может ли он это отлаживать.
    Более-менее какая-то гибкость появляется, если компилировать в ELF. Но для z80 таких компиляторов нет.
    Граф Дракула наш кумир, патамушта он вомпир!
    VKINK 9 : BORDER NOT PI

  10. #570
    Guru
    Регистрация
    24.01.2008
    Адрес
    Уфа
    Сообщений
    3,849
    Спасибо Благодарностей отдано 
    84
    Спасибо Благодарностей получено 
    231
    Поблагодарили
    168 сообщений
    Mentioned
    9 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Tim0xA Посмотреть сообщение
    b2m, что с "Кристой-2". Будет поддержка в эмуляторе?
    Сделал.

Страница 57 из 83 ПерваяПервая ... 535455565758596061 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 1034
    Последнее: 29.10.2021, 07:15
  2. Жалобы/пожелания по работе форума
    от Conan в разделе Форум
    Ответов: 6289
    Последнее: 14.03.2021, 00:19
  3. пожелания создателям эмуляторов
    от проф в разделе Эмуляторы
    Ответов: 24
    Последнее: 09.02.2007, 01:31
  4. Пожелания по сервисам форума
    от andrews в разделе Форум
    Ответов: 10
    Последнее: 14.08.2006, 13:47

Ваши права

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