Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo


sbcl Log

Commit Date  
[e3f278] by Paul Khuong Paul Khuong

Fix an off-by-one in MAP-ALLOCATED-OBJECTS

The bug would be extremely hard to tickle with current gencgc, but
that's going to change soon.

2011-07-03 00:03:24 Tree
[cc27e3] by Christophe Rhodes Christophe Rhodes

restarts for PRINT-NOT-READABLE errors

Two restarts: USE-VALUE, to provide a value to be printed instead
(under the same printer control variable bindings), and
SB-EXT:PRINT-UNDREADABLY, printing the same object but with
*PRINT-READABLY* bound to NIL. Only minimally tested, but should
meet requirements for lp#801255.

2011-06-29 14:53:37 Tree
[d9479b] by Nikodemus Siivola Nikodemus Siivola

export SIZE-T and OFF-T from SB-ALIEN

They're pretty common interface types.

2011-06-26 18:01:48 Tree
[e498af] by Nikodemus Siivola Nikodemus Siivola

fix bogus test in arith.pure.lisp

Didn't actually call the slow-path at all. Thanks to Lutz Euler for the

2011-06-26 17:40:22 Tree
[a3c77b] by Paul Khuong Paul Khuong

Get alignment right for block headers on x86-64, this time

We want to align the code in the block, not the trampoline that
leads to the block. In theory, we could take the trampoline into
account when inserting alignment, but really?

2011-06-24 03:17:22 Tree
[ce118e] by Paul Khuong Paul Khuong

Microoptimisation for block headers on x86-64

Only emit a jmp over the header if a predecessor falls through to
the current block, and it there is a trampoline. Otherwise, it's
not worth the cost of a branch to skip a few NOPs.

2011-06-23 15:05:54 Tree
[6596b1] by Paul Khuong Paul Khuong

Let register allocation handle unused TNs due to constant folding

Type-directed constant folding can leave lambda-vars that are neither dead
nor read from or written to. Ideally, it seems like we should make sure to
transform those into REF to CONSTANTs, but the optimisation doesn't seem
guaranteed to fire. It looks like the TN could simply not be allocated
in ASSIGN-LAMBDA-VAR-TNS, but I'm not sure how to test for that situation
ahead of time yet.

Kludges over lp#729765.

2011-06-22 01:22:27 Tree
[99a669] by Paul Khuong Paul Khuong

Unboxed implicit value cells on x86[-64]

Implicit value cells are used for bindings that are only closed
over by dynamic-extent functions.

The logic would have to be somewhat modified on platforms with
NFP. As is, only implement support for unboxed implicit value
cells on x86oids (for signed and unsigned words, SAPs and float
reals and complexes).

2011-06-21 04:31:00 Tree
[56a2db] by Paul Khuong Paul Khuong

Compiler support for specialised implicit value cells

Enables the use of non-T stack TNs for closed-over dynamic-extent variables.

SB!VM:PRIMITIVE-TYPE-INDIRECT-CELL-TYPE takes a primitive-type and returns
NIL, or a list of 4 values:
- the primitive type of the implicit indirect value cell
- the SC of that cell
- a function that takes the NODE, BLOCK, FP, VALUE and RESULT, and
emits a reference to that cell.
- a function that takes the NODE, BLOCK, FP, NEW-VALUE and VALUE, and
emits a write to that cell.

Some correctness tests to make sure codegen is correct (without verifying

2011-06-21 03:52:45 Tree
[8b6a52] by Paul Khuong Paul Khuong

Restore the build on x86

Bad copy-pasta in 293488f3.

2011-06-21 03:51:07 Tree
[293488] by Paul Khuong Paul Khuong

Inline local call trampolines on x86[-64]

Allow the insertion of code before entry to blocks from
drop0throughs, jumps, and calls. Used on x86oids to insert
the code to move return addresses to the right location
on local calls without trampolines.

2011-06-21 02:07:52 Tree
[65a29e] by Paul Khuong Paul Khuong

Faster MAP[-INTO] when (> SPEED SPACE)

Expand into WITH-ARRAY-DATA for non-simple vectors in such cases,
and avoid hairy vector accesses.

Also make sure to exploit that in conset code.

2011-06-21 00:44:07 Tree
[74a297] by Paul Khuong Paul Khuong

More constraint propagation in the presence of assignment

When SPEED = 3 > COMPILATION-SPEED, propagate type in code
like (cond ((eql (the fixnum x) y) (setf x 42) y) ...).

2011-06-20 01:04:20 Tree
[fb24d8] by Paul Khuong Paul Khuong

Less constraint propagation when COMPILATION-SPEED > SPEED

Propagate much fewer EQL constraints, and propagate fewer constraints
to EQL variables. Can results in a few orders of magnitude speed ups
in compilation times.

2011-06-19 01:14:40 Tree
[e7100f] by Paul Khuong Paul Khuong

More explicit high-level interface for consets

Strictly no performance or behaviour difference, but it may be
helpful to understand constraint propagation or even improve it.

2011-06-18 16:59:23 Tree
[8f31e3] by Paul Khuong Paul Khuong

Faster iteration through a variable's constraints during constraint propagation

Store indices of constraints by usage. Practically eliminates the dependence
on conset intersection/iteration performance. Improves compilation speeds,
especially for large functions.

Also improves lp#792363 and lp#394206.

2011-06-18 16:59:07 Tree
[d2e1e2] by Paul Khuong Paul Khuong

Smarter FIND-CONSTRAINT during constraint propagation

Use hash tables instead of pure linear search for hash
consing of constraints. Significantly reduces the pressure
on conset iteration performance, and improves compilation
speed of large functions.

Improves lp#792363 and lp#394206.

2011-06-18 16:58:25 Tree
[5896b1] by Nikodemus Siivola Nikodemus Siivola

RUN-PROGRAM: apply the external-format to the PTY stream as well

2011-06-17 18:41:31 Tree
[db237f] by Nikodemus Siivola Nikodemus Siivola

build: tweak generate-version.sh to work with older Git

Pre-1.7.2 Gits are pretty common out in the wild, so use wc -l to
get the revision counts instead of rev-list --count.

This has been verified to work with at least Git v1.6.0.2.

2011-06-15 07:49:14 Tree
[81eddb] by Nikodemus Siivola Nikodemus Siivola


Also update a bit for the brave new Git-only world.

2011-06-14 17:47:32 Tree
[d27eb1] by Nikodemus Siivola Nikodemus Siivola

whitespace in tests

2011-06-14 10:24:41 Tree
[d013d0] by Nikodemus Siivola Nikodemus Siivola


Passed through to PARSE-LAMBDA-LIST-LIKE, used by %SPLIT-ARGLIST in PCL.

Prior to this GENERIC-FUNCTION-PRETTY-ARGLIST on functions with both
&OPTIONAL and &KEY arguments caused a style-warning -- and inquiring about
the lambda-list isn't the right time for that.

2011-06-14 09:17:15 Tree
[88d80e] by Jim Wise Jim Wise

Convert remaining tests in debug.impure.lisp to use with-test.

2011-06-13 20:27:59 Tree
[bea522] by Nikodemus Siivola Nikodemus Siivola

tests and NEWS for lp#308961

Also add a random FP read/print consistency tester.

For now it skips denormalized double-floats due to bug 793774.

2011-06-11 18:43:52 Tree
[dafa18] by David Vázquez David Vázquez , pushed by Nikodemus Siivola Nikodemus Siivola

FORMAT-AUX-EXP: adjust scale if scale-exponent return 1.0

lp#308961, part 2.

FORMAT-EXP-AUX scales a number such that it will have K digits before of the
decimal point. This relies on scale-exponent.

(format nil "~E" 0.1) ; => "1.e-1"

1: SB-IMPL::SCALE-EXPONENT returned 0.1 0
0: FORMAT-EXP-AUX returned "1"

0.1 is 0.1 * 10^0 according to scale-exponent. Then, it is multiplied by 10^K
before printing. Everything works out fine.


(format nil "~E" 0.01) ; => "10.e-3" ... oops

1: SB-IMPL::SCALE-EXPONENT returned 1.0 -2
0: FORMAT-EXP-AUX returned "2"

In this example, scale-exponent returns 1.0 and -2, meaning 0.01 = 1.0 *
10^-2. Again, format-aux-exp multiply it by 10^K. But as 1.0 has a digit
before of the decimal point, the result will have K+1 digits.

This is due to format-exp-aux assumed the returned value will be lesser to
1.0. In order to fix this, we decrement K when scale-exponent return 1.0 as
primary value.

2011-06-11 18:43:52 Tree
Older >