85 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
#
 | 
						|
; $Header$
 | 
						|
;  (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 ?
 |