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


Groups > comp.lang.forth > #25551

Re: RAFTS-like optimiser; progress report

Newsgroups comp.lang.forth
Date 2013-09-07 03:22 -0700
References <ade7108a-663a-47e3-91d2-d913082f6c10@googlegroups.com>
Message-ID <b9f07f9f-9281-4a9d-a17b-e2e62ea43347@googlegroups.com> (permalink)
Subject Re: RAFTS-like optimiser; progress report
From mhx@iae.nl

Show all headers | View raw


On Friday, September 6, 2013 11:12:06 PM UTC+2, Alex McDonald wrote:
> Here's an example of the intermediate code generated. The first is an 
> insertion in a doubly linked list, and the second is the same code 
> optimised at the Forth level to reduce fetches. (Comments have been
>  added by me.) The intermediate code for both is identical.
[..]

> begin-structure node%
>    field: node.next        \ next in linked list (or head)
>    field: node.prev        \ prev in linked list (or tail)
> end-structure
[..]

Here is what the iForth codegenerator makes of it:

FORTH> : node-after ( free linked -- ) ( insert free node after linked )
<3>[FORTH>]     2dup node.next @      node.prev !
<3>[FORTH>]     2dup node.next @ swap node.next !
<3>[FORTH>]     2dup node.next ! swap node.prev ! ;  ok
FORTH> ' node-after idis
$01408940  : node-after                        
$0140894A  pop           rbx                   
$0140894B  pop           rdi                   
$0140894C  mov           rax, [rbx] qword      
$0140894F  mov           [rax 8 +] qword, rdi  
$01408953  mov           rax, [rbx] qword      
$01408956  mov           [rdi] qword, rax      
$01408959  mov           [rbx] qword, rdi      
$0140895C  mov           [rdi 8 +] qword, rbx  
$01408960  ;                                   

Note the redundant reload of rax (the optimizer detected an intervening ! 
that it doesn't know how to track).

FORTH> : node-after ( free linked -- ) ( insert free node after linked )
Redefining node-after
<3>[FORTH>]     2dup node.next 2dup @ 2dup
<3>[FORTH>]     node.prev ! swap node.next ! ! swap node.prev ! ;  ok
FORTH> ' node-after idis
$014089C0  : node-after                        
$014089CA  pop           rbx                   
$014089CB  pop           rdi                   
$014089CC  mov           rax, [rbx] qword      
$014089CF  mov           rdx, [rbx] qword      
$014089D2  mov           [rax 8 +] qword, rdi  
$014089D6  mov           [rdi] qword, rdx      
$014089D9  mov           [rbx] qword, rdi      
$014089DC  mov           [rdi 8 +] qword, rbx  
$014089E0  ; ok

Instead of reloading rax, here rdx is loaded with the same value. Not
a really significant improvement for the time and obscurity invested 
at the Forth level.

Finally, what happens when the code actually executes:

FORTH> 8 node% %allot constant linked
FORTH> 8 node% %allot constant free
FORTH> : tt  free linked node-after ;  ok
FORTH> ' tt idis
$014092C0  : tt
$014092CA  mov           rax, $014089B0 qword-offset
$014092D1  mov           [rax 8 +] qword, $01408E30 d#
$014092D9  mov           rbx, $014089B0 qword-offset
$014092E0  mov           $01408E30 qword-offset, rbx
$014092E7  mov           $014089B0 qword-offset, $01408E30 d#
$014092F2  mov           $01408E38 qword-offset, $014089B0 d#
$014092FD  ;

It is certainly debatable if the expansion to literals is helpful. In more
complicated code it would free up a few registers.

-marcel

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


Thread

RAFTS-like optimiser; progress report Alex McDonald <blog@rivadpm.com> - 2013-09-06 14:12 -0700
  Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-06 16:54 -0500
    Re: RAFTS-like optimiser; progress report Alex McDonald <blog@rivadpm.com> - 2013-09-06 16:02 -0700
      Re: RAFTS-like optimiser; progress report Bernd Paysan <bernd.paysan@gmx.de> - 2013-09-07 03:01 +0200
        Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-07 03:21 -0500
          Re: RAFTS-like optimiser; progress report albert@spenarnc.xs4all.nl (Albert van der Horst) - 2013-09-07 19:56 +0000
    Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-07 15:06 +0000
      Re: RAFTS-like optimiser; progress report "Alex McDonald" <blog@rivadpm.com> - 2013-09-07 19:01 +0100
        Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-09 12:23 +0000
          Re: RAFTS-like optimiser; progress report "Alex McDonald" <blog@rivadpm.com> - 2013-09-10 12:01 +0100
            Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-10 12:45 +0000
              Re: RAFTS-like optimiser; progress report "Alex McDonald" <blog@rivadpm.com> - 2013-09-10 16:33 +0100
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-11 15:02 +0000
                Re: RAFTS-like optimiser; progress report "Alex McDonald" <blog@rivadpm.com> - 2013-09-11 17:44 +0100
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-13 11:58 +0000
                Re: RAFTS-like optimiser; progress report "Rod Pemberton" <dont_use_email@nohavenotit.com> - 2013-09-14 22:47 -0400
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-15 16:05 +0000
      Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-07 16:08 -0500
        Re: RAFTS-like optimiser; progress report mhx@iae.nl - 2013-09-08 03:21 -0700
          Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-08 06:42 -0500
            Re: RAFTS-like optimiser; progress report mhx@iae.nl - 2013-09-08 04:51 -0700
              Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-08 07:02 -0500
                Re: RAFTS-like optimiser; progress report Paul Rubin <no.email@nospam.invalid> - 2013-09-08 10:08 -0700
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-08 12:47 -0500
                Re: RAFTS-like optimiser; progress report Paul Rubin <no.email@nospam.invalid> - 2013-09-08 11:10 -0700
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-08 15:16 -0500
                Re: RAFTS-like optimiser; progress report Paul Rubin <no.email@nospam.invalid> - 2013-09-08 16:08 -0700
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-09 04:57 -0500
        Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-09 12:41 +0000
          Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-09 08:56 -0500
            Re: RAFTS-like optimiser; progress report albert@spenarnc.xs4all.nl (Albert van der Horst) - 2013-09-09 14:20 +0000
              Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-09 09:27 -0500
                Re: RAFTS-like optimiser; progress report "Rod Pemberton" <dont_use_email@nohavenotit.com> - 2013-09-10 04:31 -0400
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-10 05:11 -0500
            Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-09 15:08 +0000
              Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-09 10:45 -0500
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-11 15:21 +0000
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-11 12:04 -0500
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-11 17:46 +0000
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-11 14:45 -0500
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-13 13:00 +0000
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-13 10:46 -0500
                Re: RAFTS-like optimiser; progress report stephenXXX@mpeforth.com (Stephen Pelc) - 2013-09-13 17:44 +0000
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-14 15:31 +0000
                Re: RAFTS-like optimiser; progress report Paul Rubin <no.email@nospam.invalid> - 2013-09-14 10:33 -0700
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-14 12:39 -0500
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-15 15:05 +0000
                Re: RAFTS-like optimiser; progress report Alex McDonald <blog@rivadpm.com> - 2013-09-15 08:32 -0700
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-15 13:20 -0500
                Re: RAFTS-like optimiser; progress report stephenXXX@mpeforth.com (Stephen Pelc) - 2013-09-15 16:54 +0000
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-15 17:02 +0000
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-15 12:54 -0500
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-16 09:21 +0000
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-16 08:39 -0500
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-16 15:48 +0000
                Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-16 15:03 -0500
                Re: RAFTS-like optimiser; progress report anton@mips.complang.tuwien.ac.at (Anton Ertl) - 2013-09-17 10:15 +0000
                Re: RAFTS-like optimiser; progress report "Rod Pemberton" <dont_use_email@nohavenotit.com> - 2013-09-17 17:24 -0400
                Re: RAFTS-like optimiser; progress report stephenXXX@mpeforth.com (Stephen Pelc) - 2013-09-17 13:10 +0000
            Re: RAFTS-like optimiser; progress report "Rod Pemberton" <dont_use_email@nohavenotit.com> - 2013-09-10 04:30 -0400
              Re: RAFTS-like optimiser; progress report Andrew Haley <andrew29@littlepinkcloud.invalid> - 2013-09-10 05:14 -0500
  Re: RAFTS-like optimiser; progress report mhx@iae.nl - 2013-09-07 03:22 -0700
  Re: RAFTS-like optimiser; progress report mhx@iae.nl - 2013-09-07 03:32 -0700

csiph-web