[comp.lang.forth] Loops?

files@willett.UUCP (Mailed File Repository) (12/20/89)

Category 3,  Topic 31
Message 13        Tue Dec 19, 1989
DANMILLER                    at 22:34 CST
 
In repy to comments on for next vs do loop implementation.  I  compiled a
simple for next  and a do loop using a commercial compiler.  The for next
implementation is much simpler using a single for/next opcode to cycle vs the
forth 83 type loop implementation. In this implementation the for next is
faster. Do you have a better forth 83 style do loop for this processor? I'd be
happy to compile and run test samples of code for you. Also, I looked in the
rtx reference manual under carries and didn't see a reference to complex
carry. Was this in the  RTX2001A literature? ( Code comparison of for next and
do loop implementation in the  compiled TFORTH language of the RTXDS 
development system from Harris )
 Screen # 0                                                             
 HEX                                                                    
 START-TFORTH                                                           
 8300 ROMORG 9000 RAMORG( sets the compilation addresses )              
 : TEST     10 FOR 1 1 +  NEXT ;                                        
 : TEST2  10 0  DO 1 1 +  LOOP ;                                        
 END-TFORTH                                                             

 ---( Dissassembled listing of the above code )----------               
 FULL DASM                                                              

 address opcode   operation                                             

 8300    (:) TEST                                                       
         BE50    LIT 10                                                 
 8302    BE81    >R      ( puts the for next count on ret stk )         
 8304    BE41    LIT 01                                                 
 8306    B8C1    LIT 01  +                                              
 8308    9982    NEXT 8304  ( for/next next, 1011 1bba aaaa aaaa )      
 830A    A020       ;                                                   


 830C    (:) TEST2                                                      
         BE50    LIT 10                                                 
 830E    BE40    LIT 00                                                 
 8310    419B    do                         Call 8336   'A.'            
 8312    BE41    LIT 01                                                 
 8314    B8C1    LIT 01  +                                              
 8316    4190    loop                       Call 8320   'A.'            
 8318    9189    BRANCH 8312                                            
 831A    B001    R> DROP                                                
 831C    B001    R> DROP                                                
 831E    A020       ;                                                   

 8320    (:) loop       ( decompilation of loop )                       
         BE01    R>                                                     
 8322    BE01    R>                                                     
 8324    B8C1    LIT 01  +                                              
 8326    A0C0    DUP                                                    
 8328    BE00    R@                                                     
 832A    AE80    SWAP                                                   
 832C    BE81    >R                                                     
 832E    41A2    =                          Call 8344   'A.'            
 8330    899A    0BRANCH 8334                                           
 8332    B8C2    LIT 02  +                                              
 8334    BEA7    >R    ;                                                

 8336    (:) do          ( decompilation of do )                        
         AE80    SWAP                                                   
 8338    BE01    R>                                                     
 833A    AE80    SWAP                                                   
 833C    BE81    >R                                                     
 833E    AE80    SWAP                                                   
 8340    BE81    >R                                                     
 8342    BEA7    >R    ;                                                

 8344    (:) =     ( this decompiles the = in the loop definition )     
         AA40     XOR                                                   
 8346    89A6    0BRANCH 834C                                           
 8348    BE40    LIT 00                                                 
 834A    B07E    EXIT                                                   
 834C    BF60    LIT -1  ;                                              

 ok                                                                     
 note: parenthetic comments are my addition to the listing              
   *s
 ------------