…tallation * 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.
* Going in despite the freeze: earlier version depended on GNU tar, and broke install.sh on installations where tar was not GNU. * Patch by Eugene Ossintsev.
These were added in 1.0.14 (but never documented), and turn out to be impediments to some future progress on Windows.
* 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 generated.) * ALLOC-NUMBER-STACK-SPACE and ALLOC-ALIEN-STACK-SPACE were missing :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...)
* 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%.
* For potential future exporting from SB-SYS. * Thanks to Paul Khuong and the CMUCL team.
* Check the input string for wellformedness, and construct a specialized vector.
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! *** * Lock over *CLASSOID-CELLS* and *FORWARD-REFERENCED-LAYOUTS*. The 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!
* FIND-DEFINITION-SOURCE returns the source-location of the class for standard-objects, conditions, and structure objects. * Patch by Tobias C. Rittweiler.
* USER-HOMEDIR-PATHNAME invokes PARSE-NATICE-NAMESTRING in a tailcall 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.
* For symmetry with SOCKET-SEND.
* Thanks to Stanislaw Halik.
* 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...
* Both x86 and x86-64.
* 'twas a duplicate of ALLOCATION-TRAMP.
* x86-64 port of 220.127.116.11, 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.
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 platforms. Squashed commit of the following: commit 81776d9aab531db20711320ecea920453e058cef Author: Christophe Rhodes <firstname.lastname@example.org> Date: Fri Mar 7 04:54:03 2008 -0700 Fix lognot for fixnums on alpha. commit 27ce80579851bf9227d7d1121cf1554dc383049d Author: SBCL devs <email@example.com> 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 <firstname.lastname@example.org> Date: Fri Jan 11 17:38:19 2008 +0000 New modular arithmetic ported to mips. Tested by Thiemo Seufer. commit 50e2e51d25bb3d3997e4b884b7a15f7ba1992391 Author: Christophe Rhodes <email@example.com> 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 <firstname.lastname@example.org> 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 <email@example.com> 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 <firstname.lastname@example.org> 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 <email@example.com> 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 <firstname.lastname@example.org> 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 <email@example.com> 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 arithmetic. commit 32961ecb51bcfea655f985d1f774a8fc46bd155b Author: Christophe Rhodes <firstname.lastname@example.org> 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 <email@example.com> Date: Sun Dec 30 17:58:49 2007 +0000 Choice of modular version, initial commit Commit of approximately September vintage work, x86-only.
… 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.
…M-[UN]SIGNED * Essentially port of the work done for x86 earlier (18.104.22.168.) 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.
* 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.
* 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.
* 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.)
* Regression caused by 22.214.171.124 -- SET where is should have been SETF. * Add a few test-cases.
* 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.