Initial revision
This commit is contained in:
84
lang/pc/libpc/gto.e
Normal file
84
lang/pc/libpc/gto.e
Normal file
@@ -0,0 +1,84 @@
|
||||
#
|
||||
; (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||||
;
|
||||
; This product is part of the Amsterdam Compiler Kit.
|
||||
;
|
||||
; Permission to use, sell, duplicate or disclose this software must be
|
||||
; obtained in writing. Requests for such permissions may be sent to
|
||||
;
|
||||
; Dr. Andrew S. Tanenbaum
|
||||
; Wiskundig Seminarium
|
||||
; Vrije Universiteit
|
||||
; Postbox 7161
|
||||
; 1007 MC Amsterdam
|
||||
; The Netherlands
|
||||
;
|
||||
|
||||
/* Author: J.W. Stevenson */
|
||||
|
||||
|
||||
mes 2,EM_WSIZE,EM_PSIZE
|
||||
|
||||
#define TARLB 0
|
||||
#define DESCR EM_PSIZE
|
||||
|
||||
#define NEWPC 0
|
||||
#define SAVSP EM_PSIZE
|
||||
|
||||
#define D_PC 0
|
||||
#define D_SP EM_PSIZE
|
||||
#define D_LB EM_PSIZE+EM_PSIZE
|
||||
|
||||
#define LOCLB -EM_PSIZE
|
||||
|
||||
; _gto is called with two arguments:
|
||||
; - pointer to the label descriptor (DESCR)
|
||||
; - local base (LB) of target procedure (TARLB)
|
||||
; the label descriptor contains two items:
|
||||
; - label address i.e. new PC (NEWPC)
|
||||
; - offset in target procedure frame (SAVSP)
|
||||
; using this offset and the LB of the target procedure, the address of
|
||||
; of local variable of the target procedure is constructed.
|
||||
; the target procedure must have stored the correct target SP there.
|
||||
|
||||
descr
|
||||
bss 3*EM_PSIZE,0,0
|
||||
|
||||
exp $_gto
|
||||
pro $_gto,EM_PSIZE
|
||||
lal DESCR
|
||||
loi EM_PSIZE
|
||||
adp NEWPC
|
||||
loi EM_PSIZE
|
||||
lae descr+D_PC
|
||||
sti EM_PSIZE
|
||||
lal TARLB
|
||||
loi EM_PSIZE
|
||||
zer EM_PSIZE
|
||||
cmp
|
||||
zeq *1
|
||||
lal TARLB
|
||||
loi EM_PSIZE
|
||||
bra *2
|
||||
1
|
||||
lae _m_lb
|
||||
loi EM_PSIZE
|
||||
2
|
||||
lal LOCLB
|
||||
sti EM_PSIZE
|
||||
lal LOCLB
|
||||
loi EM_PSIZE
|
||||
lal DESCR
|
||||
loi EM_PSIZE
|
||||
adp SAVSP
|
||||
loi EM_WSIZE ; or EM_PSIZE ?
|
||||
ads EM_WSIZE ; or EM_PSIZE ?
|
||||
loi EM_PSIZE
|
||||
lae descr+D_SP
|
||||
sti EM_PSIZE
|
||||
lal LOCLB
|
||||
loi EM_PSIZE
|
||||
lae descr+D_LB
|
||||
sti EM_PSIZE
|
||||
gto descr
|
||||
end ?
|
||||
Reference in New Issue
Block a user