Switch branches/tags
Commits on Jul 17, 2009
Commits on Jul 8, 2009
  1. fix load-time-value regressions

    * 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.
    nikodemus committed Jul 8, 2009
Commits on Jul 6, 2009
  1. Make float tests consume less memory

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

    * 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.
    nikodemus committed Jul 1, 2009
Commits on Jun 29, 2009
Commits on Jun 28, 2009
  1. Inline unboxed constants on x86[-64]

    * 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-+/-
    pkhuong committed Jun 28, 2009
  2. ...really this time...

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

    * 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)
    nikodemus committed Jun 28, 2009
  4. small UCD optimizations and related cleanups

    * 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.)
    nikodemus committed Jun 28, 2009
  5. correctly compute default initargs for FAST-MAKE-INSTANCE

    * 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.
    nikodemus committed Jun 28, 2009
Commits on Jun 27, 2009
  1. update ASDF

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

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

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

    * 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.
    pkhuong 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.
    nikodemus committed Jun 26, 2009
Commits on Jun 25, 2009
  1. another CTOR optimization

    * 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.
    nikodemus committed Jun 25, 2009
  2. Complex float improvements

    * 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.
    pkhuong committed Jun 25, 2009
  3. SSE{1,2} instruction definitions on x86-64

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

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

    * 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.
    nikodemus committed Jun 25, 2009
  6. more (EXPT MINUS-ONE INTEGER) optimization

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

    * 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
    nikodemus committed Jun 25, 2009
  8. better DESCRIBE

    * 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.
    nikodemus committed Jun 25, 2009
Commits on Jun 24, 2009
  1. another regression from

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

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

    * 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.
    nikodemus committed Jun 22, 2009
  2. SCRUB-CONTROL-STACK related changes

    - 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
    Gabor Melis committed Jun 22, 2009
  3. new contrib: SB-QUEUE

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

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

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

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

    * 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.
    nikodemus committed Jun 21, 2009