home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib32.zoo / lattice / setjmp.s < prev    next >
Text File  |  1993-05-23  |  1KB  |  64 lines

  1.     INCLUDE    inc.i
  2.     
  3. ;
  4. ; setjmp.cpp 
  5. ;
  6.     XFUNC
  7.     IF    _REGARG
  8.     xdef    @setjmp
  9.     ELSE
  10.     xdef    _setjmp
  11.     ENDC
  12.     
  13.     TEXT
  14.     IF    _REGARG
  15. @setjmp:
  16.     ELSE
  17. _setjmp:
  18.     move.l    4(sp),a0        ; address of jmp_buf[]
  19.     ENDC
  20.     move.l    (sp),(a0)        ; save return address
  21.     movem.l    d2-d7/a2-a7,4(a0)    ; save registers d2-d7/a2-a7
  22.     clr.l    d0            ; return value is 0
  23.     rts
  24.  
  25.     XFUNC
  26.     IF    _REGARG
  27.     xdef    @longjmp
  28.     ELSE
  29.     xdef    _longjmp
  30.     ENDC
  31.     
  32.     XDATA
  33.     xref    ___mint
  34.  
  35.     TEXT
  36.     IF    _REGARG
  37. @longjmp:
  38.     ELSE
  39. _longjmp:
  40.     ENDC
  41.     IF    _SHORT
  42.     tst.w    ___mint            ; see if MiNT is active
  43.     ELSE
  44.     tst.l    ___mint
  45.     ENDC
  46.     beq.s    NOMINT            ; no -- do not call sigreturn
  47.     move.w    #$11a,-(sp)        ; Psigreturn() system call
  48.     trap    #1            ; (ignored if not in a sig handler)
  49.     addq.w    #2,sp
  50. NOMINT:
  51.     move.l    4(sp),a0        ; address of jmp_buf[]
  52.     IF    _SHORT
  53.     move.w    8(sp),d0        ; value to return
  54.     ELSE
  55.     move.l    8(sp),d0        ; value to return
  56.     ENDC
  57.     bne.s    L1            ; may not be 0
  58.     move.l    #1,d0
  59. L1:
  60.     movem.l    4(a0),d2-d7/a2-a7    ; restore saved reggies
  61.     move.l    (a0),(sp)        ; and the saved return address
  62.     rts
  63.     end
  64.