|Did you know ...||Search Documentation:|
|Pack wam_common_lisp -- prolog/wam_cl/src/doc/notes.txt|
are created in the directory of each machine, to avoid clashes when compiling from the same set of srouces.
and replaceable (in cmplet.lsp) to allow optimization of (incf (the fixnum x)).
(defun foo (x) (declare (single-float x)) (+ x x)) by correctly implementing contravariance (wrong in KCL/GCL).
:inline-unsafe '((t fixnum) fixnum nil nil "(#0)->ust.ust_self[#1]") :inline-unsafe '((t fixnum) character nil nil "(#0)->ust.ust_self[#1]") so that (setq n (char-int (schar string index))) is optimized to: V1= ((V2))->ust.ust_self[fix((V3))];
When situation is (load) not-compile-too is T and evaluation is skipped.
NULL before calling alloc_relblock, otherwise conservative GC will find garbage in it.
data vector and protect it from GC while init_code is executed. VVprotect is declared volatile so that it is stored on the stack. Beware of optimizing compilers which elimiante such variable discovering it is never used.
carries reference to variable rebound so that its type can be retrieved in order to optimize slot-value.
closure, so that it can be put in the C code (useful for methods). A list is used in order to distinguish such blocks from labels, since to the former tail-recursion does not apply.
Lapply puts the argument on the stack. This is to avoid that compute-applicable-method will clobber them before the function is called.
to strings (e.g. those created with (concatenate 'string ..)). Minor fixes to other functions creating strings (e.g. use memcpy rather than for loops)
determining when variable could be replaced in body. Also changed var-changed-in-forms to check for side-effect on replaced variable.
address of exit routine. This does not happen with dumped image, so we should not free that area as we were doing in version 0.5.
in the tables reloc_howto_type in gnu/binutils/bfd (eg. coff-mips.c). Here is a sample entry: /* A 16 bit reference to a symbol, normally from a data section. */ HOWTO (MIPS_R_REFHALF, /* type */ 0, /* rightshift */ 1, /* size (0 = byte, 1 = short, 2 = long) */ 16, /* bitsize */ false, /* pc_relative */ 0, /* bitpos */ complain_overflow_bitfield, /* complain_on_overflow */ mips_generic_reloc, /* special_function */ "REFHALF", /* name */ true, /* partial_inplace */ 0xffff, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */
which is dealt as:
case R_REFHALF: *(unsigned short *)where += new_value; break;
Removed all #ifdef IBMRT from num_co.c. They were identical to the VAX case except in init_co, where it was: #ifdef IBMRT l = 0x80; l = 0; smallest_float = *(float *)l; smallest_double = *(double *)l; #endif
is type<= than the arguments when optimizer expresses type as FIXNUM-FLOAT.
entrycond -> cond-before exitcond -> cond-after entry -> print-before exit -> print-after exitbreak -> break-after
single-float = short-float = IEEE single double-float = long-float = IEEE double
Added paramter align to alloc_relblock to indicate alignment of allocated block. Necessary e.g. for array of longfloat.
error()which used to get into loop.
function (raher than two: one for the condition and one for the optimization). It returns NIL if not applicable. Added various optimizations from AKCL, except co1constant-fold (never called), co1sublis, co1read-byte, co1read-char, co1write-byte, co1write-char (these require special declarations), co1special-fix-decl (ECL already handles declarations in do/prog).
builtin_saveregs()in Fdo and FdoA
to fix problem with form (do () (()) (return)) on sparc: ecl_raw ../o/ (print 3) (do () (()) (return)) SIGSEGV
with safety=1: each function call did a frs_push! When safety=3, cs_check is no more issued.
The info on the block with the C code is contained in the block itself in a static struct of type codeblock.
increasing size. On i386 processor these can be just incremental allocations since they just move the SP register. On sparc or other processors a new array is necessary. See macro SIZEincrement in print.d.
Such data is obtained from (si:room-report), (room) instead shows ratio between used cells and allocated cells, which is 56% for ECL, and 50% for AKCL, which may lead one to think that ECL occupies more space.
do_global_cleanup. Therefore init_alloc must be called from within malloc, and must initialize malloc_list.
whose initform produces no side-effect are discarded (useful for instance for pop)
and for circular lists. When PRINTcircle is true, space is needed for travel_push to store all elements traversed. We use alloca for this (macro setupPRINTcircle). If size is not enough, we increase it by longjump back to setupPRINTcircle. The correct sequence is:
_setjmp by _longjmp, which is the number of values of the returning form + 1. The value received from frs_push (when != 0) must be decremented and returned.
Values themselves are returned in VALUES(i). Functions which set VALUES should use the macro RETURN.
so that one can use apply #'aset instead of aset-by-cursor, which has been eliminated.
argument is &narg. Eliminated too_few_arguments and too_many_arguments
builtin_savereg()to get data out of registers, specially on RISC machines.
machines DGUX, ATT3B2, AOSVS from machines.h DOWNWARD_STACK now means downward: grows toward lower addresses.
A new environment is created with lex_new by any function which performs new bindings (either variables, functions, or tags) or wants an empty env (like eval). lex_dcl must be used as declaration before calling lex_new. _new. should allocate lex_env and More compact encoding is possible, for instance storing just SYMBOL instead of (SYMBOL) for special variables.