Commits on Jul 17, 2009
Commits on Jul 8, 2009
  1. fix load-time-value regressions

    nikodemus committed Jul 8, 2009
    * Don't allow constant moves from LTV TNs (better fix after release):
      this is the simple and obviously correct fix.
    * Also declaim the type of the correct function in the test-case from
      last commit.
Commits on Jul 6, 2009
  1. Make float tests consume less memory

    pkhuong committed Jul 6, 2009
    * A test introduced in uses a lot of memory during compilation. Split
      the definition into multiple toplevel functions to avoid exhausting the heap.
Commits on Jul 1, 2009
  1. two more CTOR optimization issues

    nikodemus committed Jul 1, 2009
    * Invalid calls of the form (MAKE-INSTANCE ''QUUX) or similar reported
      hard to understand errors instead of using the NO-APPLICABLE-METHOD
      machinery. (reported by Gabor Melis)
    * Runtime generation of new CTORs for the inline cache was not thread
      safe: grab *WORLD-LOCK* to ansure that (1) all CTORs end up in
      *ALL-CTORS* (2) we don't construct a CTOR with the same name twice.
      Also initialize the new CTOR with the initial constructor before
      setting its FDEFINITION: this is strictly speaking not needed given
      the lock, but more clearly correct. No test-case, as I was unable to
      actually provoke problem in real code.
Commits on Jun 29, 2009
Commits on Jun 28, 2009
  1. Inline unboxed constants on x86[-64]

    pkhuong committed Jun 28, 2009
    * New build-time feature: inline-constants, which specifies that SB!C
      and SB!VM implement a protocol described in base-target-features.lisp-expr.
      Backends implementing that feature are able to load constants from code
      components, in a section that follows the actual executable code.
    * Implement the protocol on x86 and x86-64, and use it for float constants,
      and, on x86-64 only, mid-sized (> 2^(29-32), but still machine-sized)
    * Use the new feature in integer and float arithmetic VOPs.
    * Adjust a few test cases to take newly consing situations into account.
    * Clean-up:
      - New build-time feature: float-eql-vops, which disable rewriting EQL
        of single and double floats in terms of foo-float*-bits.
      - Fix a typo (unused variable lookup) in TWO-ARG-+/-
  2. ...really this time...

    nikodemus committed Jun 28, 2009
     (Missed version.lisp-expr and tests/compiler-test-util.lisp)
  3. some LOAD-TIME-VALUE smartness

    nikodemus committed Jun 28, 2009
    * Implicit READ-ONLY-P for obviously immutable values.
    * Annotate the result with a derived type -- in practice
      the obvious declarared type of the function, if any.
    * In the test suite organize compiler tests a bit:
      ** compiler-test-util.lisp has some general-purpose
         tools for determining if the compiled code passes muster.
      ** Move some pure tests from compiler.impure.lisp to the pure
         file: they were in the impure file because they defined
         utils which are now in the COMPILER-TEST-UTIL (aka CUA)
  4. small UCD optimizations and related cleanups

    nikodemus committed Jun 28, 2009
    * Fix "optimization failure with anything using
      SB-IMPL::UCD-GENERAL-CATEGORY" reported by Lynn Quam
      ( and related
      performance issues.
      ** Declare returns types of UCD accessors where it seems to matter.
      ** Make the character database a global variable, not special.
    * Delete stale header comments from target-char.lisp: not just ASCII
      for quite a while now.
    * Delete references to fonts and bits from docstrings everywhere but
      in CHAR-INT and canonicalize docstring indentation.
    (The patch is a bit noisy because moving the definition of the
    character database inside the macrolet messed up a whole bunch of
    indentation -- sorry about that.)
  5. correctly compute default initargs for FAST-MAKE-INSTANCE

    nikodemus committed Jun 28, 2009
    * Ooops, can't use DEFAULT-INITARGS, since calling it executes the
      initforms. Define and use CTOR-DEFAULT-INITARGS.
    * A better test-case.
    * Reported by Leslie P. Polzer.
Commits on Jun 27, 2009
  1. update ASDF

    nikodemus committed Jun 27, 2009
    * Not from cclan anymore, but
  2. silence compiler note for type-checks from MAKE-INSTANCE i…

    nikodemus committed Jun 27, 2009
    …n safe code
    * Reported by Samium Gromoff.
Commits on Jun 26, 2009
  1. compute default initargs for SB-PCL::FAST-MAKE-INSTANCE

    nikodemus committed Jun 26, 2009
    * Reported by Lars Rune Nøstdal.
    * SB-PCL::DEFAULT-INITARGS doesn't have to be a generic function.
    * Test-case.
  2. Floating point correctness improvement

    pkhuong committed Jun 26, 2009
    * Don't perform constant folding for addition/subtraction of 0
      or multiplication/division/exponentiation by +/- 1 on float
    * Also operate on the imaginary part for generic addition and
      subtraction with mixed complex/real arguments, as specified.
    * Update NEWS for 10.29.44.

    nikodemus committed Jun 26, 2009
    * Also define the non-designator types, and export the designator
    * Document both types and functions separately, moving the docs from
      manual into docstrings.
    * Extend FILENAME-DESIGNATOR for STREAMS for consistency with pathnames.
Commits on Jun 25, 2009
  1. another CTOR optimization

    nikodemus committed Jun 25, 2009
    * If we're forced to use the fallback generator, but the initargs can be
      verified early on and there are no extra methods on MAKE-INSTANCE
      we don't have to go through full MAKE-INSTANCE: instead use
      FAST-MAKE-INSTANCE. 1 less GF call and no initarg checking at runtime
      yields a ~2-4 fold performance improvement.
  2. Complex float improvements

    pkhuong committed Jun 25, 2009
    * On all platforms:
     - Slightly more stable complex-complex float (double and single)
     - New transform for real-complex division;
     - complex-real and real-complex float addition and subtraction
       behave as though the real was first upgraded to a complex, thus
       losing the sign of any imaginary zero.
    * On x86-64
     - Complexes floats are represented packed in a single SSE register;
     - VOPs for all four arithmetic operations, complex-complex, but also
       complex-real and real-complex, except for complex-complex and
       real-complex division;
     - VOPs for =, negate and conjugate of complexes (complex-real and
     - VOPs for EQL of floats (real and complexes).
     - Full register moves for float values in SSE registers should also
       speed scalar operations up.
  3. SSE{1,2} instruction definitions on x86-64

    pkhuong committed Jun 25, 2009
    * Most definitions have barely been tested.
    * Small disassembler bugfix for an SSE instruction format also included.
  4. small fixoid for the EXPT optimization from

    nikodemus committed Jun 25, 2009
    * EQL -1, not 1 -- no easily observable difference, but this one gets
      the branchless version actually used.
  5. inline CTOR caches for MAKE-INSTANCE

    nikodemus committed Jun 25, 2009
    * If MAKE-INSTANCE has constant keywords but a variable first argument,
      build an inline cache of CTORs.
      ** Initially a sorted list, switching to a max 256 entry table if
         the list grows too large.
      ** Rename CTOR-NAME to CTOR-NAME-OR-CLASS, and allow building CTORs
         for class arguments as wel. Similarly, CTOR function names
         can contain class objects as well.
      ** Factor out RANDOMLY-PUNTING-LAMBDA from cache.lisp, since CTOR
         cache wants it too.
      ** STD-INSTANCE-P and FSC-INSTANCE-P become functions with compiler
         macros -- they are now used in compiler-support.lisp, which
         is built before low.lisp, so using macros is out.
    * Also enable the existing CTOR optimization for constant class objects
      as class arguments.
    * Tests.
  6. more (EXPT MINUS-ONE INTEGER) optimization

    nikodemus committed Jun 25, 2009
    * Branchless version, thanks to Paul Khuong.
    * Also optimize -1.0 and -1.0d0 cases.
    * Tests.
  7. SLEEP on large integers

    nikodemus committed Jun 25, 2009
    * Truncate arguments to nanosleep to SIGNED-WORD -- sleeping for 68
      years should be enough for anyone. (reported by Leslie Polzer, patch
      by Stas Boukarev)
    * Also fix a snafu from the last commit: GET-UNIVERSAL-TIME, not
  8. better DESCRIBE

    nikodemus committed Jun 25, 2009
    * Rework DESCRIBE for more comprehensive reporting and
      easier to read output.
    * Delete src/pcl/describe.lisp, no PCL leftovers in the new DESCRIBE
      except for some heritage in DESCRIBE-INSTANCE.
    * Fix COMPILED timestamps: we want both internal-real and universal
      time for different use-cases. (Though I'm not sure if we really care
      about the COMPILED timestamps that much, especially now that I
      unilaterally removed their printing from DESCRIBE.)
    * Give primitive type transform functions the lambda-list of the type.
Commits on Jun 24, 2009
  1. another regression from

    nikodemus committed Jun 24, 2009
    * Need to be able to load zero-length .lisp files -- but still
      disallow loading of empty fasls.
    * Reported by Martin Cracauer.
  2. regression from

    nikodemus committed Jun 24, 2009
    * If the runtime namestring is not available, don't try to parse it.
    * Reported by Josh Elsasser.
Commits on Jun 22, 2009
  1. hopefully thread-safe SB-PROFILE

    nikodemus committed Jun 22, 2009
    * Nuke PCOUNTER stuff, and replace it with a COUNTER local to
      ** New counter uses ATOMIC-INCF for atomicity, plus a lock and
         an overflow counter to handle counts over word in size.
      ** Stack allocate counters and counter value cells when possible
         to reduce overhead.
    * Nuke the FASTBIG-stuff. A generic arithmetic call with fixnum args
      is not that slow -- and if it turns out to be too slow after all,
      then the compiler should take care of this under appropriate policy
      instead of us using hacks like this.
    * Test case from Volkan Yazici.
  2. SCRUB-CONTROL-STACK related changes

    Gabor Melis
    Gabor Melis committed Jun 22, 2009
    - remove unused count logic from SCRUB-CONTROL-STACK
    - fix SCRUB-CONTROL-STACK being uncareful about touching the guard
    - threads stopped by gc do a quick scrubbing of the control stack to
      slightly lessen the probability of uninitialized stack locations
      pointing to live objects
  3. new contrib: SB-QUEUE

    nikodemus committed Jun 22, 2009
    * Lockless thread-safe FIFO queue.
  4. oops, get documentation for built-in macros right

    nikodemus committed Jun 22, 2009
    * Reported by Harald Hanche-Olsen.
Commits on Jun 21, 2009
  1. (one more)^3 DIRECTORY regression

    nikodemus committed Jun 21, 2009
    * Fix /*/foo: refactoring left lambdas where none were needed, so the
      iteration code was never run at all for non-leaf cases.
    * Test-cases...
  2. optimize (EXPT -1 INTEGER)

    nikodemus committed Jun 21, 2009
    * Patch by Stas Boukarev.
  3. add shebang line to fasls

    nikodemus committed Jun 21, 2009
    * Don't advertise yet, and don't make fasls executable out of the box
      -- since the SBCL version used to run the fasl has to be the same as
      compiled it this is clearly not good for distributing stuff in
      general, just for local convenience.