Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.forth > #41592

Re: CMOVE/CMOVE>

From "HAA" <someone@microsoft.com>
Newsgroups comp.lang.forth
Subject Re: CMOVE/CMOVE>
Date 2015-08-28 22:39 +1000
Organization Aioe.org NNTP Server
Message-ID <mrpknd$37p$1@speranza.aioe.org> (permalink)
References <62627f57-1e63-4156-844a-db5708923aaf@googlegroups.com><2015Aug18.180551@mips.complang.tuwien.ac.at> <c3289222-a562-44db-a30a-1f8d58d0fc6b@googlegroups.com><cc2c79a3-48ce-400e-b3b6-4474c9c47917@googlegroups.com> <c4beff92-d7da-4b6c-a37a-b40478fd914f@googlegroups.com>

Show all headers | View raw


Mark Wills wrote:
>
> It uses locals. From some quick experiments, locals on a dumb (non-
> optimising) ITC makes things faster. The reason? All the stack juggling
> goes away. Those ROTs DUPs SWAPs etc are burning up time just getting
> the stack arranged. Locals on a dumb system takes that away. The
> argument doesn't hold on modern optimising systems.

I implemented TurboForth locals for LMI PC/Forth 3.2 (8086 ITC)
and ran a benchmark based on MOVBLK with and without locals.
A Pentium PC was used for the test.

Speed (I/O and CMOVE code replaced with 2DROP)

    locals            without locals
    63 sec          52 sec

Code size (less headers)

    locals            without locals
    122 bytes      92  bytes

Using an 8086 DTC forth

    locals            without locals
    21 sec          9 sec

The benchmark used for the test is shown below.  I'll post the source for
the LMI TurboForth locals if anyone wants it and you have no objection.
Your website doesn't mention whether derivative works are permitted.

   13
 0 \ TEST2
 1
 2 : bcopy ( src dest -- )
 3 \  CR ." Copy " SWAP U. ." to " U.
 4   SWAP BLOCK SWAP BUFFER 1024 CMOVE  UPDATE FLUSH
 5 ;
 6 : movblk1 ( src dest cnt -- )
 7   ?DUP IF
 8     SWAP  2 PICK - >R  OVER +
 9     R@ 0< IF  SWAP 1  ELSE  1- -1 THEN
10     R> 2SWAP DO  I 2DUP + 2DROP ( bcopy)  OVER +LOOP
11   THEN 2DROP ;
12
13
14
15

   14
 0 \ TEST2
 1
 2 : movblk2 ( src dest cnt -- )
 3   LOCALS{ src dest cnt cpydir }
 4   SET cnt   SET dest   SET src
 5   1 SET cpydir  src dest < IF
 6     cnt 1- +SET src    cnt 1- +SET dest    -1 SET cpydir
 7   THEN  ( flush? )  cnt 0 ?DO
 8 \    2 SPACES src . ." to " dest .
 9 \    src block drop  0 dest setblk  0 dirty flush
10 \    src BLOCK  dest BUFFER  1024 CMOVE  UPDATE  FLUSH
11  src dest 2DROP
12     cpydir +SET src  cpydir +SET dest
13   LOOP ;
14
15

   15
 0 \ TEST2
 1 : T1  7 EMIT  20 0 DO
 2     0 0 DO  10 12 5 movblk1  12 10 5 movblk1  LOOP
 3   LOOP  7 EMIT ;
 4
 5 : T2  7 EMIT  20 0 DO
 6     0 0 DO  10 12 5 movblk2  12 10 5 movblk2  LOOP
 7   LOOP  7 EMIT ;
 8
 9
10
11
12
13
14
15


Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

CMOVE/CMOVE> Mark Wills <markwills1970@gmail.com> - 2015-08-18 08:44 -0700
  Re: CMOVE/CMOVE> anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-08-18 16:05 +0000
    Re: CMOVE/CMOVE> november.nihal@gmail.com - 2015-08-18 09:34 -0700
      Re: CMOVE/CMOVE> anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-08-18 16:41 +0000
    Re: CMOVE/CMOVE> Mark Wills <markwills1970@gmail.com> - 2015-08-18 09:59 -0700
      Re: CMOVE/CMOVE> Michael Barry <barrym95838@yahoo.com> - 2015-08-18 10:10 -0700
        Re: CMOVE/CMOVE> hughaguilar96@gmail.com - 2015-08-18 10:41 -0700
          Re: CMOVE/CMOVE> "Alex McDonald" <blog@rivadpm.com> - 2015-08-18 23:55 +0100
            Re: CMOVE/CMOVE> anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-08-19 08:40 +0000
              Re: CMOVE/CMOVE> "Alex McDonald" <blog@rivadpm.com> - 2015-08-19 12:15 +0100
        Re: CMOVE/CMOVE> Mark Wills <markwills1970@gmail.com> - 2015-08-18 11:35 -0700
          Re: CMOVE/CMOVE> Mark Wills <markwills1970@gmail.com> - 2015-08-18 11:36 -0700
            Re: CMOVE/CMOVE> "HAA" <someone@microsoft.com> - 2015-08-20 04:39 +1000
          Re: CMOVE/CMOVE> "Elizabeth D. Rather" <erather@forth.com> - 2015-08-19 09:15 -1000
          Re: CMOVE/CMOVE> "HAA" <someone@microsoft.com> - 2015-08-28 22:39 +1000
            Re: CMOVE/CMOVE> Coos Haak <chforth@hccnet.nl> - 2015-08-28 15:06 +0200
              Re: CMOVE/CMOVE> "HAA" <someone@microsoft.com> - 2015-08-29 17:15 +1000
                Re: CMOVE/CMOVE> Coos Haak <chforth@hccnet.nl> - 2015-08-29 13:24 +0200
                Re: CMOVE/CMOVE> "HAA" <someone@microsoft.com> - 2015-08-31 11:38 +1000
                Re: CMOVE/CMOVE> "Elizabeth D. Rather" <erather@forth.com> - 2015-08-29 07:59 -1000
                Re: CMOVE/CMOVE> "HAA" <someone@microsoft.com> - 2015-08-30 13:00 +1000
            Re: CMOVE/CMOVE> Mark Wills <markwills1970@gmail.com> - 2015-08-28 07:33 -0700
            Re: CMOVE/CMOVE> Mark Wills <markwills1970@gmail.com> - 2015-08-28 07:36 -0700
              Re: CMOVE/CMOVE> "HAA" <someone@microsoft.com> - 2015-08-29 02:23 +1000
            Re: CMOVE/CMOVE> mhx@iae.nl - 2015-08-28 11:41 -0700
              Re: CMOVE/CMOVE> "HAA" <someone@microsoft.com> - 2015-08-29 17:30 +1000
        Re: CMOVE/CMOVE> anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2015-08-19 08:04 +0000
      Re: CMOVE/CMOVE> "Rod Pemberton" <boo@fasdfrewar.cdm> - 2015-08-19 02:48 -0400
        Re: CMOVE/CMOVE> Mark Wills <markwills1970@gmail.com> - 2015-08-19 00:49 -0700
    Re: CMOVE/CMOVE> Bernd Paysan <bernd.paysan@gmx.de> - 2015-08-19 02:58 +0200

csiph-web