1: / C library -- setjmp, longjmp 2: 3: / longjmp(a,v) 4: / will generate a "return(v)" from 5: / the last call to 6: / setjmp(a) 7: / by restoring sp, r5, pc from `a' 8: / and doing a return. 9: / 10: 11: .globl _setjmp 12: .globl _longjmp 13: .globl csv, cret 14: 15: _setjmp: 16: mov 2(sp),r0 17: mov r5,(r0)+ 18: mov sp,(r0)+ 19: mov (sp),(r0) 20: clr r0 21: rts pc 22: 23: _longjmp: 24: jsr r5,csv 25: mov 4(r5),r1 26: mov 6(r5),r0 27: bne 1f 28: mov $1,r0 29: 1: 30: cmp (r5),(r1) 31: beq 1f 32: mov (r5),r5 33: bne 1b 34: / panic -- r2-r4 lost 35: mov (r1)+,r5 36: mov (r1)+,sp 37: mov (r1),(sp) 38: rts pc 39: 1: 40: mov 4(r1),2(r5) 41: jmp cret