# ; (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 ?