aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/msp430/words/do-loop.asm
blob: b1a3628820824a08a5ed17e6f1869da3edec542b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
;Z (loop)   R: sys1 sys2 --  | sys1 sys2
;Z                        run-time code for LOOP
; Add 1 to the loop index.  If loop terminates, clean up the 
; return stack and skip the branch.  Else take the inline branch.  
; Note that LOOP terminates when index=8000h.
;        ; CODEHEADER(xloop,6,"(loop)")
;        DW      link
;        DB      0FFh       ; not immediate
;.set link = $
;        DB      6,"(loop)"
;        .align 16
XT_DOLOOP:
	DW     $+2
        ADD     #1,INDEX
        BIT     #100h,SR    ; is overflow bit set?
        JZ      dobran    ; no overflow = loop
        ADD     #2,IP       ; overflow = loop done, skip branch ofs
        MOV     @RSP+,INDEX ; restore old loop values
        MOV     @RSP+,LIMIT
        NEXT