library-path, so, whereever you set it, you should decide whether
to include "." or exclude it.
["$prefix/lib/ikarus" is still added to the path so that multiple
versions of ikarus can exist and each uses its own sources dir
without interference]
- some cleanup in compiler to use the new include library instead of
"ikarus.include-src.ss" which is no longer needed.
Ack now runs only 80 times slower in debug mode (down from 360
times), and bootstrapping is now done in 170 seconds instead of
500 (nondebug time is still less than 8 seconds).
arithmetic to compare the stack pointer with the redline).
- disabled stack overflow check elimination due to a bug in the
logic that assumes primitive calls are not recursive.
continuations work, more assembly instructions are testing in 64-bit
mode, and some arithmetic operations (shift-right, etc.) have been
fixed by removing some 32-bit dependencies.
- Deleted old optimizer and changed the meaning of optimize level to
be:
0: bypass the optimizer
1: copy propagation, constant folding, no inlining
1: copy propagation, constant folding, with inlining
The default is set to 1.
- (optimize-level [0,1,2]) and ikarus -O[0,1,2]
where -O0 = no optimizations
-O1 = using old optimizer
-O2 = using the new cp0 optimizer
defaults to -O1 for now.
- (cp0-size-limit n) which is the limit of the residual size for
each inlining attempt
- (cp0-effort-limit n) which is the limit on the effort expended
for each inlining attempt
- Rewrote the syntax-match macro to make use of the same technology
used in syntax-case itself resulting in reduced code size.
- Added (system-value <symbol>) which returns the system value.
E.g., (system-value 'car) => #<procedure car>
This is pretty much the same as
(eval <symbol> (environment '(ikarus)))
except that it does not involve compiling the expression or
consulting the library/expander systems.
- Fixed the fasl loader to make it understand complex numbers.
manually inserted into the code stream to ensure proper offsets.
These need to be removed ASAP. Also, abstracted the values of three
constants that were hardcoded.
- The real reason was in the register allocator, where one live
variable (the memmory size of the bytevector) was not marked live
across the call to do-overflow. When the overflow returned, the
value of that variable (which was in the %ebx register) was
trashed, leading to an incorrect bump in the allocation pointer.
- Note to self, never blame anything on cache coherency again!
* If a procedure does not make non-tail calls, stack-overflow is eliminated.
* If a procedure does not make any calls (leaf routine), then event-check
is eliminated as well.
(total savings: about 10% reduction in boot-file size)