sbcl Log


Commit Date  
[1e9235] by Nikodemus Siivola Nikodemus Siivola

git: add missing git hook scripts from SourceForge

We've been using these for a while now, but I neglected to stash copies in
the repository.

Also instructions for updating them, since it isn't the most intuitive thing
in the world.

2012-01-02 10:19:55 Tree
[dd5c05] by Nikodemus Siivola Nikodemus Siivola

twiddle script.test.sh

Can't open /dev/stdout on all platforms -- but happily for the behaviour we
want to test we don't have to.

Also add a compile of variations on the theme.

2012-01-02 10:19:55 Tree
[568d94] by Nikodemus Siivola Nikodemus Siivola

runtime: handle KERN_ABORTED in the darwin semaphore implementation

Analogous to EINTR.

2011-12-30 21:06:59 Tree
[f73e45] by Nikodemus Siivola Nikodemus Siivola

defknown SC-NUMBER-OR-LOSE as foldable

No point calling it all the time with constant arguments.

2011-12-30 21:06:59 Tree
[ba319c] by Nikodemus Siivola Nikodemus Siivola

use %VECTOR-RAW-BITS in %BIT-POSITION/[0|1]

No need to pin, and it even performs a tiny bit better than using explicit
word -> byte address computations.

2011-12-30 13:52:40 Tree
[737f1f] by Nikodemus Siivola Nikodemus Siivola

package locks and compile-time effects of DEFCLASS

DEFCLASS FTYPE used to break SBCL, but package locks didn't catch it.

2011-12-30 12:54:52 Tree
[ddc81e] by Nikodemus Siivola Nikodemus Siivola

stack-allocatable fill-initialized specialized arrays, part tres

lp#902351

Mark %CHECK-BOUND as DX-SAFE, so that vectors of unknown size can be stack
allocated.

2011-12-29 18:40:46 Tree
[41cb42] by Nikodemus Siivola Nikodemus Siivola

faster FIND and POSITION on bit-vectors

Read data a word at a time for efficiency's sake.

Could do even better with VOPs, but this already wins hugely on sparse
vectors -- and works on all backends. (Tested on both little- and big-endian
hosts.)

This also makes constraint propagation in sparse universes a bit less sucky.

2011-12-29 18:25:42 Tree
[14bf77] by Alastair Bridgewater Alastair Bridgewater

Fix control stack scavenging for dynamic-extent allocation.

* Non-CONS objects on the control stack can cause... problems
in scavenge(). Rewrite scavenge_control_stack() to contain the
appropriate (simpler) scavenge code directly.

2011-12-15 14:46:48 Tree
[aab1cd] by Alastair Bridgewater Alastair Bridgewater

Move control-stack scavenging to gc-common.c.

* Instead of having slightly-divergent copies of the control
stack scavenging logic for both GENCGC and CHENEYGC, move the
GENCGC version (which is a separate function) to gc-common.c,
and alter CHENEYGC to use it instead of doing its own thing
inline.

2011-12-15 14:46:48 Tree
[5b73de] by Alastair Bridgewater Alastair Bridgewater

tests: Raw instances shouldn't stack-allocate on most targets.

* We possibly should be testing to make sure that they /do/
cons, but we can live with not having an expected failure
message for a situation that would take a lot of careful work
on the compiler and GC to improve.

2011-12-15 14:46:48 Tree
[4b19ef] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

DX structs with raw slots only allowed on conservative gencgc.

* Unless the control stack is conservatively scavenged, any
unboxed data could lead the GC to either corrupt the stack,
corrupt the heap, or just die screaming.

* Thus, all unboxed data must be stored on the number stack
on such systems. However, the number stack isn't scavenged
for boxed data, so we can't store any object that contains
both boxed and unboxed words if the unboxed words can appear
to the GC as anything other than a FIXNUM (thus, aligned
pointers are safe to store on the control stack).

* All INSTANCE objects have a boxed slot, the LAYOUT slot.
If an instance also has raw slots then it cannot go on either
stack, and must be heap-allocated.

* And none of this applies if the stack is conservatively
scavenged, which means (and gencgc c-stack-is-control-stack).
On such targets, we can dump whatever we want to the control
stack, and the GC won't complain at all.

2011-12-15 14:41:53 Tree
[6753b5] by Alastair Bridgewater Alastair Bridgewater

Fix build on non-GENCGC targets.

* Commit 8ee61a7761181511d15690246eb52d100e233935 introduced a
function with a parameter that is only used on gencgc targets.
Declare it to be ignored on non-gencgc targets.

2011-12-14 19:43:39 Tree
[de6d4c] by Lutz Euler Lutz Euler

x86: Better disassembly of segment-prefixes.

Thanks to Alastair Bridgewater who originally provided these changes
(and the headline above). I adapted his work to fit into the prefix
instruction infrastructure now available. Of his original comments
the following three still apply:

* Establish a SEG prefix for segment overrides similar
to the X66 data-width prefix.

* Have the SEG prefilter set an instruction property
for the specific segment being used.

* Alter PRINT-MEM-ACCESS to output a suitable prefix
for memory addresses when the appropriate instruction
property has been set.

I have abstracted out the segment prefix printing into the new function
MAYBE-PRINT-SEGMENT-OVERRIDE, called from PRINT-MEM-ACCESS, not to make
the latter more lengthy.

Here is an example to show the difference in disassembler output:

Old:

; 0E6: 64 FS-SEGMENT-PREFIX
; 0E7: 8910 MOV [EAX], EDX
; 0E9: 64 FS-SEGMENT-PREFIX
; 0EA: 8B0528000000 MOV EAX, [#x28]

New:

; 0E6: 648910 MOV FS:[EAX], EDX
; 0E9: 648B0528000000 MOV EAX, FS:[#x28]

2011-12-14 17:11:53 Tree
[65bdee] by Lutz Euler Lutz Euler

Improve handling of x86[-64] prefix instructions in the disassembler.

Make LOCK, REP, REX and #x66 true prefix instructions on x86[-64].
This changes only the disassembler part of the instruction definitions;
with respect to assembly LOCK already was a true prefix instruction and
REP/REPE/REPNE remain instructions in their own right.

Delete the scores of instruction formats and printer clauses that are
made obsolete by this change. Two printer clauses are still needed for
each of those SSE instructions that use the REX prefix in an infix
position.

An example of the changes in the disassembler output (on x86-64):
Old:

; 5FFC: F0 LOCK
; 5FFD: 480FB171F9 CMPXCHG [RCX-7], RSI

New:

; 4C: F0480FB171F9 LOCK CMPXCHG [RCX-7], RSI

2011-12-14 17:11:53 Tree
[b83ac6] by Lutz Euler Lutz Euler

Corrections to disassembly of SHLD, SHRD and LEA on x86[-64].

The double shifts were wrongly matching the bit pattern of some CMOV
variants. Corrected by using another instruction format on x86-64 and
by adding a constraint on the WIDTH field on x86. This made it possible
to enable the variant with an immediate shift count. On x86-64, changed
the maximum immediate shift count from 31 to 63.

Also, on x86-64, one of the printers for LEA was missing a WIDTH field
restriction, thus wrongly matching a "MOV to segment register", too.

2011-12-14 17:11:53 Tree
[4d7a5b] by Lutz Euler Lutz Euler

Make some disassembler parameters effectual.

In the context of changing the treatment of prefix instructions in the
disassembler I came across somewhat broken code to parametrize it.
This might as well be repaired, so:

Correct the calculation of the DSTATE's ARGUMENT-COLUMN which is
intended to set a minimal field width for the opcode column. It needs
to take *DISASSEM-INST-COLUMN-WIDTH* and a few more column separators
into account. So as not to confuse users, restore the previous behaviour
by setting *DISASSEM-OPCODE-COLUMN-WIDTH* to 0.

Don't emit instruction bytes when *DISASSEM-INST-COLUMN-WIDTH* is 0.

Whitespace correction in ALIGNMENT-HOOK.

Playing with these two parameters allows to select different disassembly
formats (example from x86-64):

Current:

; E11: L7: 4881FB17001020 CMP RBX, 537919511
; E18: 0F8480000000 JEQ L13

(setf SB-DISASSEM::*DISASSEM-INST-COLUMN-WIDTH* 0)

; E11: L7: CMP RBX, 537919511
; E18: JEQ L13

(setf SB-DISASSEM:*DISASSEM-OPCODE-COLUMN-WIDTH* 8)

; E11: L7: CMP RBX, 537919511
; E18: JEQ L13

2011-12-14 17:11:53 Tree
[eb53f2] by Lutz Euler Lutz Euler

Make the disassembler understand instruction prefixes.

Instructions having NIL as their printer are treated as prefixes,
meaning that they are printed on the same line as the following
instruction. If an instruction's PRINT-NAME is NIL, too, this prefix
is not printed (but prefilters etc. are run). Any number of prefix
instructions can occur in immediate succession before a non-prefix
instruction.

This commit only provides the infrastructure; its impact is currently
limited as there aren't any instructions having NIL as their printer.

The motivation for this change comes from x86[-64]: One goal is to make
instructions using prefixes like LOCK and REP print nicer, the other
to reduce the combinatorial explosion of instruction formats in the
disassembler that is currently needed to deal with the possible
combinations of the REX and the operand size override (#x66) prefixes
and that would become unbearable once the aforementioned and the segment
override prefixes are added.

Extend the existing beginnings of support for prefix instructions in
MAP-SEGMENT-INSTRUCTIONS to collect prefix names and to print them at
the right time, which is at the next non-prefix instruction, when a
non-decodable instruction is encountered or at the end of the segment.
Change the semantics of DSTATE-INST-PROPERTIES: This list is now emptied
only after a non-prefix instruction has been processed.

Abstract out the filling of the column containing the instruction bytes
into the new function PAD-INST-COLUMN and use it in several places.

Clean up whitespace and improve line breaks.

2011-12-14 17:11:53 Tree
[d7e55b] by Paul Khuong Paul Khuong

Fix EQL constraint propagation on constant assigned closure variables

* Constant lvars can now be references to assigned-to closure-
converted lambda-vars, which don't have consets. Just always use
lvar-value, at the cost of a slight potential slowdown due to more
calls to find-constant.

Reported by Eric Marsden on sbcl-devel.

* Also, canonicalize whitespace in dynamic-extent tests.

Fixes lp#903838.

2011-12-13 18:26:05 Tree
[dc38fd] by Jim Wise Jim Wise

(NO-CONSING SPECIALIZED-DX-VECTORS) fails on sunos/x86. Mark this.

2011-12-13 15:58:49 Tree
[8a33bf] by Nikodemus Siivola Nikodemus Siivola

protect against read-time package-lock circumvention from LOCKED::(BAR)

Instead of binding *PACKAGE*, bind *READER-PACKAGE* which only
affects the package READ-TOKEN interns into in the absence of a
prefix.

lp#902806

2011-12-12 13:53:27 Tree
[0e49d7] by Nikodemus Siivola Nikodemus Siivola

remove etags as a build-time dependency

Do try to build TAGS by default, but if etags isn't there, don't
make a fuss.

lp#903145

2011-12-12 12:35:51 Tree
[b69fe4] by Joshua Elsasser Joshua Elsasser

Fix clisp-hosted build.

2011-12-10 22:51:06 Tree
[bd0c2b] by Nikodemus Siivola Nikodemus Siivola

stack-allocatable fill-initialized specialized arrays, take 2

Really fix lp#902537.

Turns out multiple references to the stack allocated vector complicate
things /just/ sufficiently the that DX machinery can't keep up. (I because
the code that allocates and initializes the vector isn't substituted at the
use-site due to multiple references.)

While it would be nice to make it smart enough to deal with
non-let-converted WITH-ARRAY-DATA, that looks a bit tricky... so instead
simplify things in the FILL transform when the vector is a simple-array.

2011-12-10 22:33:34 Tree
[fb2d28] by Nikodemus Siivola Nikodemus Siivola

faster VECTOR-SUBSEQ*

Use a WITH-ARRAY-DATA to get to the underlying vector, and use a widetag
dispatch table to pick the correct SUBSEQ implementation for the underlying
type.

This is actually just as fast even for simple strings as STRING-SUBSEQ*, so
throw it out.

Also make inlining SUBSEQ conditional on SPEED > SPACE now that the
out-of-line version doesn't suck so much.

Fixes lp#902537.

2011-12-10 18:25:04 Tree
Older >