Re: [Flashforth-devel] For-next loops - the New Design
Brought to you by:
oh2aun
From: om1zz <om...@vo...> - 2015-05-27 07:32:42
|
Mike, -fortest marker -fortest 2variable count : _for 0. count 2! for count 2@ 1. d+ count 2! r@ u. next cr count 2@ ud. ; : _for2 0. count 2! for2 count 2@ 1. d+ count 2! r@ u. next cr count 2@ ud. ; FOR: ---------------------------- 25 _for 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 25 ok<#,ram> 1 _for 0 1 ok<#,ram> 0 _for 0 ok<#,ram> 65535 _for 65534 65533 .. .. 13 12 11 10 9 8 7 6 5 4 3 2 1 0 65535 ok<#,ram> FOR2: ___________________ 25 _for2 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 26 ok<#,ram> 1 _for2 1 0 2 ok<#,ram> 0 _for2 0 1 ok<#,ram> 65535 _for2 65535 65534 .. .. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 65536 ok<#,ram> My comments: It does not behave as it should (this is my personal point of view): _for works as before, zero skips, not good _for2 works not good, it means you do N+1 _for or something like that.. I strongly believe it should work as follows ("My Design"): standard FOR-NEXT: ------------------------------------------------- 65535 _for 65534 65533 .. .. 13 12 11 10 9 8 7 6 5 4 3 2 1 0 65535 ok<#,ram> 25 _for 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 25 ok<#,ram> 1 _for 0 1 ok<#,ram> 0 _for 65535 65534 .. .. 13 12 11 10 9 8 7 6 5 4 3 2 1 0 65536 ok<#,ram> ?FOR-NEXT with zero skip: -------------------------------------------------- 65535 _?for 65534 65533 .. .. 13 12 11 10 9 8 7 6 5 4 3 2 1 0 65535 ok<#,ram> 25 _?for 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 25 ok<#,ram> 1 _?for 0 1 ok<#,ram> 0 _?for 0 ok<#,ram> IgorM ______________________________________________________________ > Od: Mikael Nordman <mik...@fl...> > Komu: <fla...@li...> > Datum: 26.05.2015 16:07 > Předmět: Re: [Flashforth-devel] For-next loop - full 16bit count? > >I added printing of the index to your pseudocode. > >So 2 for r@ u. next >prints 2 1 > >And 0 for r@ u. next >prints 0 65535 .... 1 > >So will also your pseudocode below, but > >I want 65535 for r@ u. next >prints 65535 .... 0 > >This is what I have implemented in the FOR2 >You can pull it from git. > >BR Mike > > >uint16 index; >uint16 count = 0; > >index = 2; > >for_loop: > >blink_a_led; > >count = count + 1; > >print index; <----------------NOTE > >/ / decrement and skip if zero test >index = index - 1; /// decrement >if index==0 goto out_of_loop // skip if zero >// end of decrement and skip if zero test > >goto for_loop: // this will be skipped when zero > >out_of_loop: > >print count; > > >On 26.05.2015 13:28, om1zz wrote: >> A loop with "decrement and skip if zero" construct in asm means condition evaluation and action around "next"- like this (an example code): >> >> uint16 joe; >> uint16 count = 0; >> >> joe = 2; >> >> for_loop: >> >> blink_a_led; >> >> count = count + 1; >> >> / / decrement and skip if zero test >> joe = joe - 1; /// decrement >> if joe==0 goto out_of_loop // skip if zero >> // end of decrement and skip if zero test >> >> goto for_loop: // this will be skipped when zero >> >> out_of_loop: >> >> print count; >> >> end >> >> With joe=2 the count will be 2, with joe=0 the count will be 65536. >> >> Igor >> >> ______________________________________________________________ >>> Od: Mikael Nordman <mik...@fl...> >>> Komu: <fla...@li...> >>> Datum: 26.05.2015 11:51 >>> Předmět: Re: [Flashforth-devel] For-next loop - full 16bit count? >>> >>> If you do a decrement and skip if zero, it means that one index will >>> not be counted (=0). >>> So you would not get the full 16-bit range. >>> 2 for ---> 2 1 (2 counts) >>> 1 for ---> 1 ( 1 counts) >>> 0 for ---> 65535 65534 .. 1 (65535 counts) >>> >>> So my NEXT uses decrement and skip if carry >>> >>> Therefore it has work like this >>> 2 for ---> 2 1 0 (3 counts) >>> 0 for ---> 0 ( 1 counts) >>> 65535 for ---> 65535 65534 .. 0 (65536 counts) >>> >>> BR Mike >>> >>> >>> On 26.05.2015 11:21, om1zz wrote: >>>> Some reasoning to mu suggestion below: >>>> 1. we talking here forth - a better macro assembler >>>> 2. with your scenario we move towards a primitive function with "more >>>> intelligence" than one would expected from a better assembler.. >>>> 3. imho for-next in forth is an equivalent of "decrement and skip if >>>> zero" construct, where (at least me since '82) observed the behaviour >>>> when putting zero in it loops for a lot of times around :) >>>> Igor >>>> >>>>> Hmm, the old FOR shall behave, I think: >>>>> >>>>> 2 for ---> 1 0 (2 counts) >>>>> 0 for ----> 65535 65534 .. 0 (65536 counts) >>>>> >>>>> new ?FOR >>>>> >>>>> 2 ?for ---> 1 0 (2 counts) >>>>> 0 ?for ---> skip (none count) >>>>> >>>>> So no change with 99,99999% of old code. >>>>> I. >>>>> >>>>> ______________________________________________________________ >>>>>> Od: Mikael Nordman <mik...@fl...> >>>>>> Komu: <fla...@li...> >>>>>> Datum: 26.05.2015 06:38 >>>>>> Předmět: Re: [Flashforth-devel] For-next loop - full 16bit count? >>>>>> >>>>>> I did some experiments with this and have now two for..next loops >>>>>> : t for r@ u. next ; ok<#,ram> >>>>>> : tt for2 r@ u. next ; ok<#,ram> >>>>>> 9 t 8 7 6 5 4 3 2 1 0 ok<#,ram> >>>>>> 9 tt 9 8 7 6 5 4 3 2 1 0 ok<#,ram> >>>>>> >>>>>> The only problem is the naming of the words. >>>>>> The old FOR ideally should be called ?FOR >>>>>> and the new one FOR. >>>>>> But that introduces a problem with existing FF code... >>>>>> >>>>>> Mike >>>>>> >>>>>> On 24.05.2015 16:00, om1zz wrote: >>>>>>> Yea, I do understand the zero loop skip intention, but I consider >>>>>>> that a bug. >>>>>>> There is no way to do full 65536 loops with 16bit without doing 0 >>>>>>> for..next. >>>>>>> >>>>>>> As the web knowledge says - there are only incompatible for-next >>>>>>> loops and inefficient and lazy do-loops :) >>>>>>> >>>>>>> I would recommnd to change the behavior to full 16bit, entering 0 >>>>>>> should be the users responsibility (similar as divide by zero). >>>>>> >>> >>> >>> ------------------------------------------------------------------------------ >>> One dashboard for servers and applications across Physical-Virtual-Cloud >>> Widest out-of-the-box monitoring support with 50+ applications >>> Performance metrics, stats and reports that give you Actionable Insights >>> Deep dive visibility with transaction tracing using APM Insight. >>> http://ad.doubleclick.net/ddm/clk/290420510;117567292;y >>> _______________________________________________ >>> Flashforth-devel mailing list >>> Fla...@li... >>> https://lists.sourceforge.net/lists/listinfo/flashforth-devel >>> >> >> ------------------------------------------------------------------------------ >> One dashboard for servers and applications across Physical-Virtual-Cloud >> Widest out-of-the-box monitoring support with 50+ applications >> Performance metrics, stats and reports that give you Actionable Insights >> Deep dive visibility with transaction tracing using APM Insight. >> http://ad.doubleclick.net/ddm/clk/290420510;117567292;y >> _______________________________________________ >> Flashforth-devel mailing list >> Fla...@li... >> https://lists.sourceforge.net/lists/listinfo/flashforth-devel >> > >------------------------------------------------------------------------------ >One dashboard for servers and applications across Physical-Virtual-Cloud >Widest out-of-the-box monitoring support with 50+ applications >Performance metrics, stats and reports that give you Actionable Insights >Deep dive visibility with transaction tracing using APM Insight. >http://ad.doubleclick.net/ddm/clk/290420510;117567292;y >_______________________________________________ >Flashforth-devel mailing list >Fla...@li... >https://lists.sourceforge.net/lists/listinfo/flashforth-devel > |