Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: Ошибки оптимизатора |
|
|
Kopa писал(а): А какая версия SP-Forth? У меня вроде всё правильно. Версия 4.20 под Windows. А тут был-бы более подходящим вопрос о версии файла macroopt.f. Давно не заходил в репозиторий SPF, а там, как раз, ошибку, подобную обнаруженной мной, и исправили (в версии 1.78 файла macroopt.f).
[quote="Kopa"]А какая версия SP-Forth? У меня вроде всё правильно.[/quote] Версия 4.20 под Windows. А тут был-бы более подходящим вопрос о версии файла macroopt.f. Давно не заходил в репозиторий SPF, а там, как раз, ошибку, подобную обнаруженной мной, и исправили (в версии 1.78 файла macroopt.f).
|
|
|
|
Добавлено: Пт дек 14, 2012 22:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: Ошибки оптимизатора |
|
|
Kopa писал(а): У меня вроде всё правильно. Однако, всем следует обновить оптимизатор. Я сам нашел ошибку совсем недавно http://spf.cvs.sourceforge.net/viewvc/spf/src/macroopt.f?revision=1.79
[quote="Kopa"]У меня вроде всё правильно.[/quote]
Однако, всем следует обновить оптимизатор. Я сам нашел ошибку совсем недавно [url]http://spf.cvs.sourceforge.net/viewvc/spf/src/macroopt.f?revision=1.79[/url]
|
|
|
|
Добавлено: Пт дек 14, 2012 11:42 |
|
|
|
|
|
Заголовок сообщения: |
Re: Ошибки оптимизатора |
|
|
А какая версия SP-Forth? У меня вроде всё правильно.
А какая версия SP-Forth? У меня вроде всё правильно.
|
|
|
|
Добавлено: Чт дек 13, 2012 22:25 |
|
|
|
|
|
Заголовок сообщения: |
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 ) \ без оптимизатора - нет ошибок
[code]\ 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 ) \ без оптимизатора - нет ошибок[/code]
|
|
|
|
Добавлено: Чт дек 13, 2012 17:02 |
|
|
|
|
|
Заголовок сообщения: |
Re: Ошибки оптимизатора |
|
|
Mihail писал(а): Честно говоря я этим принебрег. В принципе, конечно, можно и пренебречь. Но некоторые захотят обрабатывать числовые файлы с помощью EVALUATE. Стек тот же массив. Поэтому лучше все-же не пренебрегать и учитывать то, что стек может быть и очень большим. За коррекцию - спасибо.
[quote="Mihail"]Честно говоря я этим принебрег.[/quote] В принципе, конечно, можно и пренебречь. Но некоторые захотят обрабатывать числовые файлы с помощью EVALUATE. Стек тот же массив. Поэтому лучше все-же не пренебрегать и учитывать то, что стек может быть и очень большим. За коррекцию - спасибо.
|
|
|
|
Добавлено: Чт июл 08, 2010 15:55 |
|
|
|
|
|
Заголовок сообщения: |
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]
[quote="chess"]В оптимизаторе не учтено, что смещение указателя стека параметров в пределах байта.[/quote]
Честно говоря я этим принебрег. Не думал, что кто-то создаст линейный участок кода, в котором на стек будет положено более 32-х значений. Что-то опять проблема с CVS
Требуемые изменения:
[pre]+: X?EBP [url=http://fpauk.narod.ru/enc.html#C@]C@[/url] [url=http://fpauk.narod.ru/enc.html#C>S]C>S[/url] [url=http://fpauk.narod.ru/enc.html#OFF-EBP]OFF-EBP[/url] + + 0x40 + 0xFFFFFF80 [url=http://fpauk.narod.ru/enc.html#AND]AND[/url] + [url=http://fpauk.narod.ru/enc.html#IF]IF[/url] [url=http://fpauk.narod.ru/enc.html#EVEN-EBP]EVEN-EBP[/url] [url=http://fpauk.narod.ru/enc.html#THEN]THEN[/url] ; +: 2?EBP [url=http://fpauk.narod.ru/enc.html#OVER]OVER[/url] [url=http://fpauk.narod.ru/enc.html#2+]2+[/url] X?EBP ; +: 3?EBP [url=http://fpauk.narod.ru/enc.html#OVER]OVER[/url] 3 + X?EBP ; - DUP3B?[EBP] M_WL [url=http://fpauk.narod.ru/enc.html#2_,_STEP]2_,_STEP[/url] [url=http://fpauk.narod.ru/enc.html#+EBP]+EBP[/url] [url=http://fpauk.narod.ru/enc.html#REPEAT]REPEAT[/url] + DUP3B?[EBP] M_WL 2?EBP [url=http://fpauk.narod.ru/enc.html#2_,_STEP]2_,_STEP[/url] [url=http://fpauk.narod.ru/enc.html#+EBP]+EBP[/url] [url=http://fpauk.narod.ru/enc.html#REPEAT]REPEAT[/url] - [url=http://fpauk.narod.ru/enc.html#DUP]DUP[/url] 45C7 = M_WL [url=http://fpauk.narod.ru/enc.html#2_,_STEP]2_,_STEP[/url] [url=http://fpauk.narod.ru/enc.html#+EBP]+EBP[/url] [url=http://fpauk.narod.ru/enc.html#4_,_STEP_]4_,_STEP_[/url] [url=http://fpauk.narod.ru/enc.html#REPEAT]REPEAT[/url] \ MOV X [EBP] , # X + [url=http://fpauk.narod.ru/enc.html#DUP]DUP[/url] 45C7 = M_WL 2?EBP [url=http://fpauk.narod.ru/enc.html#2_,_STEP]2_,_STEP[/url] [url=http://fpauk.narod.ru/enc.html#+EBP]+EBP[/url] [url=http://fpauk.narod.ru/enc.html#4_,_STEP_]4_,_STEP_[/url] [url=http://fpauk.narod.ru/enc.html#REPEAT]REPEAT[/url] \ MOV X [EBP] , # X - [url=http://fpauk.narod.ru/enc.html#DUP]DUP[/url] 85448B = M_WL [url=http://fpauk.narod.ru/enc.html#3_,_STEP]3_,_STEP[/url] [url=http://fpauk.narod.ru/enc.html#+EBP]+EBP[/url] [url=http://fpauk.narod.ru/enc.html#REPEAT]REPEAT[/url] \ MOV EAX, X [EBP] [EAX*4] + [url=http://fpauk.narod.ru/enc.html#DUP]DUP[/url] 85448B = M_WL 3?EBP [url=http://fpauk.narod.ru/enc.html#3_,_STEP]3_,_STEP[/url] [url=http://fpauk.narod.ru/enc.html#+EBP]+EBP[/url] [url=http://fpauk.narod.ru/enc.html#REPEAT]REPEAT[/url] \ MOV EAX, X [EBP] [EAX*4][/pre]
|
|
|
|
Добавлено: Чт июл 08, 2010 15:43 |
|
|
|
|
|
Заголовок сообщения: |
Re: Ошибки оптимизатора |
|
|
В оптимизаторе не учтено, что смещение указателя стека параметров в пределах байта. Поэтому Код: : s1 1 2 3 .... 32 33 ; будет некорректно скомпилировано и даст ошибку. Что с этим делать решать Михаилу
В оптимизаторе не учтено, что смещение указателя стека параметров в пределах байта. Поэтому [code]: s1 1 2 3 .... 32 33 ; [/code] будет некорректно скомпилировано и даст ошибку. Что с этим делать решать Михаилу :)
|
|
|
|
Добавлено: Ср июл 07, 2010 13:08 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Заменил строку
Код: 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
и ошибки указанного выше типа исчезли - спасибо.
Заменил строку
[code]OP2 @ W@ 45C7 XOR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR[/code] на [code]OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OP2 @ W@ 45C7 XOR OR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR [/code]
и ошибки указанного выше типа исчезли - спасибо.
|
|
|
|
Добавлено: Чт ноя 06, 2008 15:12 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Доступ к 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
Доступ к http://spf.cvs.sourceforge.net у меня будет не ранше чем завтра.
Вообще надо к строке
[code]OP2 @ W@ 45C7 XOR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR[/code]
Добавить дополнитьельное условие
[code] OP2 @ 2+ C@ OP0 @ 2+ C@ XOR OP2 @ W@ 45C7 XOR OR \ MOV X1 [EBP], # 4444 \ $ 4444 5555 OR [/code]
|
|
|
|
Добавлено: Чт ноя 06, 2008 14:07 |
|
|
|
|
|
Заголовок сообщения: |
Ошибки оптимизатора |
|
|
Разворачивал циклы однотипных операций. Обнаружил ошибки в работе оптимизатора.
Вот простейший пример(работал в консоли):
Код: : 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
Разворачивал циклы однотипных операций. Обнаружил ошибки в работе оптимизатора.
Вот простейший пример(работал в консоли):
[code]: 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[/code]
|
|
|
|
Добавлено: Чт ноя 06, 2008 11:03 |
|
|
|
|