aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/msp430/words/do-plusloop.asm
blob: ae41980b8de44b9fa60688e860bb610831b213bd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
;Z (+loop)   n --   R: sys1 sys2 --  | sys1 sys2
;Z                        run-time code for +LOOP
; Add n to the loop index.  If loop terminates, clean up the 
; return stack and skip the branch. Else take the inline branch.
;        ; CODEHEADER(xplusloop,7,"(+loop)")
;        DW      link
;        DB      0FFh       ; not immediate
;.set link = $
;        DB      7,"(+loop)"
;        .align 16
XT_DOPLUSLOOP:
	DW     $+2
        ADD     TOS,INDEX
        MOV     @PSP+,TOS   ; get new TOS, doesn't change flags
        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