[Fwd: Optimisation MOVE]

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[Fwd: Optimisation MOVE]

Andrey Cherezov

-------- Исходное сообщение --------
Дата: Tue, 24 Mar 2009 04:22:48 +0300
От: Ivanov Arthur - lead.programmer [hidden email]

которые в Вашем Форте записано несколько неуклюже.

: MOVE ( addr1 addr2 u -- ) \ 94
\ Если u больше нуля, копировать содержимое u байт из addr1 в addr2.
\ После MOVE в u байтах по адресу addr2 содержится в точности то же,
\ что было в u байтах по адресу addr1 до копирования.
  >R 2DUP SWAP R@ + U< \ назначение попадает в диапазон источника или левее
  IF 2DUP U<           \ И НЕ левее
     IF R> CMOVE> ELSE R> CMOVE THEN
  ELSE R> CMOVE THEN
;

На самом деле алгоритм требует только одной проверки и записывается
очень лаконично :

: MOVE ( addr1 addr2 u -- ) \ 93
\ Если u больше нуля, копировать содержимое u байт из addr1 в addr2.
\ После MOVE в u байтах по адресу addr2 содержится в точности то же,
\ что было в u байтах по адресу addr1 до копирования.
  >R 2DUP U<
  IF R> CMOVE> ELSE R> CMOVE THEN
;


------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev
Reply | Threaded
Open this post in threaded view
|

Re: [Fwd: Optimisation MOVE]

Ruvim Pinka
День добрый!

2009/3/24 Andrey Cherezov <[hidden email]>

-------- Исходное сообщение --------
Дата: Tue, 24 Mar 2009 04:22:48 +0300
От: Ivanov Arthur - lead.programmer [hidden email]

которые в Вашем Форте записано несколько неуклюже.

: MOVE ( addr1 addr2 u -- ) \ 94
\ Если u больше нуля, копировать содержимое u байт из addr1 в addr2.
\ После MOVE в u байтах по адресу addr2 содержится в точности то же,
\ что было в u байтах по адресу addr1 до копирования.
  >R 2DUP SWAP R@ + U< \ назначение попадает в диапазон источника или левее
  IF 2DUP U<           \ И НЕ левее
     IF R> CMOVE> ELSE R> CMOVE THEN
  ELSE R> CMOVE THEN
;

На самом деле алгоритм требует только одной проверки и записывается
очень лаконично :

: MOVE ( addr1 addr2 u -- ) \ 93
\ Если u больше нуля, копировать содержимое u байт из addr1 в addr2.
\ После MOVE в u байтах по адресу addr2 содержится в точности то же,
\ что было в u байтах по адресу addr1 до копирования.
  >R 2DUP U<
  IF R> CMOVE> ELSE R> CMOVE THEN
;

Должно быть, "CMOVE" работает быстрей, чем "CMOVE>", поэтому ему и отдается предпочтение даже тогда, когда addr1 < addr2 и области не перекрываются.

Для убедительного выяснения требуется проводить тесты ;)

--
Ruvim

------------------------------------------------------------------------------
Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are
powering Web 2.0 with engaging, cross-platform capabilities. Quickly and
easily build your RIAs with Flex Builder, the Eclipse(TM)based development
software that enables intelligent coding and step-through debugging.
Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com
_______________________________________________
Spf-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/spf-dev