Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 13:40

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Ошибки оптимизатора
СообщениеДобавлено: Чт ноя 06, 2008 11:03 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Разворачивал циклы однотипных операций. Обнаружил ошибки в работе оптимизатора.
Вот простейший пример(работал в консоли):
Код:
: 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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 06, 2008 14:07 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Доступ к 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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 06, 2008 15:12 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Заменил строку
Код:
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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки оптимизатора
СообщениеДобавлено: Ср июл 07, 2010 13:08 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
В оптимизаторе не учтено, что смещение указателя стека параметров в пределах байта.
Поэтому
Код:
: s1 
1 2 3 .... 32 33 ; 

будет некорректно скомпилировано и даст ошибку. Что с этим делать решать Михаилу :)

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки оптимизатора
СообщениеДобавлено: Чт июл 08, 2010 15:43 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
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]


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки оптимизатора
СообщениеДобавлено: Чт июл 08, 2010 15:55 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Mihail писал(а):
Честно говоря я этим принебрег.

В принципе, конечно, можно и пренебречь. Но некоторые захотят
обрабатывать числовые файлы с помощью EVALUATE.
Стек тот же массив. Поэтому лучше все-же не пренебрегать и учитывать
то, что стек может быть и очень большим.
За коррекцию - спасибо.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки оптимизатора
СообщениеДобавлено: Чт дек 13, 2012 17:02 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Код:
\ 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 )   \ без оптимизатора - нет ошибок

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки оптимизатора
СообщениеДобавлено: Чт дек 13, 2012 22:25 
Не в сети
Moderator
Moderator

Зарегистрирован: Ср май 10, 2006 15:37
Сообщения: 1132
Откуда: Chelyabinsk ( Ural)
Благодарил (а): 0 раз.
Поблагодарили: 9 раз.
А какая версия SP-Forth?
У меня вроде всё правильно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки оптимизатора
СообщениеДобавлено: Пт дек 14, 2012 11:42 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Kopa писал(а):
У меня вроде всё правильно.


Однако, всем следует обновить оптимизатор. Я сам нашел ошибку совсем недавно
http://spf.cvs.sourceforge.net/viewvc/spf/src/macroopt.f?revision=1.79


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ошибки оптимизатора
СообщениеДобавлено: Пт дек 14, 2012 22:42 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
Kopa писал(а):
А какая версия SP-Forth? У меня вроде всё правильно.

Версия 4.20 под Windows.
А тут был-бы более подходящим вопрос о версии файла macroopt.f.
Давно не заходил в репозиторий SPF, а там, как раз, ошибку, подобную обнаруженной мной, и исправили (в версии 1.78 файла macroopt.f).

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB