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  +
+ 0x40 + 0xFFFFFF80 AND
+ IF EVEN-EBP THEN ;

+: 2?EBP OVER 2+ X?EBP ;
+: 3?EBP OVER 3 + X?EBP ;

- DUP3B?[EBP] M_WL 2_,_STEP +EBP REPEAT
+ DUP3B?[EBP] M_WL 2?EBP 2_,_STEP +EBP REPEAT

- DUP 45C7 = M_WL 2_,_STEP +EBP 4_,_STEP_ REPEAT \ MOV X [EBP] , # X
+ DUP 45C7 = M_WL 2?EBP 2_,_STEP +EBP 4_,_STEP_ REPEAT \ MOV X [EBP] , # X

- DUP 85448B = M_WL 3_,_STEP +EBP REPEAT \ MOV EAX, X [EBP] [EAX*4]
+ DUP 85448B = M_WL 3?EBP 3_,_STEP +EBP REPEAT \ MOV EAX, X [EBP] [EAX*4]

Автор:  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/