Thiemo Seufer [Sun, 2 Sep 2007 03:04:32 +0000 (03:04 +0000)]
1.0.9.26: Update comment about little-endian MIPS.
Thiemo Seufer [Sat, 1 Sep 2007 23:37:42 +0000 (23:37 +0000)]
1.0.9.25: Revert the /xhow -> /show change.
... as the original version was correct.
Thiemo Seufer [Sat, 1 Sep 2007 20:37:42 +0000 (20:37 +0000)]
1.0.9.24: Adjust assembly callers of WITH-FIXED-ALLOCATION.
Thiemo Seufer [Sat, 1 Sep 2007 19:39:04 +0000 (19:39 +0000)]
1.0.9.23: Delete conditional INST NOP optimization.
Using it is apparently too complicated for cold init.
Thiemo Seufer [Sat, 1 Sep 2007 18:11:11 +0000 (18:11 +0000)]
1.0.9.22: Dynamic-extent value-cells for MIPS.
Thiemo Seufer [Sat, 1 Sep 2007 18:09:20 +0000 (18:09 +0000)]
1.0.9.21: Make less eager use of eval-when unless cross-compiling.
Thiemo Seufer [Sat, 1 Sep 2007 18:06:17 +0000 (18:06 +0000)]
1.0.9.20: Add #+sb-doc conditionals.
Thiemo Seufer [Sat, 1 Sep 2007 14:24:14 +0000 (14:24 +0000)]
1.0.9.19: Less magic constants in the mips backend.
Thiemo Seufer [Sat, 1 Sep 2007 14:22:40 +0000 (14:22 +0000)]
1.0.9.18: Instrument COMPUTE-CALLING-FRAME for non-x86 with /noshow0.
Thiemo Seufer [Sat, 1 Sep 2007 14:02:27 +0000 (14:02 +0000)]
1.0.9.17: Delete deprecated DEF-ALIENs.
Thiemo Seufer [Sat, 1 Sep 2007 11:28:18 +0000 (11:28 +0000)]
1.0.9.16: Remove :mips from Bug #372.
This was a Linux/MIPS kernel bug, fixed in the latest version.
Thiemo Seufer [Sat, 1 Sep 2007 11:21:12 +0000 (11:21 +0000)]
1.0.9.15: Fix typo.
Thiemo Seufer [Sat, 1 Sep 2007 11:19:55 +0000 (11:19 +0000)]
1.0.9.14: Marginally improved VOPs, and a bit of code cleanup.
Nikodemus Siivola [Wed, 29 Aug 2007 19:38:26 +0000 (19:38 +0000)]
1.0.9.13: copy the WRAPPER-SLOT-TABLE in FORCE-CACHE-FLUSHES
* Otherwise the new wrapper will be missing the slot table,
potentially leading to bogus SLOT-MISSING calls.
No test case, as I was unable to cause bad behaviour with current
HEAD in the absence of this patch, but future changes depend on
this.
Nikodemus Siivola [Wed, 29 Aug 2007 17:14:45 +0000 (17:14 +0000)]
1.0.9.12: inform genesis about FOR-STD-CLASS-P slot in LAYOUT
* It was left uninitialized by genesis, resulting in bogus results
from LAYOUT-FOR-STD-CLASS-P.
* Poke at it in tests.
Nikodemus Siivola [Wed, 29 Aug 2007 16:02:35 +0000 (16:02 +0000)]
1.0.9.11: even faster SLOT-VALUE &co
* Move the SLOT-TABLE data to layout, so that it can be accessed
faster, giving ~40% more speed to SLOT-VALUE &co using variable slot
names. Speedup is due to one less level of indirection, and avoiding
a GF call when fetching the table.
* FIND-SLOT-DEFINITION goes back to using the linear search, as in
some cases where we use it the class wrapper may already be invalid.
This will be re-addressed later.
Nikodemus Siivola [Wed, 29 Aug 2007 15:26:32 +0000 (15:26 +0000)]
1.0.9.10: make tests clean up after themselves a bit better
* Delete various temporary files (still some left).
* Also add test/test-status.lisp-expr to .gitignore.
Nikodemus Siivola [Wed, 29 Aug 2007 15:23:01 +0000 (15:23 +0000)]
1.0.9.9: rename CLASS-SLOT-VECTOR to CLASS-SLOT-TABLE
* And the corresponding slot from SLOT-VECTOR
to SLOT-TABLE.
* Avoids confusion with instance slot vectors.
Nikodemus Siivola [Wed, 29 Aug 2007 15:13:32 +0000 (15:13 +0000)]
1.0.9.8: prettier DEFINE-MODIFY-MACRO arglist
* Use MAKE-SYMBOL instead of GENSYM for symbols that appear in the
final lambda-list.
Thanks to Tobias C. Rittweiler.
Nikodemus Siivola [Wed, 29 Aug 2007 14:58:46 +0000 (14:58 +0000)]
1.0.9.7: the MSI should not add .lisp and .fasl associations
* It could, but not without asking permission.
Nikodemus Siivola [Wed, 29 Aug 2007 14:51:55 +0000 (14:51 +0000)]
1.0.9.6: remove :UNIX from *FEATURES* on Windows
Thanks to Luis Oliveira.
Nikodemus Siivola [Mon, 27 Aug 2007 15:47:55 +0000 (15:47 +0000)]
keep docstrings from PCL bootstrap around
* Keep documentation strings from early generics and methods.
Nikodemus Siivola [Mon, 27 Aug 2007 15:33:04 +0000 (15:33 +0000)]
added .gdb_history to .gitignore
Nikodemus Siivola [Mon, 27 Aug 2007 15:31:36 +0000 (15:31 +0000)]
micro-optimize SKIP-FAST-SLOT-ACCESS-P
* It's the only caller of SKIP-OPTIMIZE-SLOT-SLOT-VALUE-BY-CLASS-P, so
inline the latter's body and remove the duplicate *BOOT-STATE* check
and FIND-SLOT-DEFINITION call. Add FIXME due to apparent strangeness
re existense of the slot definition.
Nikodemus Siivola [Mon, 27 Aug 2007 15:13:27 +0000 (15:13 +0000)]
faster SLOT-VALUE &co with variable slot names
* Cache the slot-location and typecheckfun in the class-slots-vector
in addition to the slot-definition for STANDARD-CLASS and
FUNCALLABLE-STANDARD-CLASS.
* New function CHECK-OBSOLETE-INSTANCE/CLASS-OF, which combines the
two. Faster then calling both separately, since both need to grab
the wrapper -- used by SLOT-VALUE &co.
* Unoptimized SLOT-VALUE, (SETF SLOT-VALUE), SLOT-BOUNDP, and
SLOT-MAKUNBOUND can now directly access instance and class slots the
typecheckfun in normal cases, giving upto 20-25% performance boost
for these functions.
* Obsolete-instance protocol tests using variable slot-names.
Nikodemus Siivola [Mon, 27 Aug 2007 14:44:21 +0000 (14:44 +0000)]
1.0.9.1: faster MAKE-MEMBER-TYPE, UNION, and NUNION
* MAKE-MEMBER-TYPE was doing several SUBSETP calls,
instead just walk once over the list of members.
* UNION and NUNION were using an O(N^2) implementation
for all input sizes. Use a hashtable (giving O(N))
for large inputs when :TEST is something we can
use with a hash-table.
Thanks to Damien Diederen for catching a typo in the new UNION /
NUNION code.
William Harold Newman [Mon, 27 Aug 2007 00:10:15 +0000 (00:10 +0000)]
1.0.9: release, will be tagged as sbcl_1_0_9
Thiemo Seufer [Sun, 26 Aug 2007 20:53:34 +0000 (20:53 +0000)]
1.0.8.48: Update comment.
Thiemo Seufer [Sun, 26 Aug 2007 20:32:09 +0000 (20:32 +0000)]
1.0.8.47: Declare alien input parameters as such.
Rudi Schlatte [Tue, 21 Aug 2007 09:56:21 +0000 (09:56 +0000)]
1.0.8.46: attempt to answer the "executables" FAQ in the manual
* The information was there, but hidden in the second part of a
somewhat-related paragraph in a generic section.
* Including "Executables" in the first page of the table of contents
should make the function easier to find, one hopes...
Juho Snellman [Tue, 21 Aug 2007 06:15:07 +0000 (06:15 +0000)]
1.0.8.45: Fix sb-sprof on non-x86oids
* Patch by Pierre Mai
Juho Snellman [Tue, 21 Aug 2007 05:18:42 +0000 (05:18 +0000)]
1.0.8.44: Fix EQUALP on structures with raw slots
* Old version was basically accessing raw slots with %INSTANCE-REF,
and doing EQUALP on the results. This was most obviously wrong
for raw slots that were larger than a word (double-floats on 32-bit
platforms). Less obviously this is also wrong for some float
corner-cases, like negative zeroes.
* Add RAW-INSTANCE-SLOTS-EQUALP which instead grovels the layout for
the slot definitions and determines the proper accessor functions
for each slot from that.
* Reported by Vjacheslav Fyodorov.
Juho Snellman [Tue, 21 Aug 2007 05:12:33 +0000 (05:12 +0000)]
1.0.8.43: Fix GCD on most-negative-fixnum on x86-64
* Bogus type declarations.
* Reported by Gregory Vanuxem on sbcl-devel.
Juho Snellman [Mon, 20 Aug 2007 17:12:49 +0000 (17:12 +0000)]
1.0.8.42: Fix some source-location bugs, alternate sb-cover annotation mode
* Bug introduced in the code coverage commit caused sldb-show-source
to highlight the wrong forms in many cases.
* Changes in 1.0.6.23 caused branch forms to be not annotated as
such in sb-cover.
* Add a new annotation mode to sb-cover, which basically uses
the source location information of the car of the form instead
of using the information for the form itself. This mode shows
explicitly which forms have been instrumented. According to
a #lisp poll, the old version looks nicer, so it's been retained
as the default.
Rudi Schlatte [Mon, 20 Aug 2007 09:14:46 +0000 (09:14 +0000)]
1.0.8.41: doc spelling fixes.
Thiemo Seufer [Mon, 20 Aug 2007 07:08:09 +0000 (07:08 +0000)]
1.0.8.40: Acrually use reset-signal-mask only for Linux/MIPS.
Thiemo Seufer [Mon, 20 Aug 2007 00:04:20 +0000 (00:04 +0000)]
1.0.8.39: Mark remaining MIPS test failures as known.
Thiemo Seufer [Sun, 19 Aug 2007 23:59:46 +0000 (23:59 +0000)]
1.0.8.38: Add missing quote sign.
Thiemo Seufer [Sun, 19 Aug 2007 23:57:09 +0000 (23:57 +0000)]
1.0.8.37: Workaround (or bugfix?) for blocked SIGTRAP on SBCL/MIPS.
Thiemo Seufer [Sun, 19 Aug 2007 23:46:04 +0000 (23:46 +0000)]
1.0.8.36: Improve MIPS (and HPPA) floating pooint support.
- For MIPS/HPPA, the NaN signalling bit's meaning is inverted.
- Implement FLOATING-POINT-MODES and SET-FLOATING-POINT-MODES in C.
- Delete the corresponding VOPs.
- Document the MIPS special "unimplemented" floating point trap.
- Add handling of the floating point control word in C signal handlers.
- Mark NAN-COMPARISIONS as expected failure on MIPS. (It still doesn't
work due to a kernel bug, siginfo_t's si_code field doesn't get
updated properly.)
Thiemo Seufer [Sun, 19 Aug 2007 23:34:37 +0000 (23:34 +0000)]
1.0.8.35: Fix MIPS foreign_function_call_active handling.
Thiemo Seufer [Sun, 19 Aug 2007 23:31:36 +0000 (23:31 +0000)]
1.0.8.34: Fix MIPS spinlock implementation.
Nikodemus Siivola [Sat, 18 Aug 2007 15:13:53 +0000 (15:13 +0000)]
1.0.8.33: sample sbcl-export alias in Git for SBCL Hackers
* Forgot to save the file, so missed from the last commit...
Nikodemus Siivola [Sat, 18 Aug 2007 12:05:08 +0000 (12:05 +0000)]
1.0.8.32: improved Git for SBCL Hackers in a few places
* Grammar and typos.
* Remove references to version.lisp-expr now that we have
branch-version.lisp-expr.
* Better explanation of history cleaning (mostly for the benefit of
non-committer hackers, shades of "How to Contribute".
* Alias for easy git-cvsexportcommit usage.
* Mention git-format-patch.
* Add link to Git User Manual.
Nikodemus Siivola [Sat, 18 Aug 2007 04:08:54 +0000 (04:08 +0000)]
1.0.8.31: add missing Git for SBCL Hackers guide
* Accidentally left out from 1.0.8.15.
Nikodemus Siivola [Sat, 18 Aug 2007 04:07:13 +0000 (04:07 +0000)]
1.0.8.30: better standard-instance accessors
* Add SETF functions for STANDARD-INSTANCE-ACCESS and
FUNCALLABLE-STANDARD-INSTANCE-ACCESS.
* Declare them and the readers inline.
Thanks to Attila Lendvai.
Nikodemus Siivola [Sat, 18 Aug 2007 04:02:15 +0000 (04:02 +0000)]
1.0.8.29: better printing of anonymous objects
* In PCL, the NAMED-OBJECT-PRINT-FUNCTION prints the identity of the
object when it has no name. Among other things, it affects the
printing of anonymous classes.
Thanks to Attila Lendvai.
Nikodemus Siivola [Sat, 18 Aug 2007 03:50:49 +0000 (03:50 +0000)]
1.0.8.28: split REAL-MAKE-METHOD-LAMBDA back into two parts
* Turns out my earlier merging of REAL-MAKE-METHOD-LAMBDA
and MAKE-METHOD-LAMBDA-INTERNAL was ill adviced: the split
is good to have so that redefining the latter in the
final image actually changes the behaviour of the system.
* Add an explanatory comment.
William Harold Newman [Tue, 14 Aug 2007 19:52:21 +0000 (19:52 +0000)]
1.0.8.27: Improve error handling for (DESTRUCTURING-BIND (...) 'NOTLIST ...).
Thiemo Seufer [Tue, 14 Aug 2007 15:53:26 +0000 (15:53 +0000)]
1.0.8.26: More MIPS singlestepper fixes.
Nikodemus Siivola [Mon, 13 Aug 2007 13:55:15 +0000 (13:55 +0000)]
1.0.8.25: refactor CAN-OPTIMIZE-ACCESS usage and interface
* Make the constant slot-name and the possible new-value-form
additional return values.
* Use CONSTANT-FORM-VALUE instead of EVAL to get the constant
slot-name. Also use the environment correctly to CONSTANTP
and CONSTANT-FORM-VALUE.
* Call CAN-OPTIMIZE-ACCESS in the various instance-access optimizers
and not around calls to them, so that they can directly use the
slot-name and new-value-form results from CAN-OPTIMIZE-ACCESS
instead of having to recompute them.
Nikodemus Siivola [Mon, 13 Aug 2007 13:41:49 +0000 (13:41 +0000)]
1.0.8.24: factor (THE TYPE FORM) => FORM transformations into a function
* EXTRACT-THE, for now only used in PCL.
Nikodemus Siivola [Mon, 13 Aug 2007 13:40:40 +0000 (13:40 +0000)]
1.0.8.23: merge CAN-OPTIMIZE-ACCESS and CAN-OPTIMIZE-ACCESS1
* First is the only caller of the first, so just move
the body to the call site.
Nikodemus Siivola [Mon, 13 Aug 2007 13:36:37 +0000 (13:36 +0000)]
1.0.8.22: merge MAKE-METHOD-FUNCTION and MAKE-METHOD-FUNCTION-INTERNAL
* First was the only caller of the latter -- just move the
body to the call site.
Nikodemus Siivola [Mon, 13 Aug 2007 13:34:49 +0000 (13:34 +0000)]
1.0.8.21: merge REAL-MAKE-METHOD-LAMBDA and MAKE-METHOD-LAMBDA-INTERNAL
* The first was the only caller of the latter, so just make the
body of the latter the body of the first.
Nikodemus Siivola [Mon, 13 Aug 2007 13:33:13 +0000 (13:33 +0000)]
1.0.8.20: replace PVREF by SVREF
* PVREF was a trivial wrapper macro around SVREF, and used in only
src/pcl/vector.lisp. This is easier to read for me at least.
Nikodemus Siivola [Thu, 9 Aug 2007 16:52:03 +0000 (16:52 +0000)]
1.0.8.19: :dont-safe finalizers and fd-stream thread safety issues
* Add :DONT-SAVE keyword argument to FINALIZE, which causes the finalizer
to be removed when core is saved: it is not amusing to have a finalizer
that deallocates system memory to fire in a fresh image which happens
to have freshly allocated memory in the same address. Also good for finalizers
closing FDs.
Use where appropiate.
* Stream buffing should not use (INCF (BUFFER-FOO BUFFER) N), since if another
thread has written to the buffer since we last looked at it this might take
eg. the TAIL index beyond the end of the allocated memory area: by doing
(let ((foo (buffer-foo buffer))) ... (setf (buffer-foo buffer) (+ foo n)) we might
overwrite the data from another thread, but at least we won't trash memory.
* Small graces: check that ALLOCATE-SYSTEM-MEMORY actually succeeds, don't accept
finalizers for NIL (they would just run immediately on next GC, which is almost
certainly not intended), take an extra mile to ensure old buffers from before
SAVE-LISP-AND-DIE don't survive to the new image.
Juho Snellman [Tue, 7 Aug 2007 06:15:13 +0000 (06:15 +0000)]
1.0.8.18: Fix gc-safety bug in x86oid function calls
* Off by one error in conservative stack scavenging, the top of the
stack wasn't pinned.
* In the new calling convention there is a small window during which
the return address only exists on the top of the stack. If a gc
was triggered during that window, the code object could move, and
the return address would point to freed memory.
Nikodemus Siivola [Mon, 6 Aug 2007 11:52:16 +0000 (11:52 +0000)]
1.0.8.16: really increment the fasl version
(file left out from previous commit)
Nikodemus Siivola [Mon, 6 Aug 2007 11:50:46 +0000 (11:50 +0000)]
1.0.8.16: refactored fd-stream buffering
Thanks to David Smith and Andreas Bogkt who diagnosed the memory
leaks this patch fixes.
* Instead of having FD-STREAM objects directly hold onto input and
output buffer SAPs and head/tail indexes, use BUFFER objects which
contain the SAP, size of the memory area, head/tail indexes, and
are have finalizers to deallocate the system memory assosicated
with the SAP. (This fixes system memory leaks when streams are not
properly closed.)
* Make CLOSE :ABORT release the output queue associated with the
stream. (This was another memory leak in the old system: now
the finalizers make not doing this safe, but it's still better
to recycle the buffers.)
* Slightly reduce lock contention by grabbing the *AVAILABLE-BUFFERS*
lock only if there is something there right before the lock is
taken, and by doing allocation outside the lock.
* Rename and refactor FROB-OUTPUT and friends:
BUFFER-OUTPUT is the main interface function, which always
adds new output to the current buffer / output queue.
WRITE-OR-BUFFER-OUTPUT tries to write immediately, falling
back to buffering if writing is not possible.
WRITE-OUTPUT-FROM-QUEUE is called by the SERVE-EVENT
system to deal with output queue.
FLUSH-OUTPUT-BUFFER writes the current buffer out if possible,
queues it otherwise. Ensures that the output buffer of
the stream is empty on return (and returns that buffer).
* Deprecate SB-SYS:OUTPUT-RAW-BYTES. There doesn't seem to be any
real reason to export this kind of stuff.
* Increment the fasl version.
Nikodemus Siivola [Sat, 4 Aug 2007 14:49:32 +0000 (14:49 +0000)]
1.0.8.15: making SBCL sources Git more friendly
* Git for SBCL Hackers guide.
* If branch-version.lisp-expr exists, it's value is concatenated
after the contents of version.lisp-expr, separated out by ".".
Doing this allows reduces spurious conflicts on branches: otherwise
a branch announcing it's name in version.lisp-expr is going to
conflict at every turn, which prevents automatic rebasing and
merging from doing TRT.
* Added .gitignore
Thiemo Seufer [Fri, 3 Aug 2007 22:58:24 +0000 (22:58 +0000)]
1.0.8.14: De-clutter C code.
Thiemo Seufer [Fri, 3 Aug 2007 22:56:07 +0000 (22:56 +0000)]
1.0.8.13: .cvsignore test output.
NIIMI Satoshi [Tue, 31 Jul 2007 03:10:46 +0000 (03:10 +0000)]
1.0.8.12: Fix tests/foreign.test.sh on FreeBSD7/amd64
Thiemo Seufer [Sun, 29 Jul 2007 19:32:10 +0000 (19:32 +0000)]
1.0.8.11: Fix typo in comment.
Thiemo Seufer [Sat, 28 Jul 2007 18:42:00 +0000 (18:42 +0000)]
1.0.8.10: Untabify.
Thiemo Seufer [Sat, 28 Jul 2007 12:53:00 +0000 (12:53 +0000)]
1.0.8.9: fix a potential segfault, and make a lisp pointercheck less obscure.
Nikodemus Siivola [Fri, 27 Jul 2007 12:09:10 +0000 (12:09 +0000)]
1.0.8.8: restore reuse-sap value after incomplete writes in FROB-OUTPUT-LATER
* Unless we do this, we leak each reusable sap that happens to hit this
code path.
* Thanks to David Smith.
Nikodemus Siivola [Fri, 27 Jul 2007 11:13:22 +0000 (11:13 +0000)]
1.0.8.7: printer-control variables affecting MEMBER & ASSOC transforms
Reported by Dan Corkill on sbcl-devel.
* Use WRITE-STRING on SYMBOL-NAME instead of FORMAT %A to ironclad
the specialized function name generation.
* Tests.
Thiemo Seufer [Fri, 27 Jul 2007 01:58:06 +0000 (01:58 +0000)]
1.0.8.6: Fix typo in comment.
Thiemo Seufer [Wed, 25 Jul 2007 22:21:46 +0000 (22:21 +0000)]
1.0.8.5: Conform to strict aliasing rules.
Thiemo Seufer [Wed, 25 Jul 2007 22:08:03 +0000 (22:08 +0000)]
1.0.8.4: One compiler warning less...
Thiemo Seufer [Wed, 25 Jul 2007 22:05:26 +0000 (22:05 +0000)]
1.0.8.3: Include missing headers.
Thiemo Seufer [Wed, 25 Jul 2007 21:46:39 +0000 (21:46 +0000)]
1.0.8.2: Silence compiler warning.
Thiemo Seufer [Wed, 25 Jul 2007 21:37:31 +0000 (21:37 +0000)]
1.0.8.1: Nicer C code
- More consistent formatting.
- Spelling fixes.
- Declare empty parameter lists as void.
William Harold Newman [Wed, 25 Jul 2007 13:39:33 +0000 (13:39 +0000)]
1.0.8: release, will be tagged as sbcl_1_0_8
Thiemo Seufer [Mon, 23 Jul 2007 20:29:55 +0000 (20:29 +0000)]
1.0.7.39: Fix typo in comment.
Thiemo Seufer [Mon, 23 Jul 2007 20:26:38 +0000 (20:26 +0000)]
1.0.7.38: Fix the MIPS single-stepper break instruction.
Nikodemus Siivola [Sat, 21 Jul 2007 13:33:53 +0000 (13:33 +0000)]
1.0.7.37: fix non-x86oid builds
* WITH-PINNED-OBJECTS needs to be a DEF!MACRO, not DEFMACRO. No SB!SYS prefix
needed, as SB-VM uses SB-SYS.
(Tested on only PPC/Darwin.)
Nikodemus Siivola [Sat, 21 Jul 2007 01:55:42 +0000 (01:55 +0000)]
1.0.7.36: FIND-SLOT-DEFINITION to return NIL when called with non-slot-classes
* Add a default method to CLASS-SLOT-VECTOR that returns #(NIL), restoring
the pre-1.0.7.26 behaviour of calling SLOT-MISSING when trying to access
slots in non-SLOT-CLASS instances.
* Add a slightly dubious test-case.
Nikodemus Siivola [Sat, 21 Jul 2007 00:05:15 +0000 (00:05 +0000)]
1.0.7.35: SLOT-VALUE and SET-SLOT-VALUE transforms aren't important
* No compiler notes for default policy.
* Test case.
Nikodemus Siivola [Fri, 20 Jul 2007 23:43:21 +0000 (23:43 +0000)]
1.0.7.34: adjust lexenv frobbing in TRANSFORM-CALL to happen earlier
* Need to replace the call lexenv with the frobbed one before
WITH-IR1-ENVIRONMENT-FROM-NODE so that IR1-CONVERT-INLINE-LAMBDA
gets a consistent *LEXENV* binding.
(This has been around since 0.9.17.5, but since it only affects
known functions with optional arguments and transformations it
suddenly become a lot more easy to hit with the new MEMBER and
ASSOC transforms.)
* Test case.
Nikodemus Siivola [Thu, 19 Jul 2007 18:49:44 +0000 (18:49 +0000)]
1.0.7.33: better handling of ASSOC and MEMBER on empty lists
* If the second argument is a constant NIL, remove the whole
call in the transform and just return NIL.
Nikodemus Siivola [Thu, 19 Jul 2007 14:16:40 +0000 (14:16 +0000)]
1.0.7.31: updated TODO file
Let the controversy begin.
No code changes.
Nikodemus Siivola [Thu, 19 Jul 2007 13:44:58 +0000 (13:44 +0000)]
1.0.7.31: paper over bug inlining known functions in high-debug code
NOT A PROPER FIX!
* Don't inline known functions unless let-conversion is enabled, which papers
over the real bug -- apparently due to BIND/UNBIND-SENTINEL vop insertion.
Nikodemus Siivola [Thu, 19 Jul 2007 12:58:59 +0000 (12:58 +0000)]
1.0.7.30: be more paranoid about saps
* Since compiler transformations can introduce closures and hence
cause "this is obviously always on stack or in register" intuition
to be wrong, be more vigilant about pinning objects before
sap-taking.
* Also convert a couple of WITHOUT-GCINGs to WITH-PINNED-OBJECTS
instead.
Nikodemus Siivola [Thu, 19 Jul 2007 10:28:14 +0000 (10:28 +0000)]
1.0.7.29: better ASSOC transform
* Extend the new MEMBER optimizations to handle ASSOC as well, and define
the corresponding %ASSOC[-KEY][-TEST][-NOT] functions as well.
* Clean up the old ASSOC -> ASSQ and MEMBER -> MEMQ transforms that
aren't firing anymore.
* Tests.
Nikodemus Siivola [Tue, 17 Jul 2007 22:26:30 +0000 (22:26 +0000)]
1.0.7.28: compiler being nicer to the compiler
* In MAKE-XEP-LAMBDA-EXPRESSION, use EQL instead of = and NOT <
instead of >= to avoid additional rounds of deftransforms and
lambda-conversion.
* Add a source transform for %COERCE-CALLABLE-TO-FUN to pick of
simple cases, also avoid inserting additional lambdas to the code.
* Use %FUNCALL and %COERCE-CALLABLE-TO-FUN in MAPFOO-TRANSFORM,
providing not just faster compilation, but also making (MAPCAR F
...) faster by lifting the %C-C-T-F out of the loop.
This work was based on Juho's observation that a major source of
compiler slowness are all the lambdas generated by transforms: not
that this changes the big picture in any way -- just shaves a few
corners. If you wish to get a gut feeling of what is going on, stick
a (PRINT (LIST DEBUG-NAME BODY)) in IR1-CONVERT-INLINE-LAMBDA.
Nikodemus Siivola [Tue, 17 Jul 2007 20:50:15 +0000 (20:50 +0000)]
1.0.7.27: SLOT-CLASS cleanups
* No need for two separate implementations of FIND-SLOT-DEFINITION -- just
move the one we care about to slots-boot.lisp along with MAKE-SLOT-VECTOR
(which it is intimately tied up with.) Add comments for posterity.
* There should be no (SETF CLASS-SLOTS) or (SETF CLASS-DIRECT-SLOTS), so
:READER, not :ACCESSOR in SLOT-CLASS.
Nikodemus Siivola [Tue, 17 Jul 2007 18:36:33 +0000 (18:36 +0000)]
1.0.7.26: asymptotically faster FIND-SLOT-DEFINITION
* Add a SLOT-VECTOR slot the SLOT-CLASS. The SLOT-VECTOR contains
plists of slot definition objects hashed on the slot name, allowing
O(1) lookups based on the slot name, instead of the old O(N)
lookups -- where N is the number of slots in a class.
Makes everything requiring slot definition lookups faster, simple
tests showing SLOT-VALUE with variable name on a 5-slot class to be
roughly 50% faster.
Nikodemus Siivola [Tue, 17 Jul 2007 13:18:06 +0000 (13:18 +0000)]
1.0.7.25: better MEMBER transform
* Specialized versions for different keyword combinations: %MEMBER,
%MEMBER-TEST, %MEMBER-KEY-TEST, etc. These versions have positional
arguments, and the callable arguments are known to be functions.
* The transform open codes for all combinations of keywords if the
second argument is constant and (>= SPEED SPACE). Otherwise the
transform selects the appropriate specialized version and open
codes %COERCE-CALLABLE-TO-FUN around keyword arguments, allowing
type inference to optimize it away for arguments known to be
functions.
* Tests.
Christophe Rhodes [Tue, 17 Jul 2007 11:24:26 +0000 (11:24 +0000)]
1.0.7.24: Fix CALL-NEXT-METHOD / EVAL-WHEN interaction
Reported by Sascha Wilde sbcl-devel 2007-07-15. This fix is not
the one that I sent to sbcl-devel 2007-07-16, because that's
just too horrible; instead we expand DEFMETHOD into separate
:LOAD-TOPLEVEL and :EXECUTE branches. (This needs a minor test
adjustment)
Nikodemus Siivola [Tue, 17 Jul 2007 10:13:38 +0000 (10:13 +0000)]
1.0.7.23: delete a large block of commented-out code from seqtran.lisp
* This is why we have version control. (But add a comment pointing out
that this code exists, so that people know where to look for it.)
The code that is deleted here contains the apparent beginnings of a
better sequence transform infrastructure: a compiler representation
of an iteration over a sequence.
Nikodemus Siivola [Mon, 16 Jul 2007 16:52:52 +0000 (16:52 +0000)]
1.0.7.22: (SETF SYMBOL-PLIST) type checking
* Disallow non-lists as the new value.
Nikodemus Siivola [Mon, 16 Jul 2007 16:12:18 +0000 (16:12 +0000)]
1.0.7.21: threaded SET & BIND VOP touchups
* In SET: don't check versus TLS-INDEX == 0: TLS-INDEX 0 already
gives the NO-TLS-VALUE-MARKER. Smaller code, and common case seems
to be assignment to a bound variable.
* In BIND: use one register less, splitting the duties of the old
TEMP between TLS-INDEX and EAX/RAX. Increment the *FREE-TLS-INDEX*
directly in memory.
Nikodemus Siivola [Mon, 16 Jul 2007 11:07:37 +0000 (11:07 +0000)]
1.0.7.20: note for SBCL packagers
See doc/PACKAGING-SBCL.txt.
Nikodemus Siivola [Sun, 15 Jul 2007 22:28:12 +0000 (22:28 +0000)]
1.0.7.19: SB-EXT:COMPARE-AND-SWAP
* New macro SB-EXT:COMPARE-AND-SWAP provides a supported interface to
compare-and-swap functionality.
* New info-type :FUNCTION :STRUCTURE-ACCESSOR allows us to map from
defstruct slot-accessor names to defstruct descriptions.
* Add :CAS-TRANS slot keyword to DEFINE-PRIMITIVE object, and the
compiler machinery needed to support compare and swap on primitive
object slots.
* New VOPs COMPARE-AND-SWAP-SLOT and %COMPARE-AND-SWAP-SYMBOL-VALUE.
* Delete now unnecessary DEFINE-STRUCTURE-SLOT-COMPARE-AND-SWAP.
* Use a consistent %COMPARE-AND-SWAP-FOO naming scheme for CAS
functions.
* Tests.
Tested on x86/Linux & x86/Darwin, x86-64/Darwi, and PPC/Darwin.
Nikodemus Siivola [Fri, 13 Jul 2007 18:57:23 +0000 (18:57 +0000)]
1.0.7.18: automagic debugging-friendly gensyms
* New function: SB-INT:BLOCK-GENSYM, which appends the innermost
enclosing non-NIL block name to the given stem. The default
environment used is the current *LEXENV* if one exists.
* Use it instead of GENSYM in MAKE-GENSYM-LIST and WITH-UNIQUE-NAMES.
Nikodemus Siivola [Thu, 12 Jul 2007 23:05:17 +0000 (23:05 +0000)]
1.0.7.17: SLOT-VALUE and SET-SLOT-VALUE transforms (really 1.0.7.16)
This is the real commit message that was supposed to go in 1.0.7.16.
Sorry.
* Define SLOT-VALUE and SET-SLOT-VALUE as known functions.
* Use &ENVIRONMENT in CONSTANTP and CONSTANT-FORM-VALUE calls in
their compiler-macros.
* Add transforms for SLOT-VALUE and SET-SLOT-VALUE in addition to the
compiler-macros. The transforms are functionally equivalent to the
compiler-macros, but catch more cases: eg.
(define-modify-macro appendf (&rest lists) append)
(appendf (slot-value x 'y) z)
needs the deftransforms as setf-expansion replaces the constant
argument with a gensym.
Keep the compiler-macros around, since they catch the common cases
early and don't mess up the build: the transforms are agressive
enough that we can't enable them until the PCL boot-state is
complete. (The compiler-macros are also slightly cheaper, since
each transform introduces a new lambda.)
Nikodemus Siivola [Thu, 12 Jul 2007 17:28:40 +0000 (17:28 +0000)]
1.0.7.14: thread-safe INTERN, EXPORT, &co
* Modifications to packages grab a global lock. INTERN is the only
real potential performance bottleneck here, but as long as the
symbol already exists it doesn't need to get the lock.
We need a global lock instead of a per-package lock because eg.
(EXPORT 'FOO::BAR :FOO) and (INTERN "BAR" :ZOT) can conflict, even
though they operate on different packages.
Since races should be rare we use a spinlock to avoid making a
system call for every release.
Interrupt safety? Probably no. It's likely that you can wedge the
package system into a bad state if you really try.