Forth http://fforum.winglion.ru/ |
|
Ошибки оптимизатора http://fforum.winglion.ru/viewtopic.php?f=18&t=1645 |
Страница 1 из 1 |
Автор: | chess [ Чт ноя 06, 2008 11:03 ] |
Заголовок сообщения: | Ошибки оптимизатора |
Разворачивал циклы однотипных операций. Обнаружил ошибки в работе оптимизатора. Вот простейший пример(работал в консоли): Код: : 2PLUS + + ;
Ok 1 2 3 2PLUS . 6 Ok : S1 1 2 3 2PLUS ; Ok S1 . 7 Ok \ это ошибка - результат должен быть не 7, а 6 : S2 1 2 3 + + ; Ok S2 . 6 Ok |
Автор: | Mihail [ Чт ноя 06, 2008 14:07 ] |
Заголовок сообщения: | |
Доступ к http://spf.cvs.sourceforge.net у меня будет не ранше чем завтра. Вообще надо к строке Код: OP2 @ W@ 45C7 XOR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR Добавить дополнитьельное условие Код: OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OP2 @ W@ 45C7 XOR OR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR |
Автор: | chess [ Чт ноя 06, 2008 15:12 ] |
Заголовок сообщения: | |
Заменил строку Код: OP2 @ W@ 45C7 XOR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR на Код: OP2 @ 2+ C@
OP0 @ 2+ C@ XOR OP2 @ W@ 45C7 XOR OR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR и ошибки указанного выше типа исчезли - спасибо. |
Автор: | chess [ Ср июл 07, 2010 13:08 ] |
Заголовок сообщения: | Re: Ошибки оптимизатора |
В оптимизаторе не учтено, что смещение указателя стека параметров в пределах байта. Поэтому Код: : s1 1 2 3 .... 32 33 ; будет некорректно скомпилировано и даст ошибку. Что с этим делать решать Михаилу |
Автор: | Mihail [ Чт июл 08, 2010 15:43 ] |
Заголовок сообщения: | Re: Ошибки оптимизатора |
chess писал(а): В оптимизаторе не учтено, что смещение указателя стека параметров в пределах байта. Честно говоря я этим принебрег. Не думал, что кто-то создаст линейный участок кода, в котором на стек будет положено более 32-х значений. Что-то опять проблема с CVS Требуемые изменения: +: X?EBP C@ C>S OFF-EBP + |
Автор: | chess [ Чт июл 08, 2010 15:55 ] |
Заголовок сообщения: | Re: Ошибки оптимизатора |
Mihail писал(а): Честно говоря я этим принебрег. В принципе, конечно, можно и пренебречь. Но некоторые захотят обрабатывать числовые файлы с помощью EVALUATE. Стек тот же массив. Поэтому лучше все-же не пренебрегать и учитывать то, что стек может быть и очень большим. За коррекцию - спасибо. |
Автор: | chess [ Чт дек 13, 2012 17:02 ] |
Заголовок сообщения: | Re: Ошибки оптимизатора |
Код: \ DIS-OPT
VARIABLE VAR1 5 VAR1 ! VARIABLE VAR2 1 VAR2 ! : SUBR VAR2 @ VAR1 @ LSHIFT ; SUBR 5 VAR1 ! 32 VAR2 ! : SUBR1 VAR2 @ VAR1 @ RSHIFT ; SUBR1 ( 2048 0 ) \ с оптимизатором - ошибки ( 32 1 ) \ без оптимизатора - нет ошибок |
Автор: | Kopa [ Чт дек 13, 2012 22:25 ] |
Заголовок сообщения: | Re: Ошибки оптимизатора |
А какая версия SP-Forth? У меня вроде всё правильно. |
Автор: | Mihail [ Пт дек 14, 2012 11:42 ] |
Заголовок сообщения: | Re: Ошибки оптимизатора |
Kopa писал(а): У меня вроде всё правильно. Однако, всем следует обновить оптимизатор. Я сам нашел ошибку совсем недавно http://spf.cvs.sourceforge.net/viewvc/spf/src/macroopt.f?revision=1.79 |
Автор: | chess [ Пт дек 14, 2012 22:42 ] |
Заголовок сообщения: | Re: Ошибки оптимизатора |
Kopa писал(а): А какая версия SP-Forth? У меня вроде всё правильно. Версия 4.20 под Windows. А тут был-бы более подходящим вопрос о версии файла macroopt.f. Давно не заходил в репозиторий SPF, а там, как раз, ошибку, подобную обнаруженной мной, и исправили (в версии 1.78 файла macroopt.f). |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |