Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
| | | | Shaos wrote: А можно пойти по пути, по которому пошли другие продвинутые компиляторы сей для 8080 - пробегание специальным оптимизатором по сгенерённому ассемблерному исходнику с заменой распознанных последовательностей инструкций на более оптимальные эквиваленты (см. https://en.wikipedia.org/wiki/Peephole_optimization) - например xm=@hibyte(xm) сейчас скомпилируется вот в такой исходный код Robby: который через Robby-байткод скомпилируется вот в такой 8080 код: | | | | Code: \ *0x40 _j0024: \ 0xF5 PUSH_H LXI_H, #0000 \ 0xF5 PUSH_H LXI_H, #0000 \ 0xF3 CALL _X_GET \ 0xF5 PUSH_H LXI_H, #0008 \ 0xD0 POP_D CALL SHIFTR \ 0xF5 PUSH_H LXI_H, #00FF \ 0xC0 POP_D MOV_A,D ANA_H MOV_H,A MOV_A,E ANA_L MOV_L,A \ 0xF4 POP_D XCHG LXI_B, @BASE MVI_A, #FF SUB_H JNZ _l0004 MOV_H,A LXI_B, @REGS _l0004: CALL _V_SET POP_H
| | | | |
тут например сразу же видно, что вот тут: можно опустить второй LXI_H, #0000 т.к. в HL уже 0 и далее: можно заменить на Первый PUSH_H и последний POP_H тоже можно убрать т.к. они бессмысленны... P.S. Также можно опционально делать оптимизацию по размеру в ущерб скорости (скажем если надо утолкать большую программу Robby в небольшую память микрокомпьютера и на быстродействие наплевать), когда устойчивые конструкции типа: будут заменяться на вызов подпрограмм типа CALL HL_AND_DE P.P.S. Хотя наверное будет проще научить ROBBYCC распознавать паттерны в длинных выражениях (коды операций не совпадают с кодами команд поэтому теоретически их можно отнести к одному классу и работать с ними единообразно), а для опциональной оптимизации по размеру добавить в __RULES условную компиляцию, чтобы для каждой команды одновременно описывались бы быстрая версия и компактная версия... | | | | |
С другой стороны отдельная утилита для peephole-оптимизации выглядит интересным решением - вот ещё: превращается в а в ( а вот если бы это был сдвиг влево на 8 бит, то это можно было просто заменить на MOV_H,E и MVI_L, 0 : ) Вобщем интересно получается P.S. По большому счёту такую оптимизацию логично применять только к длинным выражениям, которые в __RULES уже описаны отдельно от других команд RobbyVM и поэтому наверное можно этот самый peephole затолкать в ту же самую утилиту кросс-компиляции ROBBYCC, применяя оптимизацию каждый раз, когда очередное выражение готово, а правила конверсии завести в том же файле __RULES - так сказать всё в одном чтобы было (плюс эту оптимизацию можно включать специально с помощью новой опции -O). P.P.S. Опция -O уже занята, так что пусть будет -T...
|
02 Aug 2024 00:47 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Да, вот он обработчик expr стоящий отдельно в ROBBYCC: В случае включения оптимизации опцией командной строки -T (оптимизация по времени) можно вместо посылания в выходной файл через Write, накопить выхлоп в односвязном списке строк Text и пробежаться по нему ища паттерны из peephole, которые будут описаны в конце __RULES (держать всё в одном файле логично т.к. эти паттерны peephole будут зависеть от правил генерации кода находящихся в том же файле __RULES) и уже потом заслать результат на выход через Write... P.S. Кстати вот эта фигня на big-endian машинах будет работать неправильно: Чтобы работало везде надо заменить этот код на:
|
02 Aug 2024 20:28 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Вот примерно так будет выглядеть секция *PEEPHOLE в конце LIB/I8080/__RULES - правила разделяются строчками с минусами, а внутри каждого правила то, что было до и то, что будет после разделяются знаком равно: %w1p будет означать слово, если оно положительное (если вдруг прочиталось отрицательное, то игнорируем и идём дальше) P.S. Чото неохота мне делать арифметику в __RULES так что наверное опишу короткие варианты только для первых скажем 100 переменных... P.P.S. Заодно у пользователей SDK появится возможность делать ассемблерные вставки без вычисления адреса переменной если это одна из первых 100 переменных - можно будет просто использовать LHLD @VAR_99 для чтения и SHLD @VAR_99 для записи (с номером от 0 до 99 - в сгенерённом ассемблерном коде будут 100 EQU с уже подсчитанными адресами) P.P.P.S. А можно научить ассемблерные вставки понимать &VAR (по аналогии с SAY) - чтобы при кросскомпиляции оно подменялось на @VARn...
|
03 Aug 2024 16:46 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Добавил в репу Makefile и nedomake-скрипт Linux.N для сборки всего-всего под линух (но пока без peephole): Теперь у кого есть желание может попробовать поиграться с nedoPC SDK, а мне наверное какую-никакую доку с туториалом надо начать писать потихоньку P.S. Немного упростил инструкцию по сборке - теперь предлагается клонировать репу в директорию с именем nedoPC.org P.P.S. Также сделал чтобы http://nedoPC.org/sdk форвардило на недовики-страничку http://www.nedopc.org/nedopc/SDK/About (на которой пока ничего нету), чтобы окончательно всех запутать...
|
04 Aug 2024 14:28 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Доку наверное надо городить на недовики - вот думаю по языку Robby и по самому SDK всё свалить в одну викигруппу SDK - типа будут статьи SDK/NEDOMAKE, SDK/ROBBYC, SDK/ROBBYCC, SDK/IF, SDK/FOR, SDK/RET и т.д. на двух языках (ENG и RUS) и с перекрёстными ссылками друг на друга, и, наверное, надо иметь страничку, где все эти мелкие статьи будут склеены вместе, чтобы можно было разом всё распечатать (для некоторых это всё ещё актуально?), типа вот такого: http://robots.chat.ru/rw1_r.htmlP.S. Или всё-таки вики прям на гитлабе держать?...
|
05 Aug 2024 22:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Что-то запал на исходе похоже - надо что ли как-то по-быстрому закончить допиливание SDK и пойти заниматься другими вопросами:
|
11 Aug 2024 21:19 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Уже 3 недели ничего не деланья...
|
25 Aug 2024 23:15 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
4 недели ничего не деланья...
|
01 Sep 2024 20:19 |
|
|
shiny
Maniac
Joined: 14 Oct 2023 06:59 Posts: 292
|
Кстати, а Millfork на форуме обсуждался?
_________________ uselessretro.blogspot.com
|
02 Sep 2024 09:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
|
02 Sep 2024 10:22 |
|
|
shiny
Maniac
Joined: 14 Oct 2023 06:59 Posts: 292
|
Кстати, однажды говорили за sjasmplus(не нашел этого сообщения). Yе надо указывать device, достаточно добавить OUTPUT filename
_________________ uselessretro.blogspot.com
|
02 Sep 2024 21:47 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Не надо ничего указывать, надо юзать ZMAC
|
02 Sep 2024 22:56 |
|
|
shiny
Maniac
Joined: 14 Oct 2023 06:59 Posts: 292
|
ууу, это не наши методы(:
_________________ uselessretro.blogspot.com
|
02 Sep 2024 23:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Надо уже что-то поделать для SDK, а то пока я что-то непонятное рисую на графике активности GitLab, изредка пушая в другие репы:
|
21 Sep 2024 17:26 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Продолжаю рисовать прямые линии и яркие точки на диаграмме активности в гитлабе
|
29 Sep 2024 00:18 |
|
|