blob: b4d03439c67f2f05d929d48ee299118bb625c6a1 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
!# ZSVJMP, ZDOJMP -- Set up a jump (non-local goto) by saving the processor
!# registers in the buffer jmpbuf. A subsequent call to ZDOJMP restores
!# the registers, effecting a call in the context of the procedure which
!# originally called ZSVJMP, but with the new status code. These are Fortran
!# callable procedures.
!#
!# (SUN/UNIX sparc version)
.seg "text"
.global zsvjmp_
!# The following has nothing to do with ZSVJMP, and is included here
!# only because this assembler module is loaded with every process.
!# This code sets the value of the symbol MEM (the Mem common) to zero,
!# setting the origin for IRAF pointers to zero rather than some
!# arbitrary value, and ensuring that the MEM common is aligned for
!# all datatypes as well as page aligned. A further advantage is that
!# references to NULL pointers will cause a memory violation.
.global _mem_
_mem_ = 0
.proc 0
zsvjmp_:
st %o1, [%o0] ! save &status in jmpbuf[0]
clr %o2
st %o2, [%o1] ! zero the value of status
add %o0, 0x4, %o0
set setjmp, %o1
jmp %o1
nop
.seg "data"
|