nedoPC.org

Community for electronics hobbyists, established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 12 Dec 2024 06:15



Reply to topic  [ 120 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8
[SDK] Старая тема про nedoPC SDK (август 2004) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Shaos wrote:
А можно пойти по пути, по которому пошли другие продвинутые компиляторы сей для 8080 - пробегание специальным оптимизатором по сгенерённому ассемблерному исходнику с заменой распознанных последовательностей инструкций на более оптимальные эквиваленты (см. https://en.wikipedia.org/wiki/Peephole_optimization) - например xm=@hibyte(xm) сейчас скомпилируется вот в такой исходный код Robby:
Code:
XM=(((XM)>>8) & #00FF)
который через 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
тут например сразу же видно, что вот тут:
Code:
        LXI_H,  #0000
\ 0xF5
        PUSH_H
        LXI_H,  #0000
можно опустить второй LXI_H, #0000 т.к. в HL уже 0 и далее:
Code:
\ 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
можно заменить на
Code:
MVI_H, 0

Первый PUSH_H и последний POP_H тоже можно убрать т.к. они бессмысленны...

P.S. Также можно опционально делать оптимизацию по размеру в ущерб скорости (скажем если надо утолкать большую программу Robby в небольшую память микрокомпьютера и на быстродействие наплевать), когда устойчивые конструкции типа:
Code:
        MOV_A,D
        ANA_H
        MOV_H,A
        MOV_A,E
        ANA_L
        MOV_L,A
будут заменяться на вызов подпрограмм типа CALL HL_AND_DE

P.P.S. Хотя наверное будет проще научить ROBBYCC распознавать паттерны в длинных выражениях (коды операций не совпадают с кодами команд поэтому теоретически их можно отнести к одному классу и работать с ними единообразно), а для опциональной оптимизации по размеру добавить в __RULES условную компиляцию, чтобы для каждой команды одновременно описывались бы быстрая версия и компактная версия...
С другой стороны отдельная утилита для peephole-оптимизации выглядит интересным решением - вот ещё:
Code:
        LXI_H,  #0000
\ 0xF3
        CALL    _X_GET
превращается в
Code:
       LHLD @BASE+0 \ тут утилита может посчитать конкретный адрес и сразу вставить его в генерируемый код
а
Code:
\ 0xF5
        PUSH_H
        LXI_H,  #0008
\ 0xD0
        POP_D
        CALL SHIFTR
в
Code:
MOV_D,H
MOV_E,L
MVI_L,       8
CALL         SHIFTR
( а вот если бы это был сдвиг влево на 8 бит, то это можно было просто заменить на MOV_H,E и MVI_L, 0 : )

Вобщем интересно получается :)

P.S. По большому счёту такую оптимизацию логично применять только к длинным выражениям, которые в __RULES уже описаны отдельно от других команд RobbyVM и поэтому наверное можно этот самый peephole затолкать в ту же самую утилиту кросс-компиляции ROBBYCC, применяя оптимизацию каждый раз, когда очередное выражение готово, а правила конверсии завести в том же файле __RULES - так сказать всё в одном чтобы было (плюс эту оптимизацию можно включать специально с помощью новой опции -O).

P.P.S. Опция -O уже занята, так что пусть будет -T...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Aug 2024 00:47
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Да, вот он обработчик expr стоящий отдельно в ROBBYCC:
Code:
  if(!strcmp(s,"expr"))
  {
     k = ro[cur++];
     for(i=0;i<k;i++)
     {
        j = ro[cur++];
        sprintf(str,"0x%2.2X",j);
        if(j==0xF5)
        {
           sh = (signed short*)&ro[cur];
           w[1] = *sh;
           cur += 2;
           i += 2;
        }
        l = Find("EXPR",str);
        if(l==NULL) return 0;
        Comment(str);
        if(Write(l->next)<0) return 0;
     }
     return 1;
  }
В случае включения оптимизации опцией командной строки -T (оптимизация по времени) можно вместо посылания в выходной файл через Write, накопить выхлоп в односвязном списке строк Text и пробежаться по нему ища паттерны из peephole, которые будут описаны в конце __RULES (держать всё в одном файле логично т.к. эти паттерны peephole будут зависеть от правил генерации кода находящихся в том же файле __RULES) и уже потом заслать результат на выход через Write...

P.S. Кстати вот эта фигня на big-endian машинах будет работать неправильно:
Code:
sh = (signed short*)&ro[cur];
Чтобы работало везде надо заменить этот код на:
Code:
sh = ro[cur] | (ro[cur+1]<<8);

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Aug 2024 20:28
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Вот примерно так будет выглядеть секция *PEEPHOLE в конце LIB/I8080/__RULES - правила разделяются строчками с минусами, а внутри каждого правила то, что было до и то, что будет после разделяются знаком равно:
Code:
// Peephole optimization rules (Aug 2024)
*PEEPHOLE
--------
        LXI_H,  #FF0A
        CALL    _X_GET
=
        LHLD    @REG_A
--------
        LXI_H,  #FF0B
        CALL    _X_GET
=
        LHLD    @REG_B
--------
        LXI_H,  #FF0C
        CALL    _X_GET
=
        LHLD    @REG_C
--------
        LXI_H,  #FF0E
        CALL    _X_GET
=
        LHLD    @REG_L
--------
        LXI_H,  %w1p
        CALL    _X_GET
=
        LHLD    %base+%w1p+%w1p
--------
*END
%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...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


03 Aug 2024 16:46
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Добавил в репу Makefile и nedomake-скрипт Linux.N для сборки всего-всего под линух (но пока без peephole):
Attachment:
Screenshot from 2024-08-04 15-11-54.png
Screenshot from 2024-08-04 15-11-54.png [ 25.92 KiB | Viewed 1721 times ]
Теперь у кого есть желание может попробовать поиграться с nedoPC SDK, а мне наверное какую-никакую доку с туториалом надо начать писать потихоньку :rotate:

P.S. Немного упростил инструкцию по сборке - теперь предлагается клонировать репу в директорию с именем nedoPC.org :mrgreen:

P.P.S. Также сделал чтобы http://nedoPC.org/sdk форвардило на недовики-страничку http://www.nedopc.org/nedopc/SDK/About (на которой пока ничего нету), чтобы окончательно всех запутать...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


04 Aug 2024 14:28
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Доку наверное надо городить на недовики - вот думаю по языку Robby и по самому SDK всё свалить в одну викигруппу SDK - типа будут статьи SDK/NEDOMAKE, SDK/ROBBYC, SDK/ROBBYCC, SDK/IF, SDK/FOR, SDK/RET и т.д. на двух языках (ENG и RUS) и с перекрёстными ссылками друг на друга, и, наверное, надо иметь страничку, где все эти мелкие статьи будут склеены вместе, чтобы можно было разом всё распечатать (для некоторых это всё ещё актуально?), типа вот такого: http://robots.chat.ru/rw1_r.html

P.S. Или всё-таки вики прям на гитлабе держать?...

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


05 Aug 2024 22:26
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Что-то запал на исходе похоже - надо что ли как-то по-быстрому закончить допиливание SDK и пойти заниматься другими вопросами:


Attachments:
Screenshot from 2024-08-11 21-17-03.png
Screenshot from 2024-08-11 21-17-03.png [ 5.48 KiB | Viewed 1472 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
11 Aug 2024 21:19
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Уже 3 недели ничего не деланья...


Attachments:
Screenshot from 2024-08-25 23-14-18.png
Screenshot from 2024-08-25 23-14-18.png [ 5.19 KiB | Viewed 1212 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
25 Aug 2024 23:15
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
4 недели ничего не деланья...


Attachments:
Screenshot from 2024-09-01 20-18-11.png
Screenshot from 2024-09-01 20-18-11.png [ 5.65 KiB | Viewed 1065 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
01 Sep 2024 20:19
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2023 06:59
Posts: 292
Reply with quote
Кстати, а Millfork на форуме обсуждался?

_________________
uselessretro.blogspot.com


02 Sep 2024 09:11
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Вот тут немножко было: viewtopic.php?f=93&t=18842&p=173994&hilit=Millfork#p173994

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Sep 2024 10:22
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2023 06:59
Posts: 292
Reply with quote
Кстати, однажды говорили за sjasmplus(не нашел этого сообщения). Yе надо указывать device, достаточно добавить OUTPUT filename

_________________
uselessretro.blogspot.com


02 Sep 2024 21:47
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Не надо ничего указывать, надо юзать ZMAC :lol:

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


02 Sep 2024 22:56
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2023 06:59
Posts: 292
Reply with quote
ууу, это не наши методы(:

_________________
uselessretro.blogspot.com


02 Sep 2024 23:31
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Надо уже что-то поделать для SDK, а то пока я что-то непонятное рисую на графике активности GitLab, изредка пушая в другие репы:


Attachments:
Screenshot from 2024-09-21 17-23-39.png
Screenshot from 2024-09-21 17-23-39.png [ 5.64 KiB | Viewed 726 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
21 Sep 2024 17:26
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23469
Location: Silicon Valley
Reply with quote
Продолжаю рисовать прямые линии и яркие точки на диаграмме активности в гитлабе :lol:


Attachments:
Screenshot from 2024-09-28 23-05-17.png
Screenshot from 2024-09-28 23-05-17.png [ 5.73 KiB | Viewed 558 times ]

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973
29 Sep 2024 00:18
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 120 posts ]  Go to page Previous  1 ... 4, 5, 6, 7, 8

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.