mov8 mem1 -> mem2
to
mov mem1 -> reg
mov8 reg -> mem2
instead of
mov8 mem1 reg
mov reg mem2
which causes unaligned and invalid memory access when the
address mem1 is at a page boundary and the next page is
unmapped.
used to be a relative jump from one code object to another is now
turned into a pc-relative jump, where the jump targets are stored
somewhere at the bottom of the code that performs the jump:
old code sequence:
call-relative (Ltarget - L0)
L0: ...
new code sequence:
call-pc-relative (L1 - L0)
L0: ...
...
L1: <8-byte Ltarget>
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.