С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Поддерживаю. Пора обновляться и смотреть что нового добавилось и изменилось в LLVM, ведь в прошлом месяце вышла новая версия этой замечательной системы.Вот только возьмусь за это где-то в конце августа-сентябре, т.к. через неделю отпуск и на работе надо дела кое-какие утрясти.
ZX Evolution 4096 Rev.C + NeoGS 4096 Rev.C + PAL Coder Rev.C + FDD 3.5/HDD/CDROM
Reverse U8
Вернулся из отпуска. Обновил репозиторий объединив имеющиеся наработки со свежей веткой LLVM.
Репозиторий: https://github.com/earl1k/llvm-z80
ZX Evolution 4096 Rev.C + NeoGS 4096 Rev.C + PAL Coder Rev.C + FDD 3.5/HDD/CDROM
Reverse U8
Немного поздновато, конечно.Но, тем не менее.
Сам столкнулся вчера с такой проблемой:
Да, во-первых, данные со стэка медленно забираются, а во-вторых, если в процедуре много работы с ними (особенно в циклах), то программа из за косвенной адресации через индексные регистры замедляется чрезвычайно! Ведь любая операция съедает 19 тактов, и это на 1 байт данных(!).
Решил проблему так:
взял вместо Си-исходника, сгенерённый SDCC asm-исходник. Добавил в конце п/п пустые переменные, соответствующие аргументам функции. В начале процедуры добавил копирование аргументов со стека через LDI/LDIR.
Соответственно, вручную пришлось править весь исходник, но оно того стоило: теперь работает в разы быстрее.
Думаю также с локальными переменными поступить.
Последний раз редактировалось Sergey; 05.09.2013 в 11:14.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Sergey, на данный момент генерируется код, работающий со стеком через индексные регистры. В последствии можно будет сделать опцию и добавить какой-нибудь другой алгоритм передачи параметров.
В описанном тобой способе есть свои минусы. Например не получится реализовать рекурсивные функции, однако, в некоторых случаях это приемлемо и даст хороший прирост скорости![]()
ZX Evolution 4096 Rev.C + NeoGS 4096 Rev.C + PAL Coder Rev.C + FDD 3.5/HDD/CDROM
Reverse U8
Это понятно. Также ещё этот метод не подойдёт для ПЗУ.
Думаю, опцию можно реализовать как "__naked" в SDCC.
Кстати, если что, готов в бетатестеры.
---------- Post added at 16:07 ---------- Previous post was at 16:00 ----------
Ах да, чуть не забыл: реквестирую инструкцию препроцессора для выравнивания кода/данных на границу слова. В SDCC такой фичи очень не хватает, ведь DMA в TS-Config работает только с четными адресами.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
вчера скачал всё репозитории.
llvm собрался, а вот clang не захотел![]()
Странно. У меня с помощью cmake все собирается. Проблемы могут быть как раз только при использовании ../configure.
Нужен лог сборки, чтобы понять в чем проблема.
Можешь написать мне на почту или в аську, разберемся.
ZX Evolution 4096 Rev.C + NeoGS 4096 Rev.C + PAL Coder Rev.C + FDD 3.5/HDD/CDROM
Reverse U8
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)