File:  [CSRG BSD Unix] / 41BSD / cmd / liszt / doc / liszt.doc
Revision 1.1: download - view: text, annotated - select for diffs
Tue Apr 24 16:12:53 2018 UTC (8 years, 1 month ago) by root
CVS tags: MAIN, HEAD
Initial revision

;	Liszt documentation

Addresses
There are four types of addresses used internally in Franz.

Symbolic:
	These are the names of lisp objects, such as `a', `foo', 34,
	or 3.234234.
	A name is either a local variable, a special variable or a
	number.  A number is either a small fixnum, large fixnum,
	bignum or floating point number.

IADR (intermediate address)
	This type of address is generated from a symbolic address by
	d-loc, d-loclit and the routines d-simple, d-rsimple which
	call them. The forms are

	Nil - the location or value of nil.
	T   - the location or value of t.
	reg - register r0, which is where the result of function calls
	      are stored.
	stack - the address pointed to by np with np incremented after
		the value is stored.  I.E. this is (r6)+
	unstack - the address one word below np (np is decremented before
		  accessing. I.E this is -(r6)
	<atom> - this is just <atom> .  This allows strange forms to be
		 passed directly.
	(stack n) - The n'th value on the namestack for this function.
		    The first value 0(r10) is (stack 1).
	(vstack n) - The cdr of the n'th value on the namestack.  
		     That is, (stack 1) is *0(r10)
	(bind n) - The value of the n'th value on the bindstack.  If 
		   we are talking about a symbol, then this is the value
		   of the symbol, if we are talking about a list this
		   this is the cdr of the list (although this is a rare
		   use). (bind 1) corresponds to *0(r8).
	(lbind n) - The n'th value on the bindstack.  If we are talking
		   about object foo then this is the address of foo
		   in memory.
	(fixnum n) - This is the address of small fixnum n in memory.
		     A small fixnum is in the range -1024 to 1023.
	(immed n)  - The is the immediate constant n. 


EIADR (extended intermediate address)
	This address is generated from an IADR by e-cvt.  It 
	represents symbolically a vax address.  

	<atom> - This corresponds to <atom>.
	(n <atom>)  - This corresponds to n(<atom>)
		      (stack n+1) and (lbind n+1) are converted to these forms.
	(n <atom1> <atom2>) - This corresponds to n(<atom1>)[<atom2>]
			There is currently no IADR which generates this.
	(* n <atom>) - This corresponds to *n(<atom>)
		      (vstack n+1) and (bind n+1) are converted to these forms.
	(+ <atom>) - This corresponds to (<atom>)+
		     stack is converted to this form.
	(- <atom>) - This corresponds to -(<atom>)
		     unstack is converted to this form.
	($ <numb>) - This corresponds to $<atom>
		     (immed <numb>) is converted to this form.
	(# <numb>) - This corresponds to $<loc> where <loc> equals 
		     the base of the fixnums (0x1400) plus 4 * <numb>
		     (fixnum <numb>) is converted to this form
	(* # <numb>) - This corresponds to $<numb>.  It is generated
		     by d-rsimple occasionally when you ask for the
		     cdr of a number (which you do sometimes when you
		     are compiling fixnum operators).
	
Vax Unix assembler addresses
	The addresses are printed from a EIADR by e-cvtas.  The conversions
	are shown in the above section.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.