sbcl.git
15 years ago1.0.29.13: relax CAST-EXTERNALLY-CHECKABLE-P a bit
Nikodemus Siivola [Wed, 17 Jun 2009 20:03:35 +0000 (20:03 +0000)]
1.0.29.13: relax CAST-EXTERNALLY-CHECKABLE-P a bit

* Allows (lambda (x y) (string= x y)) to be compiled without inserting
  type-checks that will be done by STRING=* into the lambda.

15 years ago1.0.29.12: nicer DX capability conditionalization
Nikodemus Siivola [Wed, 17 Jun 2009 16:40:34 +0000 (16:40 +0000)]
1.0.29.12: nicer DX capability conditionalization

 * New *FEATURES*: :STACK-ALLOCATABLE-LISTS, :STACK-ALLOCATABLE-VECTORS, and
   :STACK-ALLOCATABLE-FIXED-OBJECTS filled in by make-config.sh.

 * Use them instead of #!+(or arch1 arch2 ...).

15 years ago1.0.29.11: one more one more DIRECTORY regressions
Nikodemus Siivola [Tue, 16 Jun 2009 09:41:54 +0000 (09:41 +0000)]
1.0.29.11: one more one more DIRECTORY regressions

* (DIRECTORY "X*") should not match directories with dotted names.

* Get rid of the KLUDGE to make up a directory component from pathname
  name and type, which was a source of inconsistencies between
  handling files and directories. Instead make MAP-DIRECTORY
  :DIRECTORIES :AS-FILES map over directory entries with
  filename-style pathnames, which allows us to share the matching
  logic between the two nicely.

15 years ago1.0.29.10: one more DIRECTORY regression
Nikodemus Siivola [Mon, 15 Jun 2009 22:13:08 +0000 (22:13 +0000)]
1.0.29.10: one more DIRECTORY regression

 * (DIRECTORY "X*.*") should match directories in addition to files.

15 years ago1.0.29.9: prettier style-warnings for incompatible FTYPE proclamations
Nikodemus Siivola [Mon, 15 Jun 2009 12:03:10 +0000 (12:03 +0000)]
1.0.29.9: prettier style-warnings for incompatible FTYPE proclamations

 * Unparse the types and indent nicely.

15 years ago1.0.29.8: :PTY and stream arguments in RUN-PROGRAM
Nikodemus Siivola [Mon, 15 Jun 2009 11:05:41 +0000 (11:05 +0000)]
1.0.29.8: :PTY and stream arguments in RUN-PROGRAM

 * Reported by Elliot Slaughter, patch by Stas Boukarev.

15 years ago1.0.29.6: regression in DIRECTORY when matching directory patterns
Nikodemus Siivola [Mon, 15 Jun 2009 10:03:54 +0000 (10:03 +0000)]
1.0.29.6: regression in DIRECTORY when matching directory patterns

 * Don't recurse on the return value of PATTERN-MATCHES, but rather
   the subdirectory that matches.

15 years ago1.0.29.6: work around stack-allocated value cell badness in HANDLER-CASE
Nikodemus Siivola [Wed, 10 Jun 2009 13:03:36 +0000 (13:03 +0000)]
1.0.29.6: work around stack-allocated value cell badness in HANDLER-CASE

* Use an explicit CONS so the closed-over variable is read-only and
  doesn't need a value cell, and stack allocate the CONS instead.
  (Stack analysis still can't reason about stack allocated
  value-cells... it might be that doing a transformation like this in
  the compiler would be the way to integrate dx value cells properly
  into Python, maybe?)

15 years ago1.0.29.5: list item seek transform needs to check for both :TEST and :TEST-NOT
Nikodemus Siivola [Tue, 9 Jun 2009 12:23:51 +0000 (12:23 +0000)]
1.0.29.5: list item seek transform needs to check for both :TEST and :TEST-NOT

* When both are provided, abort the transform and let the full call
  take care of signalling the error. Reported by Tobias Ritterweiler.

15 years ago1.0.29.4: still more MAKE-ARRAY work
Nikodemus Siivola [Fri, 5 Jun 2009 14:25:29 +0000 (14:25 +0000)]
1.0.29.4: still more MAKE-ARRAY work

* Re-order the three MAKE-ARRAY deftransform, so that the more
  specific ones are tried before the general one -- which allows stack
  allocation in more the remaining cases that used to fail (I don't
  know why I blamed VECTOR-FILL* for that before.)

* When constant splicing for initial-element in
  TRANSFORM-MAKE-ARRAY-VECTOR didn't quote it, leading to lossiness
  with symbols or lists as constant initial-elements. (Bug masked
  earlier by the mis-ordering of the deftransforms.)

* In the final leg of TRANSFORM-MAKE-ARRAY-VECTOR also eliminate the
  possible :INITIAL-ELEMENT keyword.

* When eliminating keywords from a MAKE-ARRAY call, don't flush the
  lvars before checking that all of them can be eliminated. (Also
  masked by the earlier mis-ordering.)

15 years ago1.0.29.3: better reporting for failure to stack allocate
Nikodemus Siivola [Fri, 5 Jun 2009 13:08:35 +0000 (13:08 +0000)]
1.0.29.3: better reporting for failure to stack allocate

 * If the LVAR has no uses left, it is not good for DX.

 * When flushing the destination of a DX lvar, note that its uses will
   not be stack allocated.

 * Pull out the failure to stack allocate reporting into
   NOTE-NO-STACK-ALLOCATION, relax the filter to allow complaints
   about non-constant REFs, and omit notes for flushed and flushable
   combinations. TODO: the compiler should know about non-consing
   functions, so that it can avoid inane notes like "could not stack
   allocate the result of (CAR X)" should someone declare that DX.

 * Muffle compiler notes from WITH-PINNED-OBJECTS, since our paranoid
   use of DX-LET there is liable to cause lots of confusing "unable to
   stack allocate" notes.

15 years ago1.0.29.2: implement fixnump/signed-word VOP on x86 and x86-64
Nikodemus Siivola [Fri, 5 Jun 2009 11:36:46 +0000 (11:36 +0000)]
1.0.29.2: implement fixnump/signed-word VOP on x86 and x86-64

 * No need to cons up a bignum, and just one branch required.
   Eliminates a whole class of signed-word to integer coercions.

15 years ago1.0.29.1: fix FILL
Nikodemus Siivola [Thu, 4 Jun 2009 18:01:31 +0000 (18:01 +0000)]
1.0.29.1: fix FILL

 * Imaginary parts were messed up on 64 bit platforms when
   filling arrays of (COMPLEX SINGLE-FLOAT). Thanks to Paul Khuong.

 * Also delay the transform of FILL till constraint propagation has
   run, to get the constant argument form MAKE-ARRAY in properly.

 * ...and eradicate remaining references to the SUPPORT file.

15 years ago1.0.29: release, will be tagged as sbcl_1_0_29
Nikodemus Siivola [Thu, 4 Jun 2009 12:59:09 +0000 (12:59 +0000)]
1.0.29: release, will be tagged as sbcl_1_0_29

15 years ago1.0.28.77: fix test failures on PPC and elsewhere
Nikodemus Siivola [Thu, 4 Jun 2009 11:28:34 +0000 (11:28 +0000)]
1.0.28.77: fix test failures on PPC and elsewhere

* Most of the failures were test that cannot pass due to missing
  bits of DX implementation -- stack allocatable vectors and
  fixed-alloc.

* Mark backtrace test 353 as expected to fail on PPC as well.

* Don't declare *HANDLER-CLUSTERS* as dynamic-extent on platforms
  that do not support DX fixed-alloc, since it will just give
  a spurious compiler note.

15 years ago1.0.28.76: fix non-unicode builds on x86 and x86-64
Nikodemus Siivola [Wed, 3 Jun 2009 15:56:32 +0000 (15:56 +0000)]
1.0.28.76: fix non-unicode builds on x86 and x86-64

* The problem has been there since 1.0.24.35, but possibly
  exposed only recently: MOVE-IF/CHAR cannot use byte-sized
  registers since CMOV cannot. Hence disable if for non-unicode
  builds.

  Reported by Stas Boukarev.

* Missing news entry from 1.0.28.75.

15 years ago1.0.28.75: documentation work related to move to Launchpad
Nikodemus Siivola [Wed, 3 Jun 2009 09:09:52 +0000 (09:09 +0000)]
1.0.28.75: documentation work related to move to Launchpad

* Delete SUPPORT and minimize BUGS.

  The information that used to be there is now the first chapter of
  the manual: "Getting Support and Reporting Bugs", Maybe it belongs
  elsewhere, but IMO it should be as prominent as we can make it - so
  the first chapter for now.

  Refer to Lauchpad and sbcl-bugs in "Reporting Bugs".

  Remove Dan B. from support providers for now, given that
  metacircles.com is currently domain-parked.

15 years ago1.0.28.74: SHARED-INITIALIZE should initialize unbound :CLASS slots
Nikodemus Siivola [Tue, 2 Jun 2009 18:33:52 +0000 (18:33 +0000)]
1.0.28.74: SHARED-INITIALIZE should initialize unbound :CLASS slots

 * This has been around for a while, but despite the misleading
   comment in the source the spec is clear enough.

15 years ago1.0.28.73: regression from 1.0.28.21
Nikodemus Siivola [Tue, 2 Jun 2009 17:23:08 +0000 (17:23 +0000)]
1.0.28.73: regression from 1.0.28.21

 * One leg of logic lost in the refactoring: if the type to verify is
   (SIMPLE-ARRAY * (*)) we need to check that there is no array
   header.

15 years ago1.0.28.72: two regressions from 1.0.28.59
Nikodemus Siivola [Tue, 2 Jun 2009 15:59:33 +0000 (15:59 +0000)]
1.0.28.72: two regressions from 1.0.28.59

 * OPEN should not physicalize the pathname associated with
   the stream.

 * RENAME-FILE needs to deal with logical pathnames.

   (Both revealed by ansi-tests, as were the last bunch.)

15 years ago1.0.28.71: two regressions from the 1.0.28. series
Nikodemus Siivola [Tue, 2 Jun 2009 15:03:03 +0000 (15:03 +0000)]
1.0.28.71: two regressions from the 1.0.28. series

 * from 1.0.28.51: when destructuring a constant :INITIAL-CONTENTS to
   MAKE-ARRAY, take care to quote the elements.

 * from 1.0.28.61: handle :BACK and :UP in CANONICALIZE-PATHNAME, and
   make sure they do not appear after :WILD-INFERIORS or :ABSOLUTE.
   I'm more and more concinved that MAKE-PATHNAME should canonicalize,
   though, so that these checks don't need to be carried out by users
   of pathnames -- but leaving that for later.

   ...how appropriate that it is .71 that fixes both.

15 years ago1.0.28.70: regression in ABOUT-TO-MODIFY-SYMBOL-VALUE from 1.0.28.30
Nikodemus Siivola [Sat, 23 May 2009 08:27:21 +0000 (08:27 +0000)]
1.0.28.70: regression in ABOUT-TO-MODIFY-SYMBOL-VALUE from 1.0.28.30

 * Patch and test-case by Stas Boukarev.

15 years ago1.0.28.69: filesystem tests and small Windows improvements
Nikodemus Siivola [Fri, 22 May 2009 06:16:20 +0000 (06:16 +0000)]
1.0.28.69: filesystem tests and small Windows improvements

* FILE-AUTHOR returns NIL instead of signalling an error on Windows

* Missing DIRECTORY canonicalization tests.

* Check one-letter devices for being alpha-chars when unparsing
  them on Windows.

* NATIVE-NAMESTRING now has similar tailing-slash handling
  on Windows as elsewhere -- adjust the test.

* Windows namestrings canonicalize / to \ -- make the random
  namestring tests take that into account.

  ...filesys.pure.lisp passes on Windows.

15 years ago1.0.28.68: move PPC over to slimmed-down EMIT-ERROR-BREAK interface
Nathan Froyd [Thu, 21 May 2009 21:03:34 +0000 (21:03 +0000)]
1.0.28.68: move PPC over to slimmed-down EMIT-ERROR-BREAK interface

nyef pointed out that compiler/generic/array.lisp was kinda ugly with the
#!+ condition goo it in.  This patch is the first step towards moving all
backends over to the slimmer EMIT-ERROR-BREAK interface--one that doesn't
require duplicating lots of error generation code in VOP generation
functions.

15 years ago1.0.28.67: fix build on powerpc-linux
Nathan Froyd [Thu, 21 May 2009 16:22:54 +0000 (16:22 +0000)]
1.0.28.67: fix build on powerpc-linux

lose() was not getting declared early enough; shuffle header files around
to ensure interr.h gets included before gc.h in the relevant places.

15 years ago1.0.28.66: implement SB-EXT:GET-TIME-OF-DAY
Nikodemus Siivola [Thu, 21 May 2009 15:27:37 +0000 (15:27 +0000)]
1.0.28.66: implement SB-EXT:GET-TIME-OF-DAY

 * On unixoid platforms is this pretty much what UNIX-GETTIMEOFDAY
   used to be, whereas on Windows we build it on top of
   SystemTimeAsFileTime since gettimeofday() doesn't give us
   microseconds there -- it's almost as if the POSIX API support on
   Windows as intentionally sucky...

 * Keep UNIX-GETTIMEOFDAY around as a wrapper to GET-TIME-OF-DAY,
   since there are applications in the wild that use it directly.
   Scheduled for deletion towards to the end of 2009, or so.

15 years ago1.0.28.65: fix compiling with *PROFILE-HASH-CACHE* set to T
Nathan Froyd [Thu, 21 May 2009 12:13:53 +0000 (12:13 +0000)]
1.0.28.65: fix compiling with *PROFILE-HASH-CACHE* set to T

We were trying to set the PROBES/MISSES variables prior to actually
defining them.  Rearrange the logic and add a little OAOO to ensure the
variables are DEFVAR'd first.

15 years ago1.0.28.64: more DIRECTORY work
Nikodemus Siivola [Thu, 21 May 2009 10:30:27 +0000 (10:30 +0000)]
1.0.28.64: more DIRECTORY work

 * While DIRECTORY on local UNC paths worked as of 1.0.28.61, turns
   out Windows network shares don't exist as far as stat() is
   concerned -- and hence using the proper share path didn't work.
   Replace QUERY-FILE-SYSTEM in MAP-DIRECTORY with UNIX-REALPATH
   sans stat, and we're good.

 * Canonicalize the pathnames for DIRECTORY, so that (DIRECTORY #P".")
   is equivalent to (DIRECTORY #P"./") -- ditto for #P".." and
   #P"../". Also make DIRECTORY treat :UNSPECIFIC names and types as
   if they were NIL.

15 years ago1.0.28.63: SB-EXT:DEFINE-HASH-TABLE-TEST
Nikodemus Siivola [Thu, 21 May 2009 09:56:16 +0000 (09:56 +0000)]
1.0.28.63: SB-EXT:DEFINE-HASH-TABLE-TEST

 * Based on old SB-INT:DEFINE-HASH-TABLE-TEST, but:
   ** macro, not a function.
   ** only two arguments: name of the test function, and the hash function
      (which can also be a lambda form.)
   ** :TEST accepts both 'NAME, and #'NAME as well.
   ** pick up redefinitions of the test and hash-function without
      re-executing the D-H-T-T form.
   ** protected by package locks.

 * MAKE-HASH-TABLE :HASH-FUNCTION supported as well. EQ-based hashing
   not legal for user-provided hash functions, accidents prevented by
   wrapping functions which may return a true secondary value in
   a closure.

 * Documentation -- other hash-table extensions as well.

 * Documentation generation improvements:
   ** use the shortest package name available -- CL:FOO, not
      COMMON-LISP:FOO.
   ** kludge around texi2pdf making &key and company bold
   ** add exceptions so that we don't format words ANSI and CLHS
      as lowecase symbols.

15 years ago1.0.28.62: restore SYSCALL macros to the target build
Nathan Froyd [Thu, 21 May 2009 01:50:52 +0000 (01:50 +0000)]
1.0.28.62: restore SYSCALL macros to the target build

Apparently there were other clients floating out in the wild.

15 years ago1.0.28.61: partial re-implementation of DIRECTORY
Nikodemus Siivola [Wed, 20 May 2009 13:51:53 +0000 (13:51 +0000)]
1.0.28.61: partial re-implementation of DIRECTORY

 * Rip out !ENUMERATE-MATCHES, which insisted on walking the
   directory tree from the root -- making using DIRECTORY on
   UNC pathnames a losing proposition.

 * New guts built on top of MAP-DIRECTORY, and it's lower level cousin
   WITH-NATIVE-DIRECTORY-ITERATOR. This seems easier to understand to
   me at least, and was certainly easier than trying to re-architect
   !ENUMERATE-MATCHES. ...and DIRECTORY now works on UNC shares, yay!

   ...and a bunch of associated secondary changes:

   ** Rename UNIX-FILE-KIND NATIVE-FILE-KIND, and move it to
      filesys.lisp.

   ** Add functions UNIX-OPENDIR, UNIX-READDIR, UNIX-CLOSEDIR, and
      UNIX-DIRENT-NAME -- later to be turned into OS-*, and possibly
      moved into SB-SYS.

   ** *IGNORE-WILDCARDS* is no longer needed in MAYBE-MAKE-PATTERN,
       kill it.

   ** Share UNPARSE-*-PIECE as UNPARSE-PHYSICAL-PIECE between Win32
      and Unix: both have the same lisp namestring syntax for pieces,
      and if a third pathname host appears it probably should too.

   ** Fix DEFKNOWN of DIRECTORY: RESOLVE-SYMLINKS needs to be a
      keyword there.

   ** Kill QUICK-INTEGER-TO-STRING -- use %OUTPUT-INTEGER-IN-BASE
      in GENSYM instead.

   ** Kill PATHAME-ORDER, unused.

   ** Follow the same convention as elsewhere for :AS-FILE in
      NATIVE-NAMESTRING on Windows -- users needing the
      no-trailing-slash version are supposed to say :AS-FILE. OS
      pickiness on slash-or-no seems universal...

15 years ago1.0.28.60: partial UNC pathname support for Windows
Nikodemus Siivola [Tue, 19 May 2009 12:30:24 +0000 (12:30 +0000)]
1.0.28.60: partial UNC pathname support for Windows

  UNC hosts are represented using the devĂ­ce components of pathnames,
  as are drives. This is sleightly lossy since it prevents accessing
  network hosts named with a single letter -- single-letter devices
  are taken to mean drives.

  However, since storing the host in the pathname host component
  would lead to confusion between logical hosts and UNC hosts,
  this seems preferable right now, so that

   (make-pathname :host "foo" ...)

  remains unambiguous. DIRECTORY does not work yet with UNC pathnames
  since it insists on walking the path from root -- which Windows
  doesn't seem to allow for UNC paths, not even local ones.

15 years ago1.0.28.59: give UNIX-NAMESTRING the chop
Nikodemus Siivola [Mon, 18 May 2009 20:38:44 +0000 (20:38 +0000)]
1.0.28.59: give UNIX-NAMESTRING the chop

 Use PROBE-FILE and NATIVE-NAMESTRING instead as appropriate.

15 years ago1.0.28.58: more MAKE-ARRAY goodness
Nikodemus Siivola [Mon, 18 May 2009 09:17:49 +0000 (09:17 +0000)]
1.0.28.58: more MAKE-ARRAY goodness

  Consider (MAKE-ARRAY '(3) :INITIAL-CONTENTS (LIST X Y Z)):

  The transform for LIST dimensions replaces this with an identical
  call, except that the dimensions will be 3.

  The transform for INTEGER dimensions fires, but does not yet
  see the (LIST X Y Z) in INITIAL-CONTENTS, since it is now an
  argument to the lambda introduced by the previous call.

  One option would be to delay the latter transform if we don't see
  how to compile it nicely, because after a couple of IR1-OPTIMIZE
  passes the call to LIST will be there, and the intermediate lambda
  eliminated.

  However, because multiple roundtrips like that suck, instead make
  the source transform for MAKE-ARRAY smart enough to recognize this
  case, and transform to the integer argument case directly.

  ...now, this makes me think we really should try to eliminate /
  simplify lambdas introduced by TRANSFORM-CALL up front somehow.

15 years ago1.0.28.57: cross compiler is able to reason about host complexes
Nikodemus Siivola [Mon, 18 May 2009 07:58:11 +0000 (07:58 +0000)]
1.0.28.57: cross compiler is able to reason about host complexes

  ...based on the type the host object will take in target,
  which just needs to follow the same logic our dumper uses.

  ...fixing which shows the the new FILL transform didn't handle
  complex single floats quite right yet.

15 years ago1.0.28.56: more robust stack frame pointer checking in SB-SPROF
Nikodemus Siivola [Sun, 17 May 2009 18:01:01 +0000 (18:01 +0000)]
1.0.28.56: more robust stack frame pointer checking in SB-SPROF

  Foreign code might not have a frame pointer like we expect. Use
  CONTROL-STACK-POINTER-VALID-P to check it.

  Patch by Bart Botta.

15 years ago1.0.28.55: transform FILL to a UB*-BASH-FILL when possible
Nikodemus Siivola [Sun, 17 May 2009 17:30:23 +0000 (17:30 +0000)]
1.0.28.55: transform FILL to a UB*-BASH-FILL when possible

 The performance boost for all cases which previously used
 VECTOR-FILL* is quite noticeable.

 Also delay the FILL transform if the vector element type is
 not yet known.

 ...also one leftover #+sb-xc-host from the previous commit.

15 years ago1.0.28.54: more principled approach to complex dumping in the xc
Nikodemus Siivola [Sun, 17 May 2009 17:11:59 +0000 (17:11 +0000)]
1.0.28.54: more principled approach to complex dumping in the xc

  Christophe points out that (UPGRADED-COMPLEX-PART-TYPE 'DOUBLE-FLOAT)
  can be REAL on some hosts, in which case the host will happily
  agree that (TYPEP #C(2 2) '(COMPLEX DOUBLE-FLOAT)) is true... etc.

  So in the cross compiler look at the type of the parts of the
  complex, and refuse to dump it if it doesn't look like something we
  can handle correctly.

15 years ago1.0.28.53: enable dumping of specialized complexes in the cross-compiler
Nikodemus Siivola [Sun, 17 May 2009 12:44:17 +0000 (12:44 +0000)]
1.0.28.53: enable dumping of specialized complexes in the cross-compiler

 * No reason to disable it that I can see, and if it is disabled the
   cross-compiler will dump slightly bogus objects for complex single
   and double floats -- using the generic complex widetag.

   Noticed while trying to initialize arrays using the
   SAETP-DEFAULT-INITIAL-ELEMENT.

15 years ago1.0.28.52: fix x86-64 build, oops
Nikodemus Siivola [Sat, 16 May 2009 15:10:54 +0000 (15:10 +0000)]
1.0.28.52: fix x86-64 build, oops

  Name data vector accessor VOPs consistently, using the -WITH-OFFSET/
  style names, since on x86-64 they all are with offsets.
  (INITIALIZE-VECTOR has a macrolet that generates VOP calls based on
  the platform, and wants consistent names.)

15 years ago1.0.28.51: better MAKE-ARRAY transforms
Nikodemus Siivola [Sat, 16 May 2009 12:23:13 +0000 (12:23 +0000)]
1.0.28.51: better MAKE-ARRAY transforms

 * 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.

15 years ago1.0.28.50: better source locations for failure-to-stack-allocate notes
Nikodemus Siivola [Sat, 16 May 2009 11:26:36 +0000 (11:26 +0000)]
1.0.28.50: better source locations for failure-to-stack-allocate notes

15 years ago1.0.28.49: allow stack allocation for arguments of FILL and REPLACE
Nikodemus Siivola [Sat, 16 May 2009 11:24:29 +0000 (11:24 +0000)]
1.0.28.49: allow stack allocation for arguments of FILL and REPLACE

   FUN-INFO-RESULT-ARG is either NIL, or the index of the argument
   that is EQ to the result of the function. Use LVAR-GOOD-FOR-DX-P
   with the argument lvar that is the result argument.

   Other arguments are for DX as well: if the result can be stack
   allocated then unless the other arguments are otherwise accessible
   they too can be stack allocated -- and if they are otherwise accessible
   then DX analysis should refuse to stack allocate.

15 years ago1.0.28.48: fix regressions from 1.0.28.47
Nikodemus Siivola [Fri, 15 May 2009 21:11:44 +0000 (21:11 +0000)]
1.0.28.48: fix regressions from 1.0.28.47

  * Assert the declared element-type in the
    HAIRY-DATA-VECTOR-(REF|SET)/CHECK-BOUNDS transform, since
    HAIRY-DATA-VECTOR-(REF|SET) transforms no longer fire for
    non-simple arrays.

  * Turns out that %DATA-VECTOR-AND-INDEX was the only place where the
    index was checked being non-negative on some code paths -- not
    taking that route meant that type check weakening from INDEX to
    FIXNUM allowed negative indexes to slip in under the the radar in
    SAFETY 1 code.

    While this follows what we say in the manual, being more careful
    about bounds checks is probably a good idea, so be more
    conservative about weakenin integer types: collapse unions of
    intervals into a single interval, but dont' eliminate the most
    extreme bounds.

    Adjust one test that checked for the old behaviour, and
    update documentation.

15 years ago1.0.28.47: depessimize accesses to maybe non-simple arrays with known element types
Nikodemus Siivola [Thu, 14 May 2009 10:23:47 +0000 (10:23 +0000)]
1.0.28.47: depessimize accesses to maybe non-simple arrays with known element types

  The transforms for HAIRY-DATA-VECTOR-(REF|SET) which inserted a call
  to %DATA-VECTOR-AND-INDEX were never a win unless the array was
  known to be simple: the element type dispatch is quite effcient, and
  the slow path has an open coded WITH-ARRAY-DATA which performs
  better.

  For simple arrays the transforms remain a win, since
  %DATA-VECTOR-AND-INDEX will be open coded: at most one dereference
  is ever necessary.

  Unfortunately declaring the element type of a non-simple array remains
  a loss -- just a less drastic one then before.

15 years ago1.0.28.46: implement os_restore_fp_control() for OpenBSD x86
Nikodemus Siivola [Wed, 13 May 2009 18:13:48 +0000 (18:13 +0000)]
1.0.28.46: implement os_restore_fp_control() for OpenBSD x86

  Fixes problems with the floating point modes being forgotten. Also
  fixes one of the float tests by clearing the exception flags first,
  insuring that the right exception is raised.

  Patch by Josh Elsasser.

15 years ago1.0.28.45: better generic function lambda-lists
Nikodemus Siivola [Wed, 13 May 2009 17:56:31 +0000 (17:56 +0000)]
1.0.28.45: better generic function lambda-lists

  Add a few &REST arguments with documentary value, and use better
  argument names.

15 years ago1.0.28.44: better MACHINE-VERSION answers on BSD'ish platforms
Nikodemus Siivola [Wed, 13 May 2009 13:58:31 +0000 (13:58 +0000)]
1.0.28.44: better MACHINE-VERSION answers on BSD'ish platforms

 Also reduce OAOOMity of GET-MACHINE-VERSION.

 Patch by Josh Elsasser.

15 years ago1.0.28.43: QUIT related work
Nikodemus Siivola [Tue, 12 May 2009 11:00:13 +0000 (11:00 +0000)]
1.0.28.43: QUIT related work

 * SAVE-LISP-AND-DIE :TOPLEVEL can return, just call QUIT if it does.

 * --script should not override QUIT called by user with its own exit status.
   (reported by Hubert Kauker)

15 years ago1.0.28.42: pretty-printing LOOP forms
Nikodemus Siivola [Tue, 12 May 2009 09:58:45 +0000 (09:58 +0000)]
1.0.28.42: pretty-printing LOOP forms

 Thanks to Tobias Ritterweiler.

 Update NEWS a bit while at it.

15 years ago1.0.28.41: make MAKE-ARRAY transforms co-operate with FILL better
Nikodemus Siivola [Tue, 12 May 2009 09:11:39 +0000 (09:11 +0000)]
1.0.28.41: make MAKE-ARRAY transforms co-operate with FILL better

  When the transform for FILL fires, and the type of initial-element
  has not yet been propagated, so VECTOR-FILL* fires instead of a more
  specific transform (which currently exist only for
  SIMPLE-BASE-STRINGs and SIMPLE-BIT-VECTORs.)

  Annotate the type with THE and the SAETP-SPECIFIER so the most
  specific transform can fire.

  Reported by Stas Boukarev.

15 years ago1.0.28.40: hopefully fix Win32 build
Nikodemus Siivola [Tue, 12 May 2009 08:21:12 +0000 (08:21 +0000)]
1.0.28.40: hopefully fix Win32 build

 * Broken by 1.0.28.37.

15 years ago1.0.28.39: more error reporting tweakery
Nikodemus Siivola [Mon, 11 May 2009 19:41:48 +0000 (19:41 +0000)]
1.0.28.39: more error reporting tweakery

 * Now that *CURRENT-PATH* is bound first by PROCESS-TOPLEVEL-FORM
   make FIND-ERROR-CONTEXT prefer NODE-SOURCE-PATH *CURRENT-PATH* --
   otherwise the more accurate source path in the node is never used.

   (Experimentally it seems that *CURRENT-PATH* is never more
   accurate.)

   Everything seems OK, but the whole source path mechanism could
   probably us an audit, and possibly some refactoring.

 * ADD-TEST-CONSTRAINTS should bind *COMPILER-ERROR-CONTEXT* around
   the call to SPECIALIZER-TYPE in case of undefined types. (Left out
   from last patch by accident.)

15 years ago1.0.28.38: undefined warning and compilation unit summary tweaking
Nikodemus Siivola [Mon, 11 May 2009 15:44:11 +0000 (15:44 +0000)]
1.0.28.38: undefined warning and compilation unit summary tweaking

 * Signal a full warning for undefined types when the name is in the
   COMMON-LISP package.

 * Explain probable source of error when the name of an undefined type
   is a quoted object.

 * When same original source form is responsible for multiple
   undefined warnings, only signal the first: otherwise we may signal
   a boatload of identical warnings for a single source form just
   because the compiler tries so very hard to make sense of it.

 * Don't summarize the names of undefined things by signalling new
   warnings for them, instead include the names in the compilation
   unit summary.

15 years ago1.0.28.37: resignal signals received in foreign threads
Gabor Melis [Mon, 11 May 2009 13:24:34 +0000 (13:24 +0000)]
1.0.28.37: resignal signals received in foreign threads

Signals delivered to threads started from foreign land (read: directly
by pthread_create, not by MAKE-THREAD) are redirected to a Lisp thread
by blocking all signals and resignalling.

15 years ago1.0.28.36: better logic for failure-to-stack-allocate notes
Nikodemus Siivola [Mon, 11 May 2009 11:17:51 +0000 (11:17 +0000)]
1.0.28.36: better logic for failure-to-stack-allocate notes

 * Elide if the use is a REF, not if the source form is a symbol.

 * Tests.

15 years ago1.0.28.35: compiler notes for failure to stack allocate
Nikodemus Siivola [Mon, 11 May 2009 10:21:20 +0000 (10:21 +0000)]
1.0.28.35: compiler notes for failure to stack allocate

 * Emit a compiler note when stack allocation was requested, but could
   not be provided.

15 years ago1.0.28.34: convert once-used DEFMACROs to EVAL-WHEN'd SB!XC:DEFMACROs
Nathan Froyd [Sat, 9 May 2009 13:00:29 +0000 (13:00 +0000)]
1.0.28.34: convert once-used DEFMACROs to EVAL-WHEN'd SB!XC:DEFMACROs

There were a couple FIXMEs lurking about this.  Fixing themm is easy enough
and reduces the core size slightly.

15 years ago1.0.28.33: minor post-DEFGLOBAL cleanups
Nikodemus Siivola [Sat, 9 May 2009 09:27:07 +0000 (09:27 +0000)]
1.0.28.33: minor post-DEFGLOBAL cleanups

 * Call array-accessor dispatch tables %%foo%% instead of **foo** to
   warn off the unwary.

 * Set their size to (1+ widetag-mask) -- this should not really matter
   since we check for other-pointer-lowtag before stripping the widetag,
   as widetag are always immediate objects, so the low bit is zero.
   ...but this is more obviously correct, and costs us, what 4 words
   of storage.

 * Mark one FIXME/KLUDGE more, since people have been so busy getting
   rid of them...

 * Restore the imperative tone in DEFVAR docstring.

 * Oops, left one FLUSHABLE too many in last commit.

15 years ago1.0.28.32: move FLUSHABLE back to SB!ASSEM
Nikodemus Siivola [Sat, 9 May 2009 08:58:21 +0000 (08:58 +0000)]
1.0.28.32: move FLUSHABLE back to SB!ASSEM

 * Broke Sparc build, and maybe others.

15 years ago1.0.28.31: remove :PREFIX/:SUFFIX from DEFENUM for MORE GREPPABILITY
Nathan Froyd [Fri, 8 May 2009 20:58:23 +0000 (20:58 +0000)]
1.0.28.31: remove :PREFIX/:SUFFIX from DEFENUM for MORE GREPPABILITY

Searching for useful things like even-fixnum-lowtag in the source won't
find the actual definition due to cleverness with DEFENUM.  This cleverness
is the source of several FIXMEs throughout the code.  I can personally
remember being baffled at the magic of even-fixnum-lowtag and friends
magically springing into existence when I could not easily grep for their
definitions.  In the interest of clarity, remove the cleverness and update
all relevent DEFENUMs.

In the interest of OAOO, move TRACE-TABLE-* constants to generic code while
we're at it, too.  Doing the same thing for the *-TRAP constants is left
as an exercise for another day.

15 years ago1.0.28.30: DEFGLOBAL, ALWAYS-BOUND, GLOBAL, SYMBOL-GLOBAL-VALUE
Nikodemus Siivola [Fri, 8 May 2009 19:08:07 +0000 (19:08 +0000)]
1.0.28.30: DEFGLOBAL, ALWAYS-BOUND, GLOBAL, SYMBOL-GLOBAL-VALUE

 * ALWAYS-BOUND allows the compiler to elide boundness checks
   for symbol value access, and prohibits MAKUNBOUND. This is
   handled via a new globaldb entry.

   GLOBAL makes the compiler elide TLS checking for symbol
   values access, and prohibits rebinding. This is handled via
   new globaldb :variable :type, namely :global.

   DEFGLOBAL is build on top of these. Global variables are mainly an
   efficiency measure on threaded builds, but can also express
   intention as they prohibit rebinding.

 * Add %SET-SYMBOL-GLOBAL-VALUE, FAST-SYMBOL-GLOBAL-VALUE, and
   SYMBOL-GLOBAL-VALUE VOPs to all backends. On unithreaded
   builds these are trivial copies of the non-global versions.

 * Tell SB-CLTL2 about both GLOBAL and ALWAYS-BOUND declarations too.

 * Document in the Efficiency chapter of the manual.

 * Prohibit declaring constants special.

 * Tests.

  Later: use these new features inside SBCL itself. For now there is
  only a single DEFGLOBAL used, but more could well be.

15 years ago1.0.28.29: some manual love
Nikodemus Siivola [Fri, 8 May 2009 09:32:28 +0000 (09:32 +0000)]
1.0.28.29: some manual love

  Updates, light reorganization and a touch of prettification.

  Also warn about the dangers of dynamic environment as it pertains to
  timers.

15 years ago1.0.28.28: delete %RAW-BITS and %SET-RAW-BITS
Nathan Froyd [Fri, 8 May 2009 03:00:25 +0000 (03:00 +0000)]
1.0.28.28: delete %RAW-BITS and %SET-RAW-BITS

%VECTOR-RAW-BITS and %SET-VECTOR-RAW-BITS are exactly the same functionality
without the weird dancing with SB!VM:VECTOR-DATA-OFFSET.

15 years ago1.0.28.27: move FLUSHABLE to SB-C, export UNSAFELY-FLUSHABLE for consistency
Nikodemus Siivola [Thu, 7 May 2009 18:06:12 +0000 (18:06 +0000)]
1.0.28.27: move FLUSHABLE to SB-C, export UNSAFELY-FLUSHABLE for consistency

  EOM

15 years ago1.0.28.26: Mr. ATOMIC-INCF/SYMBOL, meet Mr. AX
Nikodemus Siivola [Thu, 7 May 2009 17:44:09 +0000 (17:44 +0000)]
1.0.28.26: Mr. ATOMIC-INCF/SYMBOL, meet Mr. AX

  Given the chop as as dangerous if the symbol-value happens to be
  anything else but a fixnum. If this are still desired, ATOMIC-INCF
  can be extended to support symbols proclaimed FIXNUM -- but that too
  will lose on unbound symbols.

  Was only used in a single test, replace with a structure and
  ATOMIC-INCF there.

15 years ago1.0.28.25: document CLOS slot type checking policy
Nikodemus Siivola [Thu, 7 May 2009 16:48:04 +0000 (16:48 +0000)]
1.0.28.25: document CLOS slot type checking policy

  ...especially since given our normal declarations-are-assertions
  policy it is somewhat surprising.

15 years ago1.0.28.24: better %ARRAY-DISPLACED-FROM handling
Nikodemus Siivola [Thu, 7 May 2009 11:11:05 +0000 (11:11 +0000)]
1.0.28.24: better %ARRAY-DISPLACED-FROM handling

   James Knight pointed out that signalling an error at ADJUST-ARRAY
   time is not quite right, since the other array may be otherwise
   unreachable already -- we're following a weak pointer after all.

   Oops. Enter the twilight zone between clever by half and slightly
   horrible:

   When a potentially bogus ADJUST-ARRAY is detected, walk the chain
   of backpointers, and set FILL-POINTER, AVAILABLE-ELEMENTS, and
   all dimensions of the too-large displaced-from arrays to zero.

   This in turn causes any typecheck involving the array dimensions
   to trap, as well as any bounds-checked access.

   To make these errors more understandable, save the original
   dimensions of the array, punning them to the ARRAY-DISPLACED-P
   slot, and identify the bogus arrays in INVALID-ARRAY-INDEX-ERROR
   function, and the OBJECT-NOT-TYPE-ERROR internal error handler;
   signal an INVALID-ARRAY-ERROR instead, which explains what is going
   on.

   Whew.

   Oh, and a BIG THREAD SAFETY NOTE regarding the fundamental nature
   of our ADJUST-ARRAY implementation. It is not thread safe in
   parallel with accesses to the array being adjusted. Tentative
   idea is to add one more level of indirection to array headers,
   so that we can get atomic updates without locking.

15 years ago1.0.28.23: Fix value of CL:- in inspector
Alastair Bridgewater [Thu, 7 May 2009 02:12:58 +0000 (02:12 +0000)]
1.0.28.23: Fix value of CL:- in inspector

  The inspector was the last holdout against using INTERACTIVE-EVAL.

...take one down, commit the fix, 97 FIXMEs left in the source... (with
apologies to Nathan Froyd, per 1.0.28.7)

15 years ago1.0.28.22: Fix deref of (alien (* t)) values
Alastair Bridgewater [Wed, 6 May 2009 21:12:08 +0000 (21:12 +0000)]
1.0.28.22: Fix deref of (alien (* t)) values

  When attempting to deref a value known to the compiler as an (alien
(* t)) issue a compiler note rather than attempting to open-code (the
type may be better known at run-time).

  Update NEWS with mention of the changes from 1.0.28.11 (oops).

15 years ago1.0.28.21: further array typechecking optimization
Nikodemus Siivola [Wed, 6 May 2009 18:39:49 +0000 (18:39 +0000)]
1.0.28.21: further array typechecking optimization

 (really, this time. contents accidentally left out from 1.0.28.20)

 * Eliminate extra lowtag checking from the array element type check:
   since we know we are dealing with an array, we can use the same
   fast widetag extraction code that array type dispatching used --
   factoring it out into %OTHER-POINTER-WIDETAG.

 * If we know after checking the dimensions that the array must have
   a header, and we know that the array is simple, we can deduce that
   there is exactly one level of indirection.

 * Similarly, if we know that the array has a header, we can
   immediately pull out the data vector to check if it too has a
   header instead of doing an extra test.

15 years ago1.0.28.20: further array typechecking optimization
Nikodemus Siivola [Wed, 6 May 2009 18:35:41 +0000 (18:35 +0000)]
1.0.28.20: further array typechecking optimization

 * Eliminate extra lowtag checking from the array element type check:
   since we know we are dealing with an array, we can use the same
   fast widetag extraction code that array type dispatching used --
   factoring it out into %OTHER-POINTER-WIDETAG.

 * If we know after checking the dimensions that the array must have
   a header, and we know that the array is simple, we can deduce that
   there is exactly one level of indirection.

 * Similarly, if we know that the array has a header, we can
   immediately pull out the data vector to check if it too has a
   header instead of doing an extra test.

15 years ago1.0.28.19: faster ARRAY-DIMENSION for non-vectors
Nikodemus Siivola [Wed, 6 May 2009 16:28:03 +0000 (16:28 +0000)]
1.0.28.19: faster ARRAY-DIMENSION for non-vectors

  Previously each ARRAY-DIMENSION call for a non-vector resulted in
  checking (1) if the array was a displaced array (2) if the array it
  was displaced to was still big enough for it.

  This sucks pretty badly, because we use ARRAY-DIMENSION in bounds
  checking -- especially given how rare it is to have an array
  displaced to an adjustable array.

  Add a new slot, ARRAY-DISPLACED-FROM, to array-headers, and store a
  list of weak backpointers to arrays displaced to the array in
  question there. SET-ARRAY-HEADER (as part of ADJUST-ARRAY) now
  checks this list, and signals an error if any of the displaced-from
  arrays is larger than the new size.

  This also allows us to open code ARRAY-DIMENSION as long as the
  array rank is known.

15 years ago1.0.28.18: better TRULY-DYNAMIC-EXTENT handling
Nikodemus Siivola [Wed, 6 May 2009 15:50:19 +0000 (15:50 +0000)]
1.0.28.18: better TRULY-DYNAMIC-EXTENT handling

   Since RECHECK-DYNAMIC-EXTENT-LVARS passes T as the DX type,
   TRULY-DYNAMIC-EXTENT did not unconditionally allow DX allocation
   regardless of policy, as was the intention.

   Save the LVARs initially along with the DX type (T or :TRULY),
   so that R-D-E-L can use the correct DX type when rechecking.

   Test case.

15 years ago1.0.28.17: tn packing issues in ALLOCATE-VECTOR-ON-STACK on x86oids
Nikodemus Siivola [Wed, 6 May 2009 13:27:52 +0000 (13:27 +0000)]
1.0.28.17: tn packing issues in ALLOCATE-VECTOR-ON-STACK on x86oids

 * If WORDS and LENGTH were packed in the same TN all manner of
   badness arose. Adjust lifetimes to make sure it doesn't happen,
   and try to pack LENGTH into EAX while at it.

   Gabor Melis and Paul Khuong did the figuring out what's wrong.

15 years ago1.0.28.16: Fix a mistake in 1.0.28.15
Alastair Bridgewater [Tue, 5 May 2009 20:02:11 +0000 (20:02 +0000)]
1.0.28.16: Fix a mistake in 1.0.28.15

  In host-load-stem, the flags argument was declared ignore while
actually being used.  Fixed.

15 years ago1.0.28.15: Build desymlinkification
Alastair Bridgewater [Tue, 5 May 2009 17:11:18 +0000 (17:11 +0000)]
1.0.28.15: Build desymlinkification

  Changed the object filename computation function to use a different
suffix for files in target-compile mode with the :assem flag.

  Changed the src/compiler/assembly/ paths in build-order.lisp-expr to
refer to src/assembly/ instead.

  Changed the duplicate-stem check in src/cold/shared.lisp to operate
in terms of target-compile object file names.

  Changed both the source and object filename computation functions to
call a new function to remap stem path segments matching "/target/" to
the appropriate per-arch directory.

  Removed the code for creating the compiler/assembly/ and target/
symlinks from make-config.sh.

  With this, source-location information in SBCL is now correct even
when used against an unbuilt source tree.

15 years ago1.0.28.14: Build system refactoring
Alastair Bridgewater [Tue, 5 May 2009 17:10:29 +0000 (17:10 +0000)]
1.0.28.14: Build system refactoring

  Moved flag processing as far "inward" as possible when dealing with
compile-stem, reducing the amount of redundant code for parsing out and
passing along boolean keywords based on the presence or absence of a
flag and eliminating some of the keyword arguments to compile-stem.

  Added a "mode" parameter to compile-stem to enable determining the
correct compile-file function based on the combination of mode and
flags, further simplifying the interface.

  Added new functions for determining the source and object pathnames
for a stem, fixing a longstanding KLUDGE in host-load-stem,
consolidating the three instances of code to compute an object pathname
and the two instances of code to compute a source pathname and
eliminating the rest of the keyword arguments to compile-stem.

15 years ago1.0.28.13: quiet WITH-TIMEOUT when used with constant EXPIRES argument
Nikodemus Siivola [Tue, 5 May 2009 10:53:16 +0000 (10:53 +0000)]
1.0.28.13: quiet WITH-TIMEOUT when used with constant EXPIRES argument

 * Don't copy the body so as to avoid the compiler note for deleting
   either leg, which happens when EXPIRES is a constant.

15 years ago1.0.28.12: preserve non-toplevelness of macro subforms
Nikodemus Siivola [Tue, 5 May 2009 09:41:24 +0000 (09:41 +0000)]
1.0.28.12: preserve non-toplevelness of macro subforms

 * As per CLHS 3.2.3.1.2. At least AND, OR, and COND where affected by
   this. Reported by James Knight.

15 years ago1.0.28.11: Fix bug 316325 (x86oid alien integer result truncation)
Alastair Bridgewater [Mon, 4 May 2009 23:09:02 +0000 (23:09 +0000)]
1.0.28.11: Fix bug 316325 (x86oid alien integer result truncation)

  Change the parameters for :alien-rep alien-type-methods to include a
"CONTEXT" parameter to indicate if the type being sought is for a
function result representation.  Ignore the new parameter on all
:alien-rep methods except for (integer :alien-rep).

  Change (integer :alien-rep) to return an integer type the full width
of a machine register when asked for the function result
representation.

  Condition out the (integer :naturalize-gen) method in
src/code/host-alieneval.lisp on x86oids (it's defined in
src/compiler/x86{,-64}/c-call.lisp).

  Change the type deriver for %alien-funcall to request the result
representation for the declared function result type.

  In src/compiler/x86{,-64}/c-call.lisp, change the (integer
:naturalize-gen) alien-type-method to do field masking of unsigned
fields when needed.

  Also in src/compiler/x86{,-64}/c-call.lisp, fix SIGN-EXTEND to not
lie to the compiler quite so badly about its argument types and add a
comment about a possible future optimization.

  Add a test to tests/alien.impure.lisp, for completeness sake.

15 years ago1.0.28.10: faster array dimension typechecking code
Nikodemus Siivola [Mon, 4 May 2009 20:43:04 +0000 (20:43 +0000)]
1.0.28.10: faster array dimension typechecking code

 * Put in an explicit ARRAY-HEADER-P, and short-circuit on its result
   when possible, otherwise use the known presence or lack of header
   to get dimensions more efficiently: using either %ARRAY-DIMENSION
   or VECTOR-LENGTH.

15 years ago1.0.28.9: open code ARRAY-RANK
Nikodemus Siivola [Mon, 4 May 2009 19:28:44 +0000 (19:28 +0000)]
1.0.28.9: open code ARRAY-RANK

 * Faster multidimensional AREF if the array rank is not known
   at compile-time.

15 years ago1.0.28.8: micro-optimize OUCH-READ-BUFFER
Nathan Froyd [Fri, 1 May 2009 21:01:57 +0000 (21:01 +0000)]
1.0.28.8: micro-optimize OUCH-READ-BUFFER

Remove an array bounds check and a couple of BOUNDP checks.

15 years ago1.0.28.7: eliminate *READ-BUFFER-LENGTH*
Nathan Froyd [Fri, 1 May 2009 20:29:39 +0000 (20:29 +0000)]
1.0.28.7: eliminate *READ-BUFFER-LENGTH*

...take one down, commit the fix, 98 FIXMEs left in the source...

15 years ago1.0.28.6: move the new PROGV tests to the right part of the file
Nikodemus Siivola [Fri, 1 May 2009 20:22:52 +0000 (20:22 +0000)]
1.0.28.6: move the new PROGV tests to the right part of the file

 * Oops.

15 years ago1.0.28.5: delete MERGE-BITS
Nathan Froyd [Fri, 1 May 2009 18:17:46 +0000 (18:17 +0000)]
1.0.28.5: delete MERGE-BITS

Wasn't used anywhere; probably intended for bignum operations.

15 years ago1.0.28.4: various macro source locations were off-by-one due to #-sb-xc
Nikodemus Siivola [Fri, 1 May 2009 12:03:54 +0000 (12:03 +0000)]
1.0.28.4: various macro source locations were off-by-one due to #-sb-xc

 * Thanks to Tobias Rittweiler -- now M-. DEFTRANSFORM, etc. work
   better in Slime.

15 years ago1.0.28.3: ABOUT-TO-MODIFY-SYMBOL-VALUE doesn't choke on FUNCTION subtypes
Nikodemus Siivola [Fri, 1 May 2009 10:54:28 +0000 (10:54 +0000)]
1.0.28.3: ABOUT-TO-MODIFY-SYMBOL-VALUE doesn't choke on FUNCTION subtypes

 * Evaluating eg. a SET when the type of the variable as been
   proclaimed to be a subtype of FUNCTION used to break, since
   ABOUT-TO-MODIFY-SYMBOL-VALUE uses %%TYPEP to check the type, and
   function subtypes are not normally acceptable type specifiers to
   TYPEP.

   SBCL is, however, able to reason about such types, so we add an
   optional STRICT argument to %%TYPEP defaulting to T, which
   A-T-M-S-V give as NIL to allow checking of function subtypes.

   Reported by Lorenz Mösenlechner.

15 years ago1.0.28.2: fix bug 201, Incautious type inference from compound types
Nikodemus Siivola [Fri, 1 May 2009 10:35:43 +0000 (10:35 +0000)]
1.0.28.2: fix bug 201, Incautious type inference from compound types

 * Define LVAR-CONSERVATIVE-TYPE &co, which take into accound that a
   function call can change the type of a cons or a non-simple array
   without changing it's identity. Use this instead of LVAR-TYPE in
   derive-type optimizers for CAR and CDR, and in the ARRAY-DIMENSIONS
   transform. (There may be other places where it should be used as
   well, but I could not find anything else just now.)

15 years ago1.0.28.1: disable address space randomization on Linux/x86-64
Nikodemus Siivola [Fri, 1 May 2009 10:30:50 +0000 (10:30 +0000)]
1.0.28.1: disable address space randomization on Linux/x86-64

 * At least some Red Hat versions do randomization on x86-64 as well,
   whereas we used to assume only x86 had this "feature".

15 years ago1.0.28: release, will be tagged as sbcl_1_0_28
Christophe Rhodes [Thu, 30 Apr 2009 16:48:26 +0000 (16:48 +0000)]
1.0.28: release, will be tagged as sbcl_1_0_28

15 years ago1.0.27.49: update platform table, credit me
Gabor Melis [Thu, 30 Apr 2009 07:34:53 +0000 (07:34 +0000)]
1.0.27.49: update platform table, credit me

15 years ago1.0.27.48: Win32/Cygwin contrib build fix.
Alastair Bridgewater [Tue, 28 Apr 2009 16:02:13 +0000 (16:02 +0000)]
1.0.27.48: Win32/Cygwin contrib build fix.

  Recentish cygwin likes to have gcc as a symlink.  SBCL can't handle
that, so, for cygwin only, fully dereference gcc if it's a symlink when
building contribs.

15 years ago1.0.27.47: fix RUN-PROGRAM on windows
Gabor Melis [Mon, 27 Apr 2009 20:26:10 +0000 (20:26 +0000)]
1.0.27.47: fix RUN-PROGRAM on windows

Hopefully. There are mixed reports from users.

15 years ago1.0.27.46: Fix build on systems with "src" in the path.
Alastair Bridgewater [Sat, 25 Apr 2009 03:12:13 +0000 (03:12 +0000)]
1.0.27.46: Fix build on systems with "src" in the path.

  1.0.27.31 introduced an actual check that the path for all source
files is correctly externalized as an LPN at cold-init time.  Due to a
longstanding bug in MAKE-FILE-INFO-NAMESTRING, not fixed with
1.0.27.31, it is possible for the system to create a pathname such as
"SYS:SRC;LISP;SBCL;SBCL-GIT;OUTPUT;STUFF-GROVELED-FROM-HEADERS.LISP".
Once the SYS: logical pathname translations are set up, this path is
not valid, causing a build failure.  Fixed, at the cost of disallowing
paths in SYS:SRC that have a final directory of OUTPUT, not likely to
be an issue in practice.

15 years ago1.0.27.45: Fix the error signaled in bogus recursive READs.
Richard M Kreuter [Fri, 24 Apr 2009 19:49:15 +0000 (19:49 +0000)]
1.0.27.45: Fix the error signaled in bogus recursive READs.

* CHECK-FOR-RECURSIVE-READ signaled a READER-ERROR without supplying a
  stream initarg.

15 years ago1.0.27.44: genesis fixes
Christophe Rhodes [Fri, 24 Apr 2009 15:56:10 +0000 (15:56 +0000)]
1.0.27.44: genesis fixes

make genesis of identical fasls produce identical cold cores.

4 messages follow:

documentation handling

CLISP supports documentation for packages now, so remove the read-time
conditional.  However, don't try to use the documentation for the CL or
KEYWORD packages (as they come from the host directly)

LAYOUT clos hash values

Set them in cold-init using the target's RANDOM rather than in genesis
using the host's.

hash table traversal in genesis

MAPHASH will not give repeatable results in general, and certainly won't
between distinct implementations of hash tables.  Sort the contents of
hash tables according to a predicate which completely orders the
contents.  (This is mildly tricky for FDEFN names: we have to assume
that we are only dealing with names of the forms SYMBOL and (SETF
SYMBOL)).

give smallvecs an initial element

Whoops.  The smallvecs (representing the memory image of the core being
constructed) were being constructed without an initial-element.  For the
most part this wouldn't matter, because it will (almost) all be
overwritten by the genesis process itself.  The crux is in that
(almost), though; in some cases it matters, such as producing bogus
values for symbol tls slots.  Mostly implementations seem to zero-fill
newly-constructed (unsigned-byte 8) arrays, but there seem to be some
circumstances under which CLISP will produce one with random data in
it...

15 years ago1.0.27.43: constant coalescing agreement fixes
Christophe Rhodes [Fri, 24 Apr 2009 15:37:46 +0000 (15:37 +0000)]
1.0.27.43: constant coalescing agreement fixes

Constant coalescing decisions, legitimately differing between different
hosts, can if not very careful propagate into the target, often through
vop-parse structures.  Be explicit in which constants can be shared and
which shouldn't.

5 messages follow:

constant coalescing KLUDGE, part 1 [(any)]

The constant initforms for the vop-parse structure are evaluated on the
host; therefore, their coalescing is at the host's discretion.  This
wouldn't matter except that (why?) vop-parse structures get dumped
at each vop definition.  Make the coalescedness explicit.

constant coalescing KLUDGE, part 2: [(fixnumize n)]

The static function template for at least LENGTH (in subprim.lisp)
contains two instances of (FIXNUMIZE 2), which are coaelesced
differently on different host lisps.  We can KLUDGE around this problem
(and gain a millimetric amount of efficiency, too!) by evaluating the
FIXNUMIZE calls at expansion time.

remove confusing code structure sharing from DEF-MOVE-IF

I can't actually see exactly where the code structure sharing happens
nor why it causes xc fasl contents to differ between hosts, but since
it makes the code clearer to rewrite the macro...

fix two separate issues in compiler/globaldb

One is a hash-table traversal issue; the other is coalescing of
constants.  I *think* what's going on in the latter case is that there
are two separate ways that shared constants can happen.  One is in the
dumping of objects which are EQUAL, where the compiler can dump a
reference to a previous object instead; the other is the dumping of a
single object with circularities, where a nil is dumped along with a
later instruction to backpatch the circularity in.  We need to ensure a
deterministic cold-init-form, so that means we need to control the
coalescing in the _host_ compiler (because the cold-init-form is
generated from introspection), but of course we can't, so we COPY-TREE
instead, which will allow the xc to coalesce and will prevent the form
as compiled from sharing structure.

Static function template vop macro has a common subexpression, factored
out as new-ebp-ea.

15 years ago1.0.27.42: explicit determinism in the compiler
Christophe Rhodes [Fri, 24 Apr 2009 15:08:28 +0000 (15:08 +0000)]
1.0.27.42: explicit determinism in the compiler

2 messages follow:

stable-sort the time specifications

Dunno if this is actually necessary for anything.

make unpacking and repacking happen in a determined order

The unpacked blocks were stuffed into a hash table and then maphashed
over; as in other cases, this is host-dependent.  Use a list and pushnew
instead.