Commits on May 29, 2010
Commits on May 24, 2010
  1. Fix FP traps on PPC/Linux.

    Alastair Bridgewater
    Alastair Bridgewater committed May 24, 2010
      * Linux on most platforms, including PPC, kicks off its signal
    handlers with a cleared FP control word.  We already have a hook to deal
    with this, so enable it.
      * The implementation of said hook on PPC/Linux was broken, largely due
    to a variable-size mismatch in a KLUDGE it uses.  Fixed and documented
    the KLUDGE, added support for preserving the current rounding mode, and
    enabled the actual restoration of the FP control word.
      * NetBSD isn't the only target which requires :INVALID exceptions to
    be disabled, it also matters on PPC.  Fixed the default control mode.
      * Fix up the test suite to reflect the current expectations for
    float.pure.lisp tests.
Commits on May 23, 2010
  1. Enable floating-point exception delivery on PPC/Linux.

    Alastair Bridgewater
    Alastair Bridgewater committed May 23, 2010
      * For some reason, Linux disables floating-point exception delivery
    by default.  Use the PR_SET_FPEXC prctl (new in 2.4.21 and 2.5.32) to
    enable it in "precise" mode (possibly overkill).
      * This is necessary but not sufficient to fix one of the failing
    tests in float.pure.lisp.
      * Given that this is only necessary for one test case, the test
    suite has woefully incomplete coverage of floating-point exceptions.
  2. Support for building on OpenBSD/PPC (patch by Josh Elsasser).

    Alastair Bridgewater
    Alastair Bridgewater committed May 23, 2010
      * Dynamic space assignments.
      * New Config.* makefile fragment.
      * OpenBSD-specific support in ppc-arch.c and ppc-bsd-os.c
      * Fixed test suite issues relating to OpenBSD/PPC.  This was that the
    foreign stack alignment needed setting and that OpenBSD, unlike other
    PowerPC targets, requires -fPIC in CFLAGS when building shared objects.
      * It turns out that os_context_sp_addr() in ppc-bsd-os.c is only used
    when ARCH_HAS_STACK_POINTER is set, which only occurs on x86oid systems
    at the present time.
Commits on May 21, 2010
  1. Integer callback result fixes.

    Alastair Bridgewater
    Alastair Bridgewater committed May 21, 2010
      * Callback results should be typechecked based on their declared
    type, but stored as if they were the full width of a machine register.
      * Fixed sb-alien::alien-callback-lisp-wrapper-lambda to make this
    happen properly.
      * Updated corresponding tests (formerly callback.impure.lisp /
    sign-extension and underflow-detection) to cover 16-bit cases, which
    would have broken on all targets, not merely 64-bit targets.
      * As a minor side note, assistance in testing the changes in
    was provided by one Andreas Selfjord Eriksen, but I forgot to note this
    fact in the commit message.  Mea Culpa.
Commits on May 20, 2010
  1. Test suite cleanups.

    Alastair Bridgewater
    Alastair Bridgewater committed May 20, 2010
      * Changed the impure test runner to be more in line with what used
    to happen when it used fork() instead of RUN-PROGRAM (--noprint and
    --disable-debugger, don't allow RUN-PROGRAM to use the inherit-stdin
    code path).
      * Re-enabled the (RUN-PROGRAM INHERIT-STDIN) test, as it no longer
    hangs on ppc/linux, x86-64/linux, or x86-64/darwin, the platforms
    which prompted the test to be disabled.
      * Fixed the failure mode of dynamic-extent.impure.lisp test case
    HANDLER-CASE-BOGUS-COMPILER-NOTE to fail the test case instead of
    attempting to enter the debugger (due to COMPILER-NOTE not being a
    subclass of ERROR).
      * Disabled the x86-64 SSE floating-point tests on non-x86oid
    platforms due to the use of x86oid-only SB-VM::TOUCH-OBJECT in the
    test code causing a package lock error.
      * Registered all tests that fail on PPC/Linux as :fails-on :ppc.
      * Removed a number of :fails-on clauses that appear to be out of
Commits on May 10, 2010
  1. fix clisp build for ppc

    Nathan Froyd
    Nathan Froyd committed May 10, 2010
    LP #576587, thanks to Josh Elsasser for the patch.
Commits on May 6, 2010
  1. Clear higher order bits for SSE operations that don't

    pkhuong committed May 6, 2010
     * SQRTSD, CVT{SS,SD}2{SS,SD} and CVTSI2{SS,SD} leave the high-order
       bits of the result as-is. These are the only (hopefully) operations
       we use that have a single input, so we must explicitly clear out
       the destination register.
     * Probably a performance fix too, as it breaks dependency chains on
       the destination register.
     * The bug was relatively hard to observe. Raymond Toy reported seeing
       and fixing something similar on maxima/CMUCL. Brittle test case
Commits on May 1, 2010
  1. PPC character handling fixes.

    Alastair Bridgewater
    Alastair Bridgewater committed May 1, 2010
      * SAP-REF-32LE referred to SAP-REF-16 instead of SAP-REF-16LE on
    non-x86oid platforms, incorrect for all big-endian targets.
      * The immediate-character MOVE function was using a 16-bit-only
    load instruction, which was insufficient for unicode operation.
      * The -c (constant) character compare VOPs use a compare
    instruction with a 16-bit immediate field.  Disabled on unicode
    (there's no good way to conditionally use them when the code
    point of the constant character fits a signed-byte 16).
      * Cleaned up some external-format.impure.lisp test-cases, adding
    with-test and names as needed.
Commits on Apr 30, 2010
  1. Scrub control stack after scavenging on non-x86oid gencgc.

    Alastair Bridgewater
    Alastair Bridgewater committed Apr 30, 2010
      * We scavenge the control stack as if it is entirely boxed data,
    rewriting pointers as necessary.
      * Stack frames tend to contain uninitialized words, which is fine so
    long as they are immediate data or valid pointers (they will be
    counted as live data, so the scavenge may be more conservative than
    necessary, but this is not an error).
      * The area beyond the current stack top is not scavenged, as it is not
    live data.
      * Cheneygc scrubs the control stack (clears the area beyond the stack
    top) once it (the control stack) has been scavenged.
      * Gencgc on non-x86oids (when precise stack scavenging is done) has
    not been scrubbing the control stack, leading to the possibility of
    having stale pointers in the active heap area.
      * Scrubbing the control stack after scavenging it reduces if not
    eliminates the random GC faults observed on PPC.
      * All of this explanation probably belongs in a document describing
    the hows and whys of GC on SBCL, not merely in a commit message.
  2. PPC linkage-table fix.

    Alastair Bridgewater
    Alastair Bridgewater committed Apr 30, 2010
      * arch_write_linkage_table_jmp() on PPC was overrunning the linkage
    table entry space by one useless (duplicated) instruction, which loses
    when updating the linkage-table if maphash returns entries in any order
    other than by ascending linkage-table entry address.
  3. Gencgc error-checking fixes.

    Alastair Bridgewater
    Alastair Bridgewater committed Apr 30, 2010
      * Use %p instead of %x in error messages to avoid truncating pointers
    to 32 bits on 64 bit platforms.
      * Count pointers to thread stack spaces as being valid (presuming that
    they are created by dynamic-extent allocation).
      * Count pointers to funcallable_instance_tramp as being valid (not an
    issue on x86oids, but it's a boxed pointer on non-x86oid platforms).
  4. Fix undefined-function bug-353 tests on x86oids.

    Alastair Bridgewater
    Alastair Bridgewater committed Apr 30, 2010
      * In undefined_tramp, move return address from passing location to
    storage location before trapping.
  5. support NetBSD-current

    csrhodes committed Apr 30, 2010
    ... at least if I've done everything right.  Slushy freezes, don't you
    just love them?
    Also don't run the run-program inherit-stdin test, because it hangs.
Commits on Apr 27, 2010
  1. Remove the one place we assumed constant LVARs referred li…

    pkhuong committed Apr 27, 2010
     * Resulted in a type mismatch or subtle errors during compilation with
       singleton types.
       Reported by Chun Tian (binghe) on sbcl-devel
  2. Fix ugliness in PRINT-UNREADABLE-OBJECT

    Tobias C. Rittweiler
    Tobias C. Rittweiler committed Apr 27, 2010
      * If one used :TYPE NIL on it, one could sometimes get printed
        representations that looked like #<\nFOO...> (notice the newline.)
      * Test case included.
      * Fix some WITH-TEST forms of previous commit.
  3. Minor test suite tweaks.

    Tobias C. Rittweiler
    Tobias C. Rittweiler committed Apr 27, 2010
      * Wrap WITH-TESTS around bare ASSERTS in pprint.impure.lisp.
      * Add #+sb-eval to test excercising the interpreter. (S.Boukarev)
Commits on Apr 26, 2010

    pkhuong committed Apr 26, 2010
     * Discovered by Hans Hubner, reported by madnificient on #lisp.
  2. Avoid emitting instructions (LODS, MOVSXD) that confuse ot…

    pkhuong committed Apr 26, 2010
     * LODS is probably slow nowadays, and isn't supported by valgrind. Remove
       one use in calling VOPs.
     * Some disassemblers don't like useless (e.g. 32 bit to 32 bit) MOVSXD.
       Convert them to MOV.
  3. Downgrade WARNING to STYLE-WARNING for *possible* type errors

    pkhuong committed Apr 26, 2010
     * Detect some cases that might not lead to type errors, and signal
       a STYLE-WARNING instead of a WARNING then.
  4. Reset a toplevel INLINE declaration for READ-BYTE

    pkhuong committed Apr 26, 2010
     * It used to remain declaimed inline after load.lisp.
       Report and patch by Stas Boukarev.
  5. Fix the build on alpha

    pkhuong committed Apr 26, 2010
     * There was a type (SC!C) in a VOP definition...
  6. Perform range reduction on x87 transcendentals

    pkhuong committed Apr 26, 2010
      * ... instead of returning 0.0 arbitrarily.
  7. Fixtransforms for float TRUNCATE

    pkhuong committed Apr 26, 2010
     * Detect ignored secondary values correctly
     * Handle being unused (no result LVAR) without dying at compile-time
  8. Test for the correct range when eliding range reduction on…

    pkhuong committed Apr 26, 2010
    … x87
     * We now test for a maximal magnitude of 2^63, not 2^64.
  9. More robust reciprocal exactitude test

    pkhuong committed Apr 26, 2010
     * Trying to divide by tiny powers of 2 could result in compile-time
  10. Ensure GCD always returns positive values

    pkhuong committed Apr 26, 2010
     Fixes lp#413680.
Commits on Apr 23, 2010
  1. fix backtick problem breaking e.g. literal struct parsing.

    cracauer committed Apr 23, 2010
    Fix a typo that sneaked in when committing a diff submitted by Stas
    Boukarev, version, launchpad bug #309093.
    This makes literal struct parsing work again.
    (defstruct foo (r nil :type (or null simple-vector)))
    #S(foo :r #(#x00 #x11 #x22 #x33 #x44 #x55 #x66 #x77))
    ==> now works again.
Commits on Apr 18, 2010
  1. micro-optimize x86oid signed-word checking

    Nathan Froyd
    Nathan Froyd committed Apr 18, 2010
    Combine MOV/CMP by using CMP with a memory operand.  Saves a byte.
  2. micro-optimize x86 lowtag testing

    Nathan Froyd
    Nathan Froyd committed Apr 18, 2010
    Instead of MOV/AND/CMP, use LEA/TEST, which is one byte shorter.
    Delete AL-LOADED in %TEST-LOWTAG and %TEST-HEADERS as well, since that
    parameter is unused and attempting to make the above optimization work
    in the face of that option would be tricky.
Commits on Apr 8, 2010
  1. better DEFMETHOD pretty-printing

    nikodemus committed Apr 8, 2010
     No more #'FOO in lambda-lists.
Commits on Apr 7, 2010
  1. no more :NEW-OWNER in GRAB-MUTEX

    nikodemus committed Apr 7, 2010
     ...and I'm sorely tempted to make GET-MUTEX signal an error if the
     argument is anything but NIL or current thread...
  2. typo in src/runtime/sunos-os.c

    nikodemus committed Apr 7, 2010
     fault_addr where it should have been addr.
     Hopefully fixes lp#538689.
  3. more robust runtime executable path detection

    nikodemus committed Apr 7, 2010
     Patch by Josh Elsasser.
     * os_get_runtime_executable_path() extended with an argument to
       indicate if the returned path should be externally usable (which
       precludes paths such as /proc/curproc/file).
     * If os_get_runtime_executable_path() fails, use an argv[0] derived
       path instead.
     * Check build_id when saving executable cores to make sure we got
       the right runtime -- since using the argv[0] method can otherwise
       go wrong once in a blue moon.
     Fixes Launchpad #375549.