Commits on Apr 13, 2008
  1. 1.0.16: release, will be tagged as sbcl_1_0_16

    William Harold Newman committed Apr 13, 2008
Commits on Mar 27, 2008
  1. sod this, revert to the old & simple tar-using contrib ins…

     * Windows has occasionally *.FASL files, so *.fasl is not robust. Copy
       all the files using tar, but keep the find + chown so that contribs
       are owned by the installer, not the builder.
    nikodemus committed Mar 27, 2008
Commits on Mar 26, 2008
  1. more portable contrib module installation

     * Going in despite the freeze: earlier version depended on GNU tar,
       and broke on installations where tar was not GNU.
     * Patch by Eugene Ossintsev.
    nikodemus committed Mar 26, 2008
  2. Remove subclasses of sb-posix:syscall-error

    These were added in 1.0.14 (but never documented), and turn out to be
    impediments to some future progress on Windows.
    Richard M Kreuter committed Mar 26, 2008
Commits on Mar 25, 2008
  1. One more fix for Win32 (oops)

    * contrib/sb-posix/posix-tests.lisp: feature-out the fcntl tests on Win32.
    Richard M Kreuter committed Mar 25, 2008
  2. Windows fixes.

    * tools-for-build/grovel-headers.c: add a grovel for EINTR
    * contrib/sb-posix/constants.lisp: feature-out the ALIEN-FLOCK structure.
    Richard M Kreuter committed Mar 25, 2008
Commits on Mar 17, 2008
  1. fix bug 423

     * TRULY-THE no longer eagerly annotates the LVAR, but rather acts
       like THE in unsafe code. (Inserts a cast for which no type-check is
       :RESULT-TYPES, which was masked by the old TRULY-THE
       implementation. (Tested on x86, x86-64, PPC, but all backends
       updated -- hopefully correctly.)
     * Docstrings for THE and TRULY-THE.
     FWIW, this patch seems to make PPC+GENCGC build happy once again: but
     I don't know if that means the problems there were/are related to bug
     423 -- or if the exact memory layout just happens to change subtly so
     that whatever corruption occurs, just happens to occur in a place
     where the GC doesn't see it anymore. (Or if the exact point at which
     GC runs is now just slightly different so that the problem pointers
     are not live anymore, or...)
    nikodemus committed Mar 17, 2008
  2. fix bitrotted GC sanity checks

     * One missing #ifdef.
     * Better lossage messages for for some cases.
    nikodemus committed Mar 17, 2008
Commits on Mar 14, 2008
  1. tweak the PCL cache improvement from

     * Thanks to Paul Khuong for noting that we weren't actually dropping
       50% of the entries, but somewhat less. Now (assuming our RANDOM is
       good) we really should average 50%.
    nikodemus committed Mar 14, 2008
  2. implement SB-VM::WITH-CYCLE-COUNTER for x86 and x86-64

     * For potential future exporting from SB-SYS.
     * Thanks to Paul Khuong and the CMUCL team.
    nikodemus committed Mar 14, 2008

     * Check the input string for wellformedness, and construct a
       specialized vector.
    nikodemus committed Mar 14, 2008
  4. thread-safe FIND-CLASS -- really this time

      Call It Myopia: it turns out FIND-CLASSOID &co underneath FIND-CLASS
      (when called for non-existent classes) were not thread-safe either.
      * Get rid of *FIND-CLASS* hash-table, moving the actual PCL classes into
        corresponding CLASSOID-CELL (new slot PCL-CLASS).
      * Move classoid-cells from the infodb into into *CLASSOID-CELLS*
        hash-table. We want to be able to lock around
          (or (get-cell) (setf (get-cell) (make-cell)))
        and infodb isn't really designed for that. This is the crux of
        the breakage:
         *** parallel writes to infodb are not thread safe! ***
        latter should not be really necessary as long as we don't
        assume (SETF FIND-CLASS) to be thread-safe, but easier to reason
        about it this way. ...and it would be nice for the SETF to be safe
        as well.
      Related work:
      * Don't create cells for non-exitent classes unless we know we are
        going to need them -- previously both FIND-CLASSOID and FIND-CLASS
        created a cell for every name they were called with, which is
        isn't too good. This is especially important as once created these
        cells never go away!
    nikodemus committed Mar 14, 2008
Commits on Mar 13, 2008
  1. thread-safe FIND-CLASS

      * Reported by Attila Lendvai.
      ...I could have sworn I did this already...
    nikodemus committed Mar 13, 2008
  2. SB-INTROSPECT: source-locations for objects

     * FIND-DEFINITION-SOURCE returns the source-location of the class for
       standard-objects, conditions, and structure objects.
     * Patch by Tobias C. Rittweiler.
    nikodemus committed Mar 13, 2008
  3. nicer lambda-lists for GCD and LCM

     * Patch by Tobias C. Rittweiler.
    nikodemus committed Mar 13, 2008
  4. only one return value from USER-HOMEDIR-PATHNAME

       which returns the parsing offset as secondary value---although
       USER-HOMEDIR-PATHNAME is specified to only return on value; wrap it
       in an explicit (values ...) call.
       Patch by Tobias C. Rittweiler.
    nikodemus committed Mar 13, 2008
  5. fix ~R for vigtillions

     * Off-by-one error in sb-format::format-print-cardinal-aux was
       preventing ~R from printing numbers between 10^63 and 10^66-1.
       Patch by Luis Oliveira.
    nikodemus committed Mar 13, 2008

     * For symmetry with SOCKET-SEND.
    nikodemus committed Mar 13, 2008
  7. typos and grammar

     * Fix manpage typo: "inplements". Thanks to Eugene "Oversight"
     * Fix PPRINT-INDENT docstring: s/is it is a/is a/. Thanks to Cyrus
       "Hawkeye" Harmon.
    nikodemus committed Mar 13, 2008
  8. slightly nicer contrib installation

     * Install owned by the runner, not builder. Don't install
       CVS directories.
     * Thanks to Eugene Ossintsev.
    nikodemus committed Mar 13, 2008

     * Thanks to Stanislaw Halik.
    nikodemus committed Mar 13, 2008
Commits on Mar 12, 2008
  1. refactor "system locks" framework, one TIMER buglet

     * Choose the degree of GC/interrupt suppression at compile-time.
     * Default is not to allow interrupts at all, callers which need
       WITH-INTERRUPTS to work can now specify :ALLOW-WITH-INTERRUPTS.
     * Should fix reported Stumpwm crashes due to attempts to recursively
       obtain *SCHEDULER-LOCK*. (Caused by SIGALRM interrupting GET-MUTEX
       inside the call to %TIMER-CANCEL-FUNCTION, which led to recursive
       entry to WITH-SCHEDULER-LOCK.)
     * Don't reschedule timers for dead threads.
     * Three new test-cases for timers, which (1) represent my failing
       attempts to trigger the Stumpwm bug described above (2) led to
       noticing the rescheduling promblem (3) fail horribly on OS X Tiger
       -- not sure if this is our or Darwin's problem...
    nikodemus committed Mar 12, 2008
Commits on Mar 10, 2008
  1. use TEST X X when possible in SIGNED-BYTE-*-LEN VOPS

     * Both x86 and x86-64.
    nikodemus committed Mar 10, 2008
  2. kill commented out ALLOCATION from x86-64

     * 'twas a duplicate of ALLOCATION-TRAMP.
    nikodemus committed Mar 10, 2008
  3. better threaded BIND & UNBIND for x86-64

     * x86-64 port of, plus some x86 cleanups:
       -- Rename ALLOCATE-TLS-INDEX-* to ALLOC-TLS-INDEX-* for more
          consistent asm routine names.
       -- Use (FIXNUMIZE 1) instead of magic number 4.
       Shrinks the threaded x86-64 core by ~200k bytes.
    nikodemus committed Mar 10, 2008
Commits on Mar 7, 2008
  1. New modular arithmetic representation decision

    	Prefers any exactly-matching modular implementation, then tagged
    	if possible, then untagged.  Should make code of the form
              (logand xxx most-positive-fixnum)
    	more tolerable.
    	Also includes better lognot/fixnum implementation on all
    Squashed commit of the following:
    commit 81776d9aab531db20711320ecea920453e058cef
    Author: Christophe Rhodes <>
    Date:   Fri Mar 7 04:54:03 2008 -0700
        Fix lognot for fixnums on alpha.
    commit 27ce80579851bf9227d7d1121cf1554dc383049d
    Author: SBCL devs <>
    Date:   Thu Mar 6 15:02:03 2008 -0700
        New modular arithmetic ported to alpha
        (as yet untested beyond make-genesis-2: lognot/fixnum is buggy)
    commit d6ae6339374983ae874d85f3c52103c77ccad222
    Author: Christophe Rhodes <csr21@localhost.localdomain>
    Date:   Fri Jan 11 17:38:19 2008 +0000
        New modular arithmetic ported to mips.
        Tested by Thiemo Seufer.
    commit 50e2e51d25bb3d3997e4b884b7a15f7ba1992391
    Author: Christophe Rhodes <csr21@localhost.localdomain>
    Date:   Fri Jan 11 17:37:41 2008 +0000
        Make find-modular-class get signed and unsigned the right way round.
        As it happened, this all worked by accident anyway, because the only
        other user of the *foo-modular-class* specials didn't rely on the
        separation between the classes, but instead used other data.  Hmm...
        (Noticed by Nikodemus Siivola)
    commit d3de3d27b212999672644d8a4fccfce9676dbf4f
    Author: Christophe Rhodes <>
    Date:   Tue Jan 1 14:25:33 2008 +0000
        New modular arithmetic ported to sparc.
        As with ppc, the signed modular arithmetic is not terribly useful, as
        only good functions have been implemented (so no +, -, * and ash)
    commit e99c204ab165139f4c8f8aacb59d4a825b90b7d1
    Author: Christophe Rhodes <>
    Date:   Mon Dec 31 18:15:41 2007 +0000
        Fix for fixnum LOGNOT on PPC
        Use subfic res, x, -4 rather than xori res, x, -4 -- xori's immediate
        argument is not sign-extended.
        (Thanks to Andy Hefner for the idea to use subfic rather than xori+xoris)
    commit db8ffb719750c8bc655519b03c2081cc3b8d0b2e
    Author: Christophe Rhodes <>
    Date:   Mon Dec 31 18:13:21 2007 +0000
        New modular arithmetic ported to ppc.
        Simple modifications only.  It remains for someone to add signed modular
        definitions of +, -, * and so on for this to become useful on ppc.
    commit 5c7562fc1e2a96a81d9bc32fb77ad70ed1794e6e
    Author: Christophe Rhodes <>
    Date:   Mon Dec 31 10:12:26 2007 +0000
        New modular arithmetic choice for x86-64
        Simply adapt x86-64/arith.lisp by
        * removing logxor implementation (as it's now :good)
        * adapting %LEA implementation
    commit 39054fae6e5a2e55856a506ad497978adcbbd6c2
    Author: Christophe Rhodes <csr21@omega.localdomain>
    Date:   Sun Dec 30 21:50:16 2007 +0000
        Better fixnum LOGNOT implementations.
        Apparently inherited from cmucl, our fixnum and signed LOGNOT VOPs had
        generator costs that preferred the signed representation over the tagged.
        Fix this (on all backends; tested only on x86)
    commit 6eee19de7a49762ea2f3bbfe89d9ea1b0dcee47f
    Author: Christophe Rhodes <csr21@omega.localdomain>
    Date:   Sun Dec 30 21:29:39 2007 +0000
        Better signed modular arithmetic.
        All the LOGFOO functions are :good modular functions for signed
        modular arithmetic.
        LOGXOR is a :good modular function for untagged unsigned modular
    commit 32961ecb51bcfea655f985d1f774a8fc46bd155b
    Author: Christophe Rhodes <csr21@omega.localdomain>
    Date:   Sun Dec 30 19:30:57 2007 +0000
        Split untagged modular class into unsigned and signed variants.
        FIND-MODULAR-VERSION now takes both KIND and SIGNEDP arguments.
    commit e3b88693c3721cd84d9fb4a01d624d450c120cdd
    Author: Christophe Rhodes <csr21@omega.localdomain>
    Date:   Sun Dec 30 17:58:49 2007 +0000
        Choice of modular version, initial commit
        Commit of approximately September vintage work, x86-only.
    csrhodes committed Mar 7, 2008
Commits on Mar 5, 2008
  1. reset DF on x86 and x86-64 after every STD instead of when…

    … calling out
     * Both the old and the new behaviour should be correct re C-ABI, but
       this is much easier to audit. Thanks to Aurelien Jarno for the
       initial patch.
     * This should also fix the build on platforms with GCC 4.3 compiled
       libc signal handling functions, which assume DF to be cleared.
       ** NOTE ** If kernel/libc does not arrange for DF to be cleared
       before calling our handler and restore it afterwards, we can still
       be broken by asynch signals on post 4.3 GCC libcs -- but this Is
       Not Our Fault, We Think.
     * Test-case suggested by Alistair Bridgewater for possible related
       default-unknown-values problems on SunOS.
    nikodemus committed Mar 5, 2008
  2. move bignum allocation out of line on x86-64 from MOVE-FRO…

     * Essentially port of the work done for x86 earlier (
       Shrinks the core by about 500k.
     * Change the high-bits test on x86 to be clearer about what happens
       (no magic numbers.)
     * Fixups cannot be called directly on x86-64, so make the CALL
       instruction barf on that instead of silently generating bogus code.
    nikodemus committed Mar 5, 2008
Commits on Mar 3, 2008
  1. more mnemonic lambda-lists for RPLACD and RPLACA

     * CONS and X instead of X and Y. I admit, I use these so seldom that
       I have to check the docstring 9 times out of 10 as the lambda-list
       Slime used to show was of no help.
    nikodemus committed Mar 3, 2008
  2. better scaling in the PCL cache

     * When the cache reaches its maximum size, and entries need to be
       dropped, drop a random 50% of them, instead of the more
       deterministic set "ones that don't fit": this avoids getting stuck
       in a "add A dropping B, add B dropping A, ..." cycle which eats up
       ginormous amounts of time. Additionally, dropping 50% seems to be
       the best ratio -- experimentally, at least -- but it would be nice
       to have a proper analysis...
       Note: there is a point (possibly even before our current maximum
       cache size) where the allowed probe-depth grows so large that a
       tree would work better then a table. It would be good to gracefully
       replace the table based cache with a tree when it grows so large.
    nikodemus committed Mar 3, 2008
  3. one more slice of ASSOC micro-optimization

     * In %ASSOC and %ASSOC-EQ, test for equality before checking if the
       list element is NIL: in the common case only one element needs both
       tests, and even in the rare cases (looking for NIL, list contains
       several NILs) this is as fast as the old version. Common cases
       improved by ~30% by this.
       Now, finally, CL:ASSOC is as fast as
        (defun fast-assoc (item list)
          (loop for e in list
                when (eq item (car e))
                return e))
       when the type of ITEM is known to be (OR FIXNUM (NOT NUMBER)).
     * In others %ASSOC-* functions, test for existence of element only
       once (the compiler should eliminate the redundant test, though, but
       this is cleaner.)
    nikodemus committed Mar 3, 2008
  4. ASSOC and MEMBER were broken for :KEY #'IDENTITY

     * Regression caused by -- SET where is should have been SETF.
     * Add a few test-cases.
    nikodemus committed Mar 3, 2008
  5. further ASSOC & MEMBER transform improvements

     * Neither should be MAYBE-INLINE, as the DEFTRANSFORM result is better.
     * Compile the out-of-line bodies with high SPEED, and declare a missing
       LIST type.
     * Add %ASSOC-EQ, %ASSOC-KEY-EQ, and the corresponding %MEMBER-
       versions, and transform to these when (1) no :TEST is given, but
       the item to compare against is safe for EQ (2) :TEST is given and
       either 'EQ or #'EQ.
    nikodemus committed Mar 3, 2008
Commits on Mar 2, 2008
  1. fix non-threaded x86 build

     * Missing #!+sb-thread in src/assembly/x86/alloc.lisp.
    nikodemus committed Mar 2, 2008