* (SPECIFIIER-TYPE 'FUNCTION) is not a FUN-TYPE. * 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.
* x86-64 only.
* A test introduced in 184.108.40.206 uses a lot of memory during compilation. Split the definition into multiple toplevel functions to avoid exhausting the heap.
* 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.
* 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) integers. * 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-+/-
* 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) package.
* Fix "optimization failure with anything using SB-IMPL::UCD-GENERAL-CATEGORY" reported by Lynn Quam (https://bugs.launchpad.net/sbcl/+bug/392206) 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.)
* 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.
…n safe code * Reported by Samium Gromoff.
* Reported by Lars Rune Nøstdal. * SB-PCL::DEFAULT-INITARGS doesn't have to be a generic function. * Test-case.
* Don't perform constant folding for addition/subtraction of 0 or multiplication/division/exponentiation by +/- 1 on float types. * Also operate on the imaginary part for generic addition and subtraction with mixed complex/real arguments, as specified. * Update NEWS for 10.29.44.
* Also define the non-designator types, and export the designator types. * Document both types and functions separately, moving the docs from manual into docstrings. * Extend FILENAME-DESIGNATOR for STREAMS for consistency with pathnames.
* 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.
* On all platforms: - Slightly more stable complex-complex float (double and single) division; - 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 complex-complex); - VOPs for EQL of floats (real and complexes). - Full register moves for float values in SSE registers should also speed scalar operations up.
* Most definitions have barely been tested. * Small disassembler bugfix for an SSE instruction format also included.
* EQL -1, not 1 -- no easily observable difference, but this one gets the branchless version actually used.
* 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.
* Branchless version, thanks to Paul Khuong. * Also optimize -1.0 and -1.0d0 cases. * Tests.
* 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.
... caused by 220.127.116.11. https://bugs.launchpad.net/bugs/391620
* Nuke PCOUNTER stuff, and replace it with a COUNTER local to profile.lisp: ** 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.
- remove unused count logic from SCRUB-CONTROL-STACK - fix SCRUB-CONTROL-STACK being uncareful about touching the guard page - 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
* Reported by Harald Hanche-Olsen.