sbcl Log


Commit Date  
[987e39] by Jim Wise Jim Wise

Fix HEAD ref lookups, and compatibility for non-bash shells.

2011-10-24 13:38:25 Tree
[9ae145] by Jim Wise Jim Wise

Update to work with non-bash versions of expr.

2011-10-24 13:24:30 Tree
[7d4072] by Alastair Bridgewater Alastair Bridgewater

Clean up build process for cross-compiled targets.

* Over time, the process for producing an SBCL build for another
target architecture or OS has become more difficult and less
documented.

* Move all make.sh argument processing to make-config.sh.

* Have make-config.sh produce a file, output/build-config,
containing shell commands to set up important build parameters
such as where to find GNUMAKE, what SBCL_XC_HOST is, and so on.

* Source output/build-config in most of the make*.sh scripts.

* The practical upshot of all this is that a cross-compile
build is now a matter of alternating between target and host,
calling make-config.sh, make-host-1.sh, make-target-1.sh,
make-host-2.sh, make-target-2.sh, and following up with a
make-target-contrib.sh on the target, and you wind up with a
usable product. And, as make-config.sh does all of the arg
parsing, you can pass --xc-host= or --dynamic-space-size= or
whatever and it all works out.

2011-10-22 21:10:38 Tree
[c6989d] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Unwind-to-frame-and-call-VOP doesn't need static symbols.

* The UNWIND procedure takes as parameters a target block and an
unknown-values start/count pair. The old implementation was passing
the block, a zero count, and a garbage start. Pass the function to
call as the start, instead of storing it as a static symbol value as
is done now or reserving an extra stack slot somewhere relative to
the unwind block.

* Delete the static symbol formerly used for this.

* This has been done for both x86 and x86-64.

2011-10-22 17:33:03 Tree
[082940] by Paul Khuong Paul Khuong

Fix a long-standing bug in (PRIMITIVE-TYPE [MEMBER type])

A refactoring in 1.0.12.18 resulted in overly-optimistic primitive
type.

Reported by Eric Marsden on sbcl-devel.

2011-10-22 01:38:00 Tree
[b0920f] by Paul Khuong Paul Khuong

Fix another assumption w.r.t fixnum width and n-lowtag-bits

This time in LOGBITP.

Reported by Eric Marsden on sbcl-devel.

2011-10-22 01:04:55 Tree
[4466e4] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

describe: Better description for complex setf-expanders.

* Rather than simply reporting the documentation string (if any), also
report the lambda-list of the expansion function and the associated
source location.

2011-10-22 00:21:18 Tree
[e0806c] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

setf: Record the original lambda-list for complex setf-expander functions.

* Added an extra parameter to ASSIGN-SETF-MACRO for the lambda-list.

* In ASSIGN-SETF-MACRO, when working with an EXPANDER (as opposed to
an INVERSE), set the %FUN-LAMBDA-LIST of the EXPANDER to the value
passed as the new parameter.

* In all call sites for ASSIGN-SETF-MACRO (two uses in DEFSETF, one in
DEFINE-SETF-EXPANDER), pass the new lambda-list parameter appropriately.

2011-10-22 00:19:39 Tree
[a2654b] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

setf: excise GET-SETF-METHOD and related detritus.

* GET-SETF-METHOD is the CLtL1 version of GET-SETF-EXPANSION, and is
neither used in SBCL nor exported from any package. Kill it.

* Also kill the DEFKNOWN in the compiler for a (different)
GET-SETF-METHOD and GET-SETF-METHOD-MULTIPLE-VALUE (also a CLtL1
function, neither used nor implemented in SBCL).

2011-10-22 00:19:39 Tree
[3c3006] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

setf: pre-defined setf-expanders should handle multiple value places gracefully.

* The GETF, LOGBITP, LDB and MASK-FIELD setf-expanders all take a
PLACE argument, the setf-expansion for which was being obtained via
GET-SETF-METHOD, which is the CLtL1 version of GET-SETF-EXPANSION, but
throws an error if a PLACE multiple values. This also pre-dates the
adoption of VALUES places.

* The most reasonable interpretation of the spec appears to be that
any values after the first are to be ignored upon reading and set to NIL
upon writing.

* To do so, change each use to SB!XC:GET-SETF-EXPANSION instead of
GET-SETF-METHOD, and bind any symbols in the list of new value locations
to NIL before invoking the setter form.

2011-10-22 00:19:36 Tree
[14dbe4] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

setf: read-modify-write macros should deal with multi-value places gracefully.

* In PUSH, PUSHNEW, POP, REMF, INCF, DECF and DEFINE-MODIFY-MACRO the
setf-expansion was being obtained via GET-SETF-METHOD, which is the
CLtL1 version of GET-SETF-EXPANSION, but throws an error if a PLACE has
multiple values. This also pre-dates the adoption of VALUES places.

* The most reasonable interpretation of the spec appears to be that
any values after the first are to be ignored upon reading and set to NIL
upon writing.

* To do so, change each use to SB!XC:GET-SETF-EXPANSION instead
of GET-SETF-METHOD, and bind any symbols in the list of new value
locations to NIL before invoking the setter form.

2011-10-22 00:18:29 Tree
[b910fe] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

setf: Don't use DO to "zip up" temporaries in read-modify-write macros.

* Alter POP, REMF and DEFINE-MODIFY-MACRO to use (MAPCAR #'LIST
DUMMIES VALS) when building LET*-bindings instead of some crazy DO loop
involving PUSH and NREVERSE.

* While we're here, introduce a new temporary in POP rather than
destructively modify a binding.

2011-10-22 00:15:24 Tree
[7cee24] by Alastair Bridgewater Alastair Bridgewater

Fix build on x86-64/darwin.

* It turns out that darwin preprocesses assembly files slightly
differently from every other platform. Possibly something related
to the rather VMSish -fdollars-in-identifiers option to gcc.

* Use parens to break the preprocessor "macro" we're trying to
use away from the dollar-sign literal-constant marker it's getting
merged with.

* Reported by nikodemus in #sbcl.

2011-10-21 16:09:41 Tree
[357b03] by Alastair Bridgewater Alastair Bridgewater

More unboxed-byte-addresses-are-word-addresses damage.

* In the binding stack tests, the binding stack pointer is altered
by adding two to SB-VM::*BINDING-STACK-POINTER*. This "works" when
n-fixnum-tag-bits is equal to word-shift, but is badly wrong when
they differ.

* Fixed by adding a variable to hold the actual delta required,
based on the difference between n-fixnum-tag-bits and word-shift.

* Incidentally, how on earth does this test work on threaded PPC?
PPC has the BSP in a register, not a variable, and there are no
memory barriers around the synchronization for GCs. How does the
(incf sb-vm::*binding-stack-pointer*) not die from an unbound
symbol? And, really, it looks like it doesn't matter if a thread
dies or lands in the debugger: If the process doesn't die screaming,
the test always passes, even if it only does a single GC.

* And, while we're on the topic, how on earth does this test work
on x86? The memory-barrier argument should apply there as well.
Wait, I know! The CPU still gets timer interrupts, and the kernel
effectively provides a barrier then. And the "it doesn't matter"
argument also applies here: If it doesn't deadlock the system
completely, the main thread will kill everything off and call it a
success after four seconds anyway.

2011-10-20 14:44:08 Tree
[a36968] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

63-bit fixnums on 64-bit targets.

* This is mostly just a matter of spreading the PADn lowtags around,
one or two cases of adjusting a constant, and some KLUDGEing around in
the runtime to make everything work for 1 <= n-fixnum-tag-bits <= 3.

* Yes, this means that you can change n-fixnum-tag-bits before
building in order to return to a 61-bit fixnum world. Or you can have
62-bit fixnums if you want.

2011-10-20 14:44:01 Tree
[48d075] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Reorder 64-bit lowtags.

* Move 64-bit lowtags around so that all non-fixnum tags have the low
bit set.

* Fix up print_obj() to compensate for the layout change.

* Fix up is_lisp_pointer() to compensate for the layout change.

* Change other_immediate_lowtag_p() to take advantage of the
distribution of other-immediate lowtags.

2011-10-19 19:49:32 Tree
[3b5fb5] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

x86-64 disentwingling of fixnums and words.

* This is mostly constant fixups and supplying scaling factors in
places.

* Where possible, I have used constructs that will simply generate the
correct code no matter what the width of a fixnum is. In other places,
I have used an explicit check for the historic case and provided and
alternate code sequence for when it no longer applies.

* Thanks to Paul Khuong for helping with the finding and fixing of
many of these places.

2011-10-19 19:49:32 Tree
[7e02fe] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

General disentwingling of fixnums and words.

* Historically, n-fixnum-tag-bits has been equal to word-shift and has
been (1- n-lowtag-bits). This led to implementors using constants and
calculations which happened to be right by coincidence rather than by
design.

* Fix all places not part of the support for a particular backend to
use the defined-correct constants and calculations for the operations
being performed.

* Thanks to Paul Khuong for helping with the finding and fixing of
many of these coincidences.

2011-10-19 19:49:32 Tree
[a53e74] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Improve some test cases for fixnum-width independence

* In arith.pure.lisp, some test cases were defined in terms of
n-lowtag-bits instead of n-fixnum-tag-bits.

* In sb-aclrepl, the bignum used for testing fit within an
(signed-byte 63), the largest possible fixnum type on a 64-bit system.

* Thanks to Paul Khuong for finding and fixing the arith.pure.lisp
tests.

2011-10-19 19:49:32 Tree
[dd04bd] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Fixnum and unsigned-fixnum array cleanups.

* Rename {arraytype}-{elementtype1} to {arraytype}-{elementtype2} for
{arraytype} in (SIMPLE-ARRAY VECTOR), {elementtype1} in
(UNSIGNED-BYTE-29 UNSIGNED-BYTE-60 SIGNED-BYTE-30 SIGNED-BYTE-61) and
{elementtype2} in (UNSIGNED-FIXNUM SIGNED-FIXNUM) across the board
(predicates, tag names, etc.).

* Cleanup of related conditional compilation.

* Export n-fixnum-bits (the remaining fixnum representation constant)
from sb!vm instead of having it as an internal symbol of sb!pcl.

* Original patch by Paul Khuong.

2011-10-19 19:49:32 Tree
[e99845] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Change x86oid modular arithmetic to work if fixnum width changes.

* This is largely (signed-byte {30,61}) => fixnum and smod{30,61} =>
modfx.

* Thanks to Paul Khuong for the initial patch.

2011-10-19 19:49:32 Tree
[2cc627] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Fix definition of most-FOOative-fixnum.

* Define in terms of n-positive-fixnum-bits, not some relation between
n-word-bits and n-lowtag-bits.

2011-10-19 19:49:32 Tree
[f2942b] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Introduce sb!vm::fixnum-lowtags

* This is defined as a list of the exported SB!VM -LOWTAG symbols
bound to integers that are zero when masked with fixnum-tag-mask (in
short, the names of the fixnum lowtags).

* Replace all direct references to the fixnum lowtags with something
based on fixnum-lowtags.

* Introduce the corresponding change to genesis, with the predicate
is-fixnum-lowtag instead of testing against specific lowtags.

* Introduce the corresponding change to the runtime, making fixnump()
check against fixnum-tag-mask instead of comparing individual fixnum
tags.

* And, while we're redefining fixnump() in terms of the significant
part of the lowtag, do the same with other_immediate_lowtag_p().

2011-10-19 19:49:32 Tree
[e57523] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Clean up all use of the *-space-free-pointers.

* These are symbols whose value slots contain unboxed word-aligned
byte pointers. Thus, they appear to lisp as fixnums. They are not,
however, guaranteed to be word pointers.

* Shift by n-fixnum-tag-bits instead of shifting by word-shift or
scaling by n-word-bytes in order to obtain byte pointers.

2011-10-19 19:49:32 Tree
[f5bb74] by Alastair Bridgewater Alastair Bridgewater , pushed by Alastair Bridgewater Alastair Bridgewater

Redefine symbol TLS slot indices.

* Instead of having symbol TLS slots be fixnum indices treat them as
byte offsets from the base of the thread structure.

* This has no effect on the compiler or backends.

* TLS slot allocation must now be done in terms of words, not fixnums.

* In %{set-,}symbol-value-in-thread, use get-lisp-obj-address instead
of scaling the TLS index.

* Use explicit WORD_SHIFT instead of make_fixnum() / fixnum_value() in
the runtime.

2011-10-19 19:49:32 Tree
Older >