| Deutsch English Français Italiano |
|
<103od4s$pis9$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: nntp.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Stephen Pelc <stephen@vfxforth.com>
Newsgroups: comp.lang.forth
Subject: Re: OOS approach revisited
Date: Sat, 28 Jun 2025 09:37:33 -0000 (UTC)
Organization: A noiseless patient Spider
Lines: 65
Message-ID: <103od4s$pis9$1@dont-email.me>
References: <fdbeb48de8ceb748d44c67dc3981a566@www.novabbs.com> <bc63996456fe967e5c66d17cbbeb21c2@www.novabbs.com> <nnd$39000884$25328e8c@2d18b2c67eb1f6e0> <mc8dkkFeh4uU1@mid.individual.net>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=fixed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 28 Jun 2025 11:37:33 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="2ba889cbcec782843888680410bc9a37";
logging-data="838537"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18u0YqRriFg+Q2X0tda+BXD"
User-Agent: Usenapp for MacOS
Cancel-Lock: sha1:284+Dn2vp/92KFlOCD/yOWXpTuM=
X-Usenapp: v1.27.4/l - Full License
On 27 Jun 2025 at 22:35:32 CEST, "minforth" <minforth@gmx.net> wrote:
> Am 27.06.2025 um 20:15 schrieb albert@spenarnc.xs4all.nl:
>> In article <bc63996456fe967e5c66d17cbbeb21c2@www.novabbs.com>,
>> LIT <zbigniew2011@gmail.com> wrote:
>>>> It really depends on how counted loops are implemented.
>>>> Most CPUs have operators for register-based count-down loops
>>>> that are blazingly fast.
>>>>
>>>> If they can be used within Forth-based loop constructs
>>>> I would expect a greater speed increase than what you measured.
>>>
>>> In that old fig-Forth it's rather short and simple:
>>>
>>> sqHeader '(LOOP)'
>>> XLOOP dw $ + 2
>>> mov BX,1
>>> XLOO1: add [BP],BX
>>> mov AX,[BP]
>>> sub AX,[BP+2]
>>> xor AX,BX
>>> js BRAN1
>>> add BP,4
>>> inc SI
>>> inc SI
>>> jmp NEXT
>>>
>>> It doesn't look that bad. Can it be
>>> done even shorter?
>>
>> My optimiser looks into the combination of DO and LOOP,
>> transfers the returns stack into registers after inlining
>> everything. It is near vfx performance.
>> All experimental, but yes there is much to be gained.
>
> Must be tricky to do UNLOOP in a register-based loop. ;-)
Here are the code generators for VFX x64 LOOP and UNLOOP.
All the complexity is in the DO and ?DO code.
: c_loop \ mrk> drbid -- ; compile code for LOOP ; SFP094
c_shuffle reset-opt \ SFP097
a[ INC r14 ]a use-a \ update index
a[ INC r15 ]a use-a \ update limit-index-$8000.0000
a[ JNO ]a <ares use-a \ resolve backward branch
c_unloop \ remove DO ... LOOP state
>RES \ resolve forward branch
;
: c_unloop \ -- ; compile code for UNLOOP
c_shuffle reset-opt
a[ pop r14 \ restore old index
pop r15 \ restore old index-limit-xorbit63
pop rax \ discarded
]a use-a
;
Stephen
--
Stephen Pelc, stephen@vfxforth.com
Wodni & Pelc GmbH
Vienna, Austria
Tel: +44 (0)7803 903612, +34 649 662 974
http://www.vfxforth.com/downloads/VfxCommunity/
free VFX Forth downloads