mirror of
git://git.code.sf.net/p/sbcl/sbcl
synced 2026-09-10 07:26:40 -04:00
* Add a source transform for MAKE-ARRAY that declaims LIST and VECTOR
as NOTINLINE, so the the MAKE-ARRAY deftransforms are able to pick
them apart (for DIMENSIONS and :INITIAL-CONTENTS.)
* INITIALIZE-VECTOR is a new magic function with a IR2-CONVERT
transform. It's purpose is to allow open coding :INITIAL-CONTENTS
initialization without inhibiting stack allocation.
* Turns out that making stack allocation decisions during locall
analysis is not enough since optimization iterates: if a transform
occurs and introduces new LVARs that would be good for DX after
the locall analysis has run for the combination, the new LVARs
will not get their share of stacky goodness. Therefore, after
a transform propagate DX information to the new functional
explicitly (see MAYBE-PROPAGATE-DYNAMIC-EXTENT.)
* The new logic is in TRANSFORM-MAKE-ARRAY-VECTOR, which handles
all the cases of vector allocation with a known element type:
** :INITIAL-CONTENTS (LIST ...), (VECTOR ...) and (BACKQ-LIST ...)
are picked apart when the length matches the vector length,
and their arguments are spliced into the call.
Constant :INITIAL-CONTENTS is picked apart as well.
Initialization is done using INITIALIZE-VECTOR.
** Otherwise :INITIAL-CONTENTS is splatted in place using
REPLACE after we have checked that the length matches.
** :INITIAL-ELEMENT not EQL to the default element uses
FILL.
** Otherwise the default initialization is fine.
Some additional hair here, since MAYBE-PROPAGATE-DYNAMIC-EXTENT
cannot deal with OPTIONAL-DISPATCH functionals. So to ensure we get
full benefit of it, make sure the lambdas we transform to have only
required arguments -- courtesy of new ELIMINATE-KEYWORD-ARGUMENT
utility. (Note: it might be worth it to do something like this for
many cases automatically, to reduce the number of lambdas the
compiler generates. For inline lambdas we could do the whole &key
handling _before_ the lambda is converted...)
* Identify the case of (LIST N) as dimensions as being a vector,
and delegate to TRANSFORM-MAKE-ARRAY-VECTOR.
* More efficient allocation of simple multidimensional arrays in
the presence of :INITIAL-CONTENTS (still slow, though) and
:INITIAL-ELEMENT (not bad.)
* Fix the source transform for VECTOR so that it too can stack
allocate.
* Updates tests and docs.
|
||
|---|---|---|
| contrib | ||
| doc | ||
| src | ||
| tests | ||
| tools-for-build | ||
| .cvsignore | ||
| .gitignore | ||
| base-target-features.lisp-expr | ||
| binary-distribution.sh | ||
| BUGS | ||
| build-order.lisp-expr | ||
| clean.sh | ||
| common-lisp-exports.lisp-expr | ||
| COPYING | ||
| CREDITS | ||
| distclean.sh | ||
| find-gnumake.sh | ||
| html-distribution.sh | ||
| INSTALL | ||
| install.sh | ||
| make-config.sh | ||
| make-genesis-2.lisp | ||
| make-genesis-2.sh | ||
| make-host-1.lisp | ||
| make-host-1.sh | ||
| make-host-2.lisp | ||
| make-host-2.sh | ||
| make-target-1.sh | ||
| make-target-2-load.lisp | ||
| make-target-2.lisp | ||
| make-target-2.sh | ||
| make-target-contrib.sh | ||
| make-windows-installer.sh | ||
| make.sh | ||
| NEWS | ||
| OPTIMIZATIONS | ||
| package-data-list.lisp-expr | ||
| PRINCIPLES | ||
| pubring.pgp | ||
| README | ||
| run-sbcl.sh | ||
| sbcl-pwd.sh | ||
| slam.sh | ||
| source-distribution.sh | ||
| STYLE | ||
| SUPPORT | ||
| tagify.sh | ||
| TLA | ||
| TODO | ||
| version.lisp-expr | ||
| wc.sh | ||
GENERAL INFORMATION
Welcome to SBCL.
If you'd like to install or build the system, see the "INSTALL" file.
To find out more about who created the system, see the "CREDITS" file.
If you'd like information about the legalities of copying the system,
see the "COPYING" file.
If you'd like more information about using the system, see the man
page, "sbcl.1", or the user manual in the "doc/manual" subdirectory of
the distribution. (The user manual is maintained as Texinfo in the
source distribution; HTML version is available for download, and
"INSTALL" describes how to build the Texinfo version in HTML and PDF.)
The system is a work in progress. See the "TODO" file in the source
distribution for some highlights.
The "BUGS" file lists current known bugs.
If you'd like to make suggestions, report a bug, or help to improve the
system, please send mail to one of the mailing lists:
sbcl-help@lists.sourceforge.net
sbcl-devel@lists.sourceforge.net
Note that as a spam reduction measure you must subscribe to the lists
before you can post.
SYSTEM-SPECIFIC HINTS
for NetBSD:
NetBSD 2.0 and above are required because of the lack of needed
signal APIs in NetBSD 1.6 and earlier.
for OpenBSD:
OpenBSD 3.0 has stricter ulimit values, and/or enforces them more
strictly, than its predecessors. Therefore SBCL's initial mmap()
won't work unless you increase the limit on the data segment from
the OpenBSD defaults, e.g. with
ulimit -S -d 1000000
before you run SBCL. Otherwise SBCL fails with a message like
"ensure_space: failed to validate xxxxxxx bytes at yyyyy". (SBCL
is just allocating this huge address space, not actually using this
huge memory at this point. OpenBSD <3.0 had no problem with this,
but OpenBSD 3.0 is less hospitable.)