Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб окт 20, 2018 19:03

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 110 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.
Автор Сообщение
 Заголовок сообщения: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 02:03 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 521
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 22 раз.
Ежели есть набросок стандарта, дык надо его реализовать и посмотреть что получится.
Начал приводить свой форт к рекомендации от RFS и тут-же напоролся.

В наброске RFS сказано :
2/ - разделить верхний элемент стека на два
D2/ - разделить верхний двойной элемент стека на два

Дык неправильно это !

Объясню почему. Берем всеми любимый SPF и начинаем :
-3 2/ .
-2 Ok
-3 2 / .
-1 Ok

Результат выходит разный.
Ну и какое из этих двух действий было делением верхнего элемента стека на два, а какое не было ?

Вообще-то были оба. Только 2/ - это было деление с округлением по полу, а 2 / -
было симметричное деление (так инструкция IDIV от 80x86 делит). Ну нельзя в одном
и том-же стандарте под делением подразумевать не пойми что. Либо в стандарте
нужно провозгласить, что одна и та-же форт система может делить по разному
зависит от того как и чем поделишь (2/ - одним образом, а 2 / - другим), либо обозвать
/ - собственно делением, а 2/ - сдвигом с распространением знака и лишь в скобках
дать этому сдвигу второе толкование - (деление на два с округлением по полу).


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 08:26 
Не в сети
Аватара пользователя

Зарегистрирован: Ср мар 21, 2007 00:16
Сообщения: 154
Благодарил (а): 2 раз.
Поблагодарили: 2 раз.
Ethereal писал(а):
В наброске RFS сказано :
2/ - разделить верхний элемент стека на два

Всегда считал, что это SHRA - арифметический сдвиг вправо.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 10:09 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
white_TigR писал(а):
Всегда считал, что это SHRA - арифметический сдвиг вправо.

Да так и есть, на один разряд вправо с сохранением старшего разряда.
2/ и 2 / выглядят одинаково, что и могло привести в заблуждение первописателей RuFS.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 10:17 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Так лучше обобщить 2/ и 2* до сдвигов >> и << на любое число бит.
Тогда и вопросов не будет, и появится быстрая операция умножения-деления.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 10:55 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
dynamic-wind писал(а):
Так лучше обобщить 2/ и 2* до сдвигов >> и << на любое число бит.
Тогда и вопросов не будет, и появится быстрая операция умножения-деления.

Можно, например в spf, уже есть ARSHIFT, не помню есть-ли ALSHIFT, но легко можно ввести.
У меня встроенный ассемблер, поэтому всегда можно по случаю быстро все 'недостающее' ввести.
Вот если бы не было ARSHIFT, ALSIFT, то:
Код:
: >> ( N n -- 'N ) C=A A=@P Aa>>  $ 4 Pa  ;
: <<  ( N n -- 'N ) C=A A=@P Aa<<  $ 4 Pa  ;     

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 14:30 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
chess писал(а):
не помню есть-ли ALSHIFT, но легко можно ввести

Посмотрел на код >> и << :

Код:
: >> ( N n -- 'N ) C=A A=@P Aa>>  $ 4 Pa ;  SEE >>
: << ( N n -- 'N ) C=A A=@P Aa<<  $ 4 Pa ;  SEE <<

лог
Код:
CODE >>
5D06D3 8BC8             MOV     ECX , EAX
5D06D5 8B4500           MOV     EAX , 0 [EBP]
5D06D8 D3F8             SAR     EAX , CL
5D06DA 8D6D04           LEA     EBP , 4 [EBP]
5D06DD C3               RET     NEAR
END-CODE
( 11 bytes, 5 instructions )


CODE <<
5D06EF 8BC8             MOV     ECX , EAX
5D06F1 8B4500           MOV     EAX , 0 [EBP]
5D06F4 D3E0             SHL     EAX , CL
5D06F6 8D6D04           LEA     EBP , 4 [EBP]
5D06F9 C3               RET     NEAR END-CODE
( 11 bytes, 5 instructions )

Ok

Оказывается код SAL и SHL (ариф. сдвиг влево и лог. сдвиг влево абсолютно одинаковы)
Теперь понятно почему в spf нет ALSHIFT, оно абсолютно тоже что и LSHIFT.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 15:05 
Не в сети
Аватара пользователя

Зарегистрирован: Пт дек 26, 2008 21:16
Сообщения: 407
Откуда: Великий Новгород
Благодарил (а): 9 раз.
Поблагодарили: 3 раз.
chess писал(а):
Теперь понятно почему в spf нет ALSHIFT, оно абсолютно тоже что и LSHIFT.
Величайшее открытие :hey; Может стоило сначала почитать , хотя бы в википедии, про сдвиги, а заодно и про проблемы целочисленного деления :?: .


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 15:21 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
_Harry писал(а):
Величайшее открытие Может стоило сначала почитать , хотя бы в википедии, про сдвиги, а заодно и про проблемы целочисленного деления .

Не пользовался арифметическим сдвигом влево.
Зачем читать, когда за минуту можно узнать из своего форта. :)

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 16:36 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6418
Благодарил (а): 14 раз.
Поблагодарили: 101 раз.
chess писал(а):
Зачем читать, когда за минуту можно узнать из своего форта.

Хотя бы затем, чтобы убедиться, что в СвойФорт оно попало в правильном варианте :)

Арифметический сдвиг влево можно сделать хотя бы для комплектности.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 19:13 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4954
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
Ethereal писал(а):
В наброске RFS сказано :
2/ - разделить верхний элемент стека на два
D2/ - разделить верхний двойной элемент стека на два

дык, атавизм это. С тех времен пошло, когда операция деления была медленной, а деление на два было удобно реализовывать, как отдельный примитив. Сейчас данные операции имеют смысл только при реализации их в ядре процессора. В остальных случаях можно писать: 2 / или 2 DS/

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 19:27 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Хищник писал(а):
Хотя бы затем, чтобы убедиться, что в СвойФорт оно попало в правильном варианте

Арифметический сдвиг влево можно сделать хотя бы для комплектности.

Да это еще 3 года назад сделано с проверками, а википедия это в последнюю очередь, есть же более достоверные источники. Просто я им этим левым ар. сдвигом ни разу после не пользовался.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 19:39 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
mOleg писал(а):
дык, атавизм это. С тех времен пошло, когда операция деления была медленной, а деление на два было удобно реализовывать, как отдельный примитив.

Тут вы не правы, попрежнему сдвиг делается быстрее чем деление и ни на какие-нибудь 10%,
а примерно в 2 раза.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 19:46 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 4954
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 18 раз.
Поблагодарили: 56 раз.
chess писал(а):
Тут вы не правы, попрежнему сдвиг делается быстрее чем деление и ни на какие-нибудь 10%,а примерно в 2 раза.

И тем не менее устарело. По-нормальному, оптимизатор должен сам такие случаи "просекать" 8) А вот добавление лишней сущности в данном случае сейчас уже не оправдано.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 19:51 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
chess писал(а):
а примерно в 2 раза.


Вызов ассемблерного слова и NEXT тоже чудесно ускоряется в 2 раза?

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: RFS, замечания от Ethereal
СообщениеДобавлено: Ср сен 21, 2011 20:00 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
mOleg писал(а):
А вот добавление лишней сущности в данном случае сейчас уже не оправдано.

Какой сущности? Арифметический сдвиг вправо - это лишняя сущность? Вы о чем собственно?

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 110 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.

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


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

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


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

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