2.9 Symbols Known to the Assembler Routines

A large number of symbols will be pre-defined when a CMU Common Lisp system is fired up. A few of these are so fundamental to the operation of the system that their addresses have to be known to the assembler routines. These symbols are listed here. All of these symbols are in static space, so they will not move around.

NIL

9400000016 The value of NIL is always NIL; it is an error to alter it. The plist of NIL is always NIL; it is an error to alter it. NIL is unique among symbols in that it is stored in Cons cell space and thus you can take its CAR and CDR, yielding NIL in either case. NIL has been placed in Cons cell space so that the more common operations on lists will yield the desired results. This slows down some symbol operations but this should be insignificant compared to the savings in list operations. A test for NIL for the IBM RT PC is:

	xiu	R0,P,X'9400'
	bz	IsNIL	or bnz	IsNotNIL
T

8C00000016 The value of T is always T; it is an error to alter it. A similar sequence of code as for NIL above can test for T, if necessary.

%SP-Internal-Apply

8C00001416 The function stored in the definition cell of this symbol is called by an assembler routine whenever compiled code calls an interpreted function.

%SP-Internal-Error

8C00002816 The function stored in the definition cell of this symbol is called whenever an error is detected during the execution of an assembler routine. See Errors for details.

%SP-Software-Interrupt-Handler

8C00003C16 The function stored in the definition cell of this symbol is called whenever a software interrupt occurs. See Interrupts for details.

%SP-Internal-Throw-Tag

8C00005016 This symbol is bound to the tag being thrown when a Catch-All frame is encountered on the stack. See Catch for details.

%Initial-function

8c00006416 This symbol’s function cell should contain a function that is called when the initial core image is started. This function should initialize all the data structures that Lisp needs to run.

%Link-table-header

8c00007816 This symbol’s value cell contains a pointer to the link table information.

Current-allocation-space

8c00008c16 This symbol’s value cell contains an encoded form of the current space that new lisp objects are to be allocated in.

%SP-bignum/fixnum

8c0000a016 This function is invoked by the miscops when a division of a bignum by a fixnum results in a ratio.

%SP-bignum/bignum

8c0000b416 This function is invoked by the miscops when a division of a fixnum by a bignum results in a ratio.

%SP-bignum/bignum

8c0000c816 This function is invoked by the miscops when a division of a bignum by a bignum results in a ratio.

%SP-abs-ratio

8c0000dc16 This function is invoked by the miscops when the absolute value of a ratio is taken.

%SP-abs-complex

8c0000f016 This function is invoked by the miscops when the absolute value of a complex is taken.

%SP-negate-ratio

8c00010416 This function is invoked by the miscops when a ratio is to be negated.

%SP-negate-ratio

8c00011816 This function is invoked by the miscops when a complex is to be negated.

%SP-integer+ratio

8c00012c16 This function is invoked by the miscops when a fixnum or bignum is added to a ratio.

%SP-ratio+ratio

8c00014016 This function is invoked by the miscops when a ratio is added to a ratio.

%SP-complex+number

8c00015416 This function is invoked by the miscops when a complex is added to a number.

%SP-number+complex

8c00016816 This function is invoked by the miscops when a number is added to a complex.

%SP-complex+complex

8c00017c16 This function is invoked by the miscops when a number is added to a complex.

%SP-1+ratio

8c00019016 This function is invoked by the miscops when 1 is added to a ratio.

%SP-1+complex

8c00019016 This function is invoked by the miscops when 1 is added to a complex.

%SP-ratio-integer

8c0001b816 This function is invoked by the miscops when an integer is subtracted from a ratio.

%SP-ratio-ratio

8c0001cc16 This function is invoked by the miscops when an ratio is subtracted from a ratio.

%SP-complex-number

8c0001e016 This function is invoked by the miscops when a complex is subtracted from a number.

%SP-number-complex

8c0001f416 This function is invoked by the miscops when a number is subtracted from a complex.

%SP-complex-complex

8c00020816 This function is invoked by the miscops when a complex is subtracted from a complex.

%SP-1-complex

8c00023016 This function is invoked by the miscops when 1 is subtracted from a complex.

%SP-ratio*ratio

8c00024416 This function is invoked by the miscops to multiply two ratios.

%SP-number*complex

8c00025816 This function is invoked by the miscops to multiply a number by a complex.

%SP-complex*number

8c00026c16 This function is invoked by the miscops to multiply a complex by a number.

%SP-complex*complex

8c00028016 This function is invoked by the miscops to multiply a complex by a complex.

%SP-integer/ratio

8c00029416 This function is invoked by the miscops to divide an integer by a ratio.

%SP-ratio/integer

8c0002a816 This function is invoked by the miscops to divide a ratio by an integer.

%SP-ratio/ratio

8c0002bc16 This function is invoked by the miscops to divide a ratio by a ratio.

%SP-number/complex

8c0002d016 This function is invoked by the miscops to divide a number by a complex.

%SP-complex/number

8c0002e416 This function is invoked by the miscops to divide a complex by a number.

%SP-complex/complex

8c0002f816 This function is invoked by the miscops to divide a complex by a complex.

%SP-integer-truncate-ratio

8c00030c16 This function is invoked by the miscops to truncate an integer by a ratio.

%SP-ratio-truncate-integer

8c00032016 This function is invoked by the miscops to truncate a ratio by an integer.

%SP-ratio-truncate-ratio

8c00033416 This function is invoked by the miscops to truncate a ratio by a ratio.

%SP-number-truncate-complex

8c00034816 This function is invoked by the miscops to truncate a number by a complex.

%SP-complex-truncate-number

8c00035c16 This function is invoked by the miscops to truncate a complex by a number.

%SP-complex-truncate-complex

8c00037016 This function is invoked by the miscops to truncate a complex by a complex.

Maybe-GC

8c00038416 This function may be invoked by any miscop that does allocation. This function determines whether it is time to garbage collect or not. If it is it performs a garbage collection. Whether it invokes a garbage collection or not, it returns the single argument passed to it.

Lisp-environment-list

8c00039816 The value of this symbol is set to the a list of the Unix environment strings passed into the Lisp process. This list by Lisp to obtain various environment information, such as the user’s home directory, etc.

Call-lisp-from-C

8c0003ac16 This function is called whenever a C function called by Lisp tries to call a Lisp function.

Lisp-command-line-list

8c0003c016 The value of this symbol is set to the list of strings passed into the Lisp process as the command line.

*Nameserverport*

8c0003d416 The value of this symbol is set to the C global variable name_server_port. This allows Lisp to access the name server.

*Ignore-Floating-Point-Underflow*

8c0003e816 If the the value of this symbol is NIL then an error is signalled when floating point underflow occurs, otherwise the operation quietly returns zero.

3 Runtime Environment