sbcl.git
12 years agoroom: KLUDGE-reduction.
Alastair Bridgewater [Tue, 25 Oct 2011 22:43:36 +0000 (18:43 -0400)]
room: KLUDGE-reduction.

  * Now that the thread structure doesn't have a lowtag, we can
remove the KLUDGE that prevented even FIXNUMs from being treated
as though they were thread-object-sized instead of a single word.

12 years agothreads: Thread objects don't need a lowtag.
Alastair Bridgewater [Tue, 25 Oct 2011 22:39:29 +0000 (18:39 -0400)]
threads: Thread objects don't need a lowtag.

  * It was a cute hack, in a way, to force the existing genesis
machinery to produce assembler symbols for thread structure slots.
But it's still a hack, and needs to die.  And now it can.

12 years agogenesis: Export assembly slot offsets for primitive-objects without lowtags.
Alastair Bridgewater [Tue, 25 Oct 2011 22:35:03 +0000 (18:35 -0400)]
genesis: Export assembly slot offsets for primitive-objects without lowtags.

  * If a primitive-object has no lowtag, export its slot offsets
to assembly language as if it had a lowtag of zero.

  * While we're here, use SYMBOL-VALUE instead of EVAL to find the
numeric value of a lowtag.

12 years agoFix MAYBE-WITH-PINNED-OBJECTS for PPC/GENCGC.
Alastair Bridgewater [Tue, 25 Oct 2011 20:43:13 +0000 (16:43 -0400)]
Fix MAYBE-WITH-PINNED-OBJECTS for PPC/GENCGC.

  * GENCGC has working WITH-PINNED-OBJECTS on all targets, not
just x86oids.  Not using it when necessary is bad, especially
since non-x86oids don't automatically pin references from the
control stack.  Fixed.

12 years agoFix unhandled error in float.pure.lisp on non-x86oids.
Alastair Bridgewater [Tue, 25 Oct 2011 14:25:25 +0000 (10:25 -0400)]
Fix unhandled error in float.pure.lisp on non-x86oids.

  * SB-VM::TOUCH-OBJECT doesn't exist on non-x86oids, and the
package is locked.  Disable reading of forms that refer to it
on non-x86oids.

12 years agoFix debug.impure.lisp / BUG-310175 for :stack-allocatable-lists targets.
Alastair Bridgewater [Tue, 25 Oct 2011 14:13:58 +0000 (10:13 -0400)]
Fix debug.impure.lisp / BUG-310175 for :stack-allocatable-lists targets.

  * Not all platforms stack-allocate.  Some platforms (PPC) stack-
allocate some things, but not most things.

  * PPC, in particular, stack allocates for LIST and LIST* (the
:stack-allocatable-lists feature), but doesn't stack allocate for
CONS.  And it turns out that the compiler transforms one-arg-LIST
and two-arg-LIST* to CONS.

  * Use two-arg-LIST to force the :stack-allocatable-lists code
path, and mark the test as failing on non-:stack-allocatable-lists
targets.

12 years agoFix fixnum and unsigned-fixnum array cleanups.
Alastair Bridgewater [Mon, 24 Oct 2011 22:02:50 +0000 (18:02 -0400)]
Fix fixnum and unsigned-fixnum array cleanups.

  * dd04bd449535e9016b5652a708a3cac2ca24c87d removes the specialized
array types with specific fixnum widths in favor of more generic
fixnum and unsigned-fixnum array types.

  * In SYS:SRC;CODE;ROOM.LISP, a mistake was made in converting over
to the newer representations, involving an alist of type tag names
to a constant related to the size of array elements.  The mistake
was even made inconsistently, so that neither 32-bit nor 64-bit
targets behaved correctly.

  * Fixed, to use sb!vm:word-shift instead of literal constants.

  * Original report and bisection by akovalenko on #sbcl.

12 years agoFix FP traps on OSX/x86.
Alastair Bridgewater [Mon, 24 Oct 2011 19:25:11 +0000 (15:25 -0400)]
Fix FP traps on OSX/x86.

  * De-cripple SB-INT:SET-FLOATING-POINT-MODES for this platform.

  * Enable restoring the FPU control word during interrupt handling
on this platform (RESTORE_FP_CONTROL_FROM_CONTEXT).

  * Implement restoring the FPU control word on this platform
(os_restore_fp_control).

  * Update :FAILS-ON information for the now-passing tests.

  * Update the commentary on test float.pure.lisp /
(ADDITION-OVERFLOW BUG-372) to more accurately reflect when it will
provide useful data (only when running float.pure.lisp separately).

12 years agoFix x86oid OSX signal handling emulation assembly fragments.
Alastair Bridgewater [Mon, 24 Oct 2011 18:30:32 +0000 (14:30 -0400)]
Fix x86oid OSX signal handling emulation assembly fragments.

  * Both x86 and x86-64 signal_emulation_wrapper include a small
assembly fragment to simulate "sigreturn" by means of an invalid
instruction trap.  This fragment has to load two different pointers
into specific registers before the trap, but historically just told
the compiler to load them into registers and then moved them into
the correct registers, leading to the possibility of clobbering one
of the values.  Fixed, by informing the compiler to place them into
the correct registers to begin with.

12 years agoFix FP traps on OSX/x86-64.
Alastair Bridgewater [Mon, 24 Oct 2011 02:36:24 +0000 (22:36 -0400)]
Fix FP traps on OSX/x86-64.

  * De-cripple SB-INT:SET-FLOATING-POINT-MODES for this platform.

  * Enable restoring the FPU control word during interrupt handling
on this platform (RESTORE_FP_CONTROL_FROM_CONTEXT).

  * Implement restoring the FPU control word on this platform
(os_restore_fp_control).

  * Update :FAILS-ON information for the now-passing tests.

  * Insert an addtional copy of test float.pure.lisp /
(ADDITION-OVERFLOW BUG-372) to detect failure to restore the FPU
control word in signal handling, with appropriate commentary.

12 years agoFix HEAD ref lookups, and compatibility for non-bash shells.
Jim Wise [Mon, 24 Oct 2011 13:38:25 +0000 (09:38 -0400)]
Fix HEAD ref lookups, and compatibility for non-bash shells.

12 years agoUpdate to work with non-bash versions of expr.
Jim Wise [Mon, 10 Oct 2011 14:17:08 +0000 (10:17 -0400)]
Update to work with non-bash versions of expr.

12 years agoClean up build process for cross-compiled targets.
Alastair Bridgewater [Sat, 22 Oct 2011 21:10:38 +0000 (17:10 -0400)]
Clean up build process for cross-compiled targets.

  * Over time, the process for producing an SBCL build for another
target architecture or OS has become more difficult and less
documented.

  * Move all make.sh argument processing to make-config.sh.

  * Have make-config.sh produce a file, output/build-config,
containing shell commands to set up important build parameters
such as where to find GNUMAKE, what SBCL_XC_HOST is, and so on.

  * Source output/build-config in most of the make*.sh scripts.

  * The practical upshot of all this is that a cross-compile
build is now a matter of alternating between target and host,
calling make-config.sh, make-host-1.sh, make-target-1.sh,
make-host-2.sh, make-target-2.sh, and following up with a
make-target-contrib.sh on the target, and you wind up with a
usable product.  And, as make-config.sh does all of the arg
parsing, you can pass --xc-host= or --dynamic-space-size= or
whatever and it all works out.

12 years agoUnwind-to-frame-and-call-VOP doesn't need static symbols.
Alastair Bridgewater [Thu, 24 Jun 2010 00:24:16 +0000 (20:24 -0400)]
Unwind-to-frame-and-call-VOP doesn't need static symbols.

  * The UNWIND procedure takes as parameters a target block and an
unknown-values start/count pair.  The old implementation was passing
the block, a zero count, and a garbage start.  Pass the function to
call as the start, instead of storing it as a static symbol value as
is done now or reserving an extra stack slot somewhere relative to
the unwind block.

  * Delete the static symbol formerly used for this.

  * This has been done for both x86 and x86-64.

12 years agoFix a long-standing bug in (PRIMITIVE-TYPE [MEMBER type])
Paul Khuong [Sat, 22 Oct 2011 01:38:00 +0000 (21:38 -0400)]
Fix a long-standing bug in (PRIMITIVE-TYPE [MEMBER type])

 A refactoring in 1.0.12.18 resulted in overly-optimistic primitive
 type.

 Reported by Eric Marsden on sbcl-devel.

12 years agoFix another assumption w.r.t fixnum width and n-lowtag-bits
Paul Khuong [Sat, 22 Oct 2011 01:02:17 +0000 (21:02 -0400)]
Fix another assumption w.r.t fixnum width and n-lowtag-bits

 This time in LOGBITP.

 Reported by Eric Marsden on sbcl-devel.

12 years agodescribe: Better description for complex setf-expanders.
Alastair Bridgewater [Fri, 1 Apr 2011 01:02:22 +0000 (21:02 -0400)]
describe: Better description for complex setf-expanders.

  * Rather than simply reporting the documentation string (if any), also
report the lambda-list of the expansion function and the associated
source location.

12 years agosetf: Record the original lambda-list for complex setf-expander functions.
Alastair Bridgewater [Fri, 1 Apr 2011 00:58:14 +0000 (20:58 -0400)]
setf: Record the original lambda-list for complex setf-expander functions.

  * Added an extra parameter to ASSIGN-SETF-MACRO for the lambda-list.

  * In ASSIGN-SETF-MACRO, when working with an EXPANDER (as opposed to
an INVERSE), set the %FUN-LAMBDA-LIST of the EXPANDER to the value
passed as the new parameter.

  * In all call sites for ASSIGN-SETF-MACRO (two uses in DEFSETF, one in
DEFINE-SETF-EXPANDER), pass the new lambda-list parameter appropriately.

12 years agosetf: excise GET-SETF-METHOD and related detritus.
Alastair Bridgewater [Thu, 31 Mar 2011 20:07:19 +0000 (16:07 -0400)]
setf: excise GET-SETF-METHOD and related detritus.

  * GET-SETF-METHOD is the CLtL1 version of GET-SETF-EXPANSION, and is
neither used in SBCL nor exported from any package.  Kill it.

  * Also kill the DEFKNOWN in the compiler for a (different)
GET-SETF-METHOD and GET-SETF-METHOD-MULTIPLE-VALUE (also a CLtL1
function, neither used nor implemented in SBCL).

12 years agosetf: pre-defined setf-expanders should handle multiple value places gracefully.
Alastair Bridgewater [Thu, 31 Mar 2011 20:00:48 +0000 (16:00 -0400)]
setf: pre-defined setf-expanders should handle multiple value places gracefully.

  * The GETF, LOGBITP, LDB and MASK-FIELD setf-expanders all take a
PLACE argument, the setf-expansion for which was being obtained via
GET-SETF-METHOD, which is the CLtL1 version of GET-SETF-EXPANSION, but
throws an error if a PLACE multiple values.  This also pre-dates the
adoption of VALUES places.

  * The most reasonable interpretation of the spec appears to be that
any values after the first are to be ignored upon reading and set to NIL
upon writing.

  * To do so, change each use to SB!XC:GET-SETF-EXPANSION instead of
GET-SETF-METHOD, and bind any symbols in the list of new value locations
to NIL before invoking the setter form.

12 years agosetf: read-modify-write macros should deal with multi-value places gracefully.
Alastair Bridgewater [Thu, 31 Mar 2011 19:33:40 +0000 (15:33 -0400)]
setf: read-modify-write macros should deal with multi-value places gracefully.

  * In PUSH, PUSHNEW, POP, REMF, INCF, DECF and DEFINE-MODIFY-MACRO the
setf-expansion was being obtained via GET-SETF-METHOD, which is the
CLtL1 version of GET-SETF-EXPANSION, but throws an error if a PLACE has
multiple values.  This also pre-dates the adoption of VALUES places.

  * The most reasonable interpretation of the spec appears to be that
any values after the first are to be ignored upon reading and set to NIL
upon writing.

  * To do so, change each use to SB!XC:GET-SETF-EXPANSION instead
of GET-SETF-METHOD, and bind any symbols in the list of new value
locations to NIL before invoking the setter form.

12 years agosetf: Don't use DO to "zip up" temporaries in read-modify-write macros.
Alastair Bridgewater [Thu, 31 Mar 2011 19:28:48 +0000 (15:28 -0400)]
setf: Don't use DO to "zip up" temporaries in read-modify-write macros.

  * Alter POP, REMF and DEFINE-MODIFY-MACRO to use (MAPCAR #'LIST
DUMMIES VALS) when building LET*-bindings instead of some crazy DO loop
involving PUSH and NREVERSE.

  * While we're here, introduce a new temporary in POP rather than
destructively modify a binding.

12 years agoFix build on x86-64/darwin.
Alastair Bridgewater [Fri, 21 Oct 2011 16:06:01 +0000 (12:06 -0400)]
Fix build on x86-64/darwin.

  * It turns out that darwin preprocesses assembly files slightly
differently from every other platform.  Possibly something related
to the rather VMSish -fdollars-in-identifiers option to gcc.

  * Use parens to break the preprocessor "macro" we're trying to
use away from the dollar-sign literal-constant marker it's getting
merged with.

  * Reported by nikodemus in #sbcl.

12 years agoMore unboxed-byte-addresses-are-word-addresses damage.
Alastair Bridgewater [Sun, 9 Oct 2011 21:06:28 +0000 (17:06 -0400)]
More unboxed-byte-addresses-are-word-addresses damage.

  * In the binding stack tests, the binding stack pointer is altered
by adding two to SB-VM::*BINDING-STACK-POINTER*.  This "works" when
n-fixnum-tag-bits is equal to word-shift, but is badly wrong when
they differ.

  * Fixed by adding a variable to hold the actual delta required,
based on the difference between n-fixnum-tag-bits and word-shift.

  * Incidentally, how on earth does this test work on threaded PPC?
PPC has the BSP in a register, not a variable, and there are no
memory barriers around the synchronization for GCs.  How does the
(incf sb-vm::*binding-stack-pointer*) not die from an unbound
symbol?  And, really, it looks like it doesn't matter if a thread
dies or lands in the debugger: If the process doesn't die screaming,
the test always passes, even if it only does a single GC.

  * And, while we're on the topic, how on earth does this test work
on x86?  The memory-barrier argument should apply there as well.
Wait, I know!  The CPU still gets timer interrupts, and the kernel
effectively provides a barrier then.  And the "it doesn't matter"
argument also applies here: If it doesn't deadlock the system
completely, the main thread will kill everything off and call it a
success after four seconds anyway.

12 years ago63-bit fixnums on 64-bit targets.
Alastair Bridgewater [Sun, 14 Feb 2010 15:56:01 +0000 (10:56 -0500)]
63-bit fixnums on 64-bit targets.

  * This is mostly just a matter of spreading the PADn lowtags around,
one or two cases of adjusting a constant, and some KLUDGEing around in
the runtime to make everything work for 1 <= n-fixnum-tag-bits <= 3.

  * Yes, this means that you can change n-fixnum-tag-bits before
building in order to return to a 61-bit fixnum world.  Or you can have
62-bit fixnums if you want.

12 years agoReorder 64-bit lowtags.
Alastair Bridgewater [Mon, 30 Nov 2009 23:09:03 +0000 (18:09 -0500)]
Reorder 64-bit lowtags.

  * Move 64-bit lowtags around so that all non-fixnum tags have the low
bit set.

  * Fix up print_obj() to compensate for the layout change.

  * Fix up is_lisp_pointer() to compensate for the layout change.

  * Change other_immediate_lowtag_p() to take advantage of the
distribution of other-immediate lowtags.

12 years agox86-64 disentwingling of fixnums and words.
Alastair Bridgewater [Wed, 2 Dec 2009 22:18:55 +0000 (17:18 -0500)]
x86-64 disentwingling of fixnums and words.

  * This is mostly constant fixups and supplying scaling factors in
places.

  * Where possible, I have used constructs that will simply generate the
correct code no matter what the width of a fixnum is.  In other places,
I have used an explicit check for the historic case and provided and
alternate code sequence for when it no longer applies.

  * Thanks to Paul Khuong for helping with the finding and fixing of
many of these places.

12 years agoGeneral disentwingling of fixnums and words.
Alastair Bridgewater [Sun, 14 Feb 2010 16:30:50 +0000 (11:30 -0500)]
General disentwingling of fixnums and words.

  * Historically, n-fixnum-tag-bits has been equal to word-shift and has
been (1- n-lowtag-bits).  This led to implementors using constants and
calculations which happened to be right by coincidence rather than by
design.

  * Fix all places not part of the support for a particular backend to
use the defined-correct constants and calculations for the operations
being performed.

  * Thanks to Paul Khuong for helping with the finding and fixing of
many of these coincidences.

12 years agoImprove some test cases for fixnum-width independence
Alastair Bridgewater [Mon, 28 Dec 2009 16:40:24 +0000 (11:40 -0500)]
Improve some test cases for fixnum-width independence

  * In arith.pure.lisp, some test cases were defined in terms of
n-lowtag-bits instead of n-fixnum-tag-bits.

  * In sb-aclrepl, the bignum used for testing fit within an
(signed-byte 63), the largest possible fixnum type on a 64-bit system.

  * Thanks to Paul Khuong for finding and fixing the arith.pure.lisp
tests.

12 years agoFixnum and unsigned-fixnum array cleanups.
Alastair Bridgewater [Sat, 20 Feb 2010 23:43:13 +0000 (18:43 -0500)]
Fixnum and unsigned-fixnum array cleanups.

  * Rename {arraytype}-{elementtype1} to {arraytype}-{elementtype2} for
{arraytype} in (SIMPLE-ARRAY VECTOR), {elementtype1} in
(UNSIGNED-BYTE-29 UNSIGNED-BYTE-60 SIGNED-BYTE-30 SIGNED-BYTE-61) and
{elementtype2} in (UNSIGNED-FIXNUM SIGNED-FIXNUM) across the board
(predicates, tag names, etc.).

  * Cleanup of related conditional compilation.

  * Export n-fixnum-bits (the remaining fixnum representation constant)
from sb!vm instead of having it as an internal symbol of sb!pcl.

  * Original patch by Paul Khuong.

12 years agoChange x86oid modular arithmetic to work if fixnum width changes.
Alastair Bridgewater [Sun, 27 Dec 2009 16:53:45 +0000 (11:53 -0500)]
Change x86oid modular arithmetic to work if fixnum width changes.

  * This is largely (signed-byte {30,61}) => fixnum and smod{30,61} =>
modfx.

  * Thanks to Paul Khuong for the initial patch.

12 years agoFix definition of most-FOOative-fixnum.
Alastair Bridgewater [Sun, 14 Feb 2010 21:29:08 +0000 (16:29 -0500)]
Fix definition of most-FOOative-fixnum.

  * Define in terms of n-positive-fixnum-bits, not some relation between
n-word-bits and n-lowtag-bits.

12 years agoIntroduce sb!vm::fixnum-lowtags
Alastair Bridgewater [Sun, 14 Feb 2010 15:39:18 +0000 (10:39 -0500)]
Introduce sb!vm::fixnum-lowtags

  * This is defined as a list of the exported SB!VM -LOWTAG symbols
bound to integers that are zero when masked with fixnum-tag-mask (in
short, the names of the fixnum lowtags).

  * Replace all direct references to the fixnum lowtags with something
based on fixnum-lowtags.

  * Introduce the corresponding change to genesis, with the predicate
is-fixnum-lowtag instead of testing against specific lowtags.

  * Introduce the corresponding change to the runtime, making fixnump()
check against fixnum-tag-mask instead of comparing individual fixnum
tags.

  * And, while we're redefining fixnump() in terms of the significant
part of the lowtag, do the same with other_immediate_lowtag_p().

12 years agoClean up all use of the *-space-free-pointers.
Alastair Bridgewater [Wed, 23 Dec 2009 13:35:11 +0000 (08:35 -0500)]
Clean up all use of the *-space-free-pointers.

  * These are symbols whose value slots contain unboxed word-aligned
byte pointers.  Thus, they appear to lisp as fixnums.  They are not,
however, guaranteed to be word pointers.

  * Shift by n-fixnum-tag-bits instead of shifting by word-shift or
scaling by n-word-bytes in order to obtain byte pointers.

12 years agoRedefine symbol TLS slot indices.
Alastair Bridgewater [Mon, 28 Dec 2009 21:31:02 +0000 (16:31 -0500)]
Redefine symbol TLS slot indices.

  * Instead of having symbol TLS slots be fixnum indices treat them as
byte offsets from the base of the thread structure.

  * This has no effect on the compiler or backends.

  * TLS slot allocation must now be done in terms of words, not fixnums.

  * In %{set-,}symbol-value-in-thread, use get-lisp-obj-address instead
of scaling the TLS index.

  * Use explicit WORD_SHIFT instead of make_fixnum() / fixnum_value() in
the runtime.

12 years agoImproved GC lossage
Alastair Bridgewater [Sat, 20 Feb 2010 23:40:50 +0000 (18:40 -0500)]
Improved GC lossage

  * Change size_lose() and scav_lose() to indicate the widetag of the
header of the losing object rather than of the pointer to the losing
object.

  * Patch from Paul Khuong.

12 years ago(format t "a~0&b") shouldn't print any newlines.
Stas Boukarev [Tue, 11 Oct 2011 20:20:31 +0000 (00:20 +0400)]
(format t "a~0&b") shouldn't print any newlines.

Fixes lp#867684.

12 years ago1.0.52: will be tagged as "sbcl-1.0.52"
Juho Snellman [Sun, 9 Oct 2011 02:21:04 +0000 (04:21 +0200)]
1.0.52: will be tagged as "sbcl-1.0.52"

12 years agoSleep is apparently still consing on 32-bit platforms, mark test as failing
Juho Snellman [Sun, 9 Oct 2011 01:17:31 +0000 (03:17 +0200)]
Sleep is apparently still consing on 32-bit platforms, mark test as failing

12 years agoRemove the invalid :sleep-many-interrupts test
Juho Snellman [Sun, 9 Oct 2011 01:12:46 +0000 (03:12 +0200)]
Remove the invalid :sleep-many-interrupts test

12 years agoreally fix float rounding on 32-bit platforms
Christophe Rhodes [Fri, 7 Oct 2011 11:39:33 +0000 (12:39 +0100)]
really fix float rounding on 32-bit platforms

Now, as well as not giving completely the wrong answer for most
larger-than-fixnum double floats, we additionally don't try to perform
arithmetic on NIL for larger-than-fixnum single-floats.

12 years agofix run-program misaligned access
Anton Kovalenko [Fri, 30 Sep 2011 10:06:04 +0000 (14:06 +0400)]
fix run-program misaligned access

Thanks to Antoni Grzymala for the report.

12 years agoFix the build on Windows
David Lichteblau [Fri, 30 Sep 2011 08:09:08 +0000 (10:09 +0200)]
Fix the build on Windows

12 years agoIgnore a known failure in script.test.sh on Darwin
David Lichteblau [Thu, 29 Sep 2011 22:40:02 +0000 (00:40 +0200)]
Ignore a known failure in script.test.sh on Darwin

script.test.sh includes a test case that fails on Darwin because of
a bug in SBCL.  However, this is the first release to run this test at
all.  Lacking a proper mechanism to mark the test case as a known
failure on Darwin, skip it entirely on that platform for now.

Thanks to Fare for testing.

12 years agoProbably fix compile on win32 (no sys/mman.h).
Juho Snellman [Thu, 29 Sep 2011 09:06:48 +0000 (11:06 +0200)]
Probably fix compile on win32 (no sys/mman.h).

12 years agoSilence a warning about assignment in conditional
Juho Snellman [Thu, 29 Sep 2011 09:05:06 +0000 (11:05 +0200)]
Silence a warning about assignment in conditional

12 years agoOne missed contrib subdir.
Jim Wise [Fri, 23 Sep 2011 17:54:53 +0000 (13:54 -0400)]
One missed contrib subdir.

12 years agohandle non-standard slot allocations when updating classes
Nikodemus Siivola [Tue, 20 Sep 2011 12:39:18 +0000 (15:39 +0300)]
handle non-standard slot allocations when updating classes

 * Refactor layout comparison to work on the effective slot definition list(s)
   directly -- easier to understand.

 * When new slots with custom allocation are added, add their names to the
   "added" list for UPDATE-INSTANCE-FOR-REDEFINED-CLASS. This is not specified
   by ANSI, but unless we do this those slots don't get initialized.

   Removing custom slots is hairier, as is changing a custom slot into
   a normal slot. Add some tests that poke in this area as well...

 * Replace wrapper-instance-slot-layout and wrapper-class-slots with the
   CLASS-SLOTS lists -- saves space and makes things easier to understand.

   Has a small performance cost for updating instances and SLOT-MISSING. Will
   refactor again if this is critical in the real world.

12 years agocleanup DESCRIBE of symbols naming type specifiers a bit
Christophe Rhodes [Thu, 8 Sep 2011 16:22:53 +0000 (17:22 +0100)]
cleanup DESCRIBE of symbols naming type specifiers a bit

Firstly, don't indent the "... names a type specifier".  But then
wander around in confusion for a while trying to debug where the extra
indentation comes from, before working out that the pprint-newline at
the end of describe-class introduces indentation as well as a newline,
causing the subsequent logical block to be opened at an unexpected
horizontal position.  Fix fix fix.

12 years agoFix (run-program) to cleanup fd handlers
Max Mikhanosha [Sat, 3 Sep 2011 18:38:26 +0000 (14:38 -0400)]
Fix (run-program) to cleanup fd handlers

Signed-off-by: Christophe Rhodes <csr21@cantab.net>

12 years agonews item for float rounding
Christophe Rhodes [Mon, 5 Sep 2011 11:04:50 +0000 (12:04 +0100)]
news item for float rounding

12 years agofix rounding of floats big enough to be bignums
Christophe Rhodes [Sun, 4 Sep 2011 19:27:17 +0000 (20:27 +0100)]
fix rounding of floats big enough to be bignums

Wow, so broken: the attempt to confuse while pretending to do
round-to-even goes back decades to original CMUCL sources.  Rewrite
the bignum branch with a more careful and clear version that is obviously
correct.

Optimizers might want to elide some of the computation on appropriate
platforms: on 32-bit platforms, all single floats outside the fixnum
range are integral, while on 64-bit platforms all single and double floats
outside the fixnum range are integral.  (This could be implemented by
comparing most-fooative-fixnum with fooble-float-significand-byte)

12 years agoremove myself as a provider of official support
Christophe Rhodes [Sun, 4 Sep 2011 18:50:26 +0000 (19:50 +0100)]
remove myself as a provider of official support

12 years agoFix I/O redirection of script.test.sh
David Lichteblau [Fri, 2 Sep 2011 19:30:25 +0000 (21:30 +0200)]
Fix I/O redirection of script.test.sh

With this fix, "run-tests.sh | tee" passes again on Linux.
Thanks to Fare Rideau for the report.

12 years agoBring OPTIMIZATIONS up to date
Paul Khuong [Wed, 31 Aug 2011 13:05:16 +0000 (09:05 -0400)]
Bring OPTIMIZATIONS up to date

 Some of these things were implemented months or a few years ago.

 Also, fix the header for NEWS.

12 years agoMicrooptimization for code size in floating point comparisons on x86-64
Lutz Euler [Tue, 30 Aug 2011 22:41:38 +0000 (18:41 -0400)]
Microoptimization for code size in floating point comparisons on x86-64

This affects EQL on real and complex floats and "=" on floats when at
least one of the two arguments is complex.

Use a 32-bit register as the destination of the MOVMSKP[SD] and the
source of the integer comparison instead of a 64-bit one. This doesn't
change the semantics but makes both instruction's encodings shorter.
If the register is EAX do the comparison on AL as this additionally
shortens the encoding.

Before:

  660F76C1         PCMPEQD XMM0, XMM1
  480F50C0         MOVMSKPS RAX, XMM0
  4883F80F         CMP RAX, 15

After:

  660F76C1         PCMPEQD XMM0, XMM1
  0F50C0           MOVMSKPS EAX, XMM0
  3C0F             CMP AL, 15

12 years agoSmall cleanup to DEFINE-BYTE-BASHERS
Lutz Euler [Tue, 30 Aug 2011 22:40:10 +0000 (18:40 -0400)]
Small cleanup to DEFINE-BYTE-BASHERS

Remove an unneeded SETF of the result of an INCF in a copy loop.
At least on x86[-64] this shortens the generated code in the byte
basher functions by removing a redundant move instruction.

12 years agoMore complete disassembly for XADD and CMPXCHG on x86-64
Paul Khuong [Mon, 29 Aug 2011 05:12:55 +0000 (01:12 -0400)]
More complete disassembly for XADD and CMPXCHG on x86-64

 The new patterns correctly handle REX bytes and operand size override
 bytes (#x66).

12 years agoClean up some SSE instruction format definitions on x86-64
Lutz Euler [Mon, 15 Aug 2011 19:28:03 +0000 (21:28 +0200)]
Clean up some SSE instruction format definitions on x86-64

Remove the instruction formats for some SSE instructions with 8 bit
immediate data, instead make some other formats optionally have an
immediate field.

This makes it necessary to move the default printer definition for
these formats into the SSE shuffle instructions. They were the only
users of these formats that didn't have a printer defined anyway.

12 years agoMore readable disassembler output for SSE shuffle instructions on x86-64
Lutz Euler [Mon, 15 Aug 2011 19:23:28 +0000 (21:23 +0200)]
More readable disassembler output for SSE shuffle instructions on x86-64

Output the immediate byte that contains the shuffle pattern in binary
or quaternary as appropriate with a suitable number of leading zeros.

For the shuffle instructions that use only part of the immediate byte
the assembler asserts that the rest is zero to help catch potential
wrong uses of these instructions.

12 years agoCleanup SSE instruction printers on x86-64
Lutz Euler [Mon, 15 Aug 2011 19:06:46 +0000 (21:06 +0200)]
Cleanup SSE instruction printers on x86-64

Use SSE-INST-PRINTER-LIST in all SSE instruction definitions to reduce
copy and paste programming. Reformat some overly long lines.

12 years agoUpdate the library list on x86/darwin as well when zlib is enabled
Paul Khuong [Sun, 28 Aug 2011 06:56:40 +0000 (02:56 -0400)]
Update the library list on x86/darwin as well when zlib is enabled

12 years agoFix the build on some XCode/OS X version combo by forcing CC=gcc
Paul Khuong [Sun, 28 Aug 2011 03:55:00 +0000 (23:55 -0400)]
Fix the build on some XCode/OS X version combo by forcing CC=gcc

 It was already the case for x86-darwin.

12 years agoOptionally mark pages from cores as de-duplicatable
Paul Khuong [Sun, 28 Aug 2011 03:24:14 +0000 (23:24 -0400)]
Optionally mark pages from cores as de-duplicatable

 Linux supports optimistic virtual-memory-level de-duplication for
 identical pages.  By default, only enable this for compressed cores.
 Runtime options --[no-]merge-core-pages can be used to override the
 default.

 Very much experimental and a hack, but compressed cores would sometimes
 be gratuitously inefficient otherwise.  If/when support is generalized
 to more OSes, figure out how to do this right.

 Thanks to David Lichteblau for the idea.

12 years agoOptional support for zlib-based in-memory deflate/inflate for core files
Paul Khuong [Sun, 28 Aug 2011 03:23:03 +0000 (23:23 -0400)]
Optional support for zlib-based in-memory deflate/inflate for core files

 * As this is based on zlib, only add the dependency when
   :SB-CORE-COMPRESSION is enabled as a build-time feature.  On x86-64,
   compressed cores take about 1/4 the space, but start up in a few
   tenths of a second.

   Unlike gzexe'd executables, compressed images work without writing
   to /tmp.

   If :SB-CORE-COMPRESSION is enabled, trigger compression with the
   :COMPRESSION argument to SAVE-LISP-AND-DIE.

 * Also add a NEWS entry for the literal complex-single-float bugfix

12 years agoAllow use of the --core option with embedded core files
David Lichteblau [Thu, 25 Aug 2011 18:35:34 +0000 (20:35 +0200)]
Allow use of the --core option with embedded core files

Thanks to Anton Kovalenko for implementation suggestions.

12 years agotest for multiply-interrupted sleeps
Nikodemus Siivola [Wed, 24 Aug 2011 12:35:36 +0000 (15:35 +0300)]
test for multiply-interrupted sleeps

  Make sure the time take by the interrupt is tallied
  correctly.

12 years agobe more careful about ,@<constant-atom> and ,.<constant-atom>
Nikodemus Siivola [Wed, 24 Aug 2011 11:52:38 +0000 (14:52 +0300)]
be more careful about ,@<constant-atom> and ,.<constant-atom>

  Specifically, signal a read-time error for those things which COMMA
  special-cases when constructing a splice.

  Fixes lp#770184.

12 years agobetter errors for `(foo ,)
Nikodemus Siivola [Wed, 24 Aug 2011 11:49:09 +0000 (14:49 +0300)]
better errors for `(foo ,)

  Report the trailing comma instead of an unmatched parenthesis.

12 years agoprettier reporting for SIMPLE-READER-ERRORs
Nikodemus Siivola [Wed, 24 Aug 2011 11:33:19 +0000 (14:33 +0300)]
prettier reporting for SIMPLE-READER-ERRORs

  Make the actual error message more prominent,
  and the location information easier to read.

  Also fixes an off-by-one in the location.

12 years agoCreate a dummy test-status.lisp-expr when running shell tests.
Joshua Elsasser [Wed, 24 Aug 2011 04:31:07 +0000 (21:31 -0700)]
Create a dummy test-status.lisp-expr when running shell tests.

The test-status.lisp-expr file isn't used for shell tests, but the
impure runner doesn't know that and tries to read it
anyway. Initialize the file before running shell tests to avoid
reporting failures from the last test run, or failing entirely if it
doesn't exist.

12 years agoEnsure correct alignment for complex single-float literals
Paul Khuong [Tue, 23 Aug 2011 18:57:06 +0000 (14:57 -0400)]
Ensure correct alignment for complex single-float literals

 Only an issue on x86-64: literal complex single-float values used
 directly as operands to SIMD instructions were not correctly aligned
 and extended.  Completion typo fixed.

 Test added.

 Remove misleading comments in negate/conjugate/abs float VOPs while
 we're at it.

 Reported by Eric Marsden on sbcl-devel.

 Fixes lp#832005.

12 years agoFix a typo in NANOSLEEP
Paul Khuong [Tue, 23 Aug 2011 18:49:32 +0000 (14:49 -0400)]
Fix a typo in NANOSLEEP

 Missing pluralization in the #!+darwin code path.

12 years agodisable unsychronized-hash-table test for now
Nikodemus Siivola [Tue, 23 Aug 2011 17:16:50 +0000 (20:16 +0300)]
disable unsychronized-hash-table test for now

  Intermittently causing my laptop to swap instead of terminating with
  an error.

12 years agooptimize pretty-printing strings and bit-vectors
Nikodemus Siivola [Tue, 23 Aug 2011 17:01:37 +0000 (20:01 +0300)]
optimize pretty-printing strings and bit-vectors

  Since strings and bit-vectors use the ugly output in any case,
  exlude them from using PPRINT-ARRAY -- so we don't need to cons up a
  pretty stream when printing strings while *PRINT-PRETTY* is true.

12 years agooops, fix recent NANOSLEEP change
Nikodemus Siivola [Mon, 22 Aug 2011 14:46:20 +0000 (17:46 +0300)]
oops, fix recent NANOSLEEP change

  If the sleep gets interrupted multiple times on Darwin:
  update SECS and NSECS each round.

12 years agoNEWS for 5 last commits
Nikodemus Siivola [Mon, 22 Aug 2011 11:08:30 +0000 (14:08 +0300)]
NEWS for 5 last commits

12 years agoupdate to ASDF 2.017
Nikodemus Siivola [Mon, 22 Aug 2011 10:30:17 +0000 (13:30 +0300)]
update to ASDF 2.017

12 years agoignore non-function FTYPEs
Nikodemus Siivola [Wed, 17 Aug 2011 09:28:29 +0000 (12:28 +0300)]
ignore non-function FTYPEs

  Fixes lp#738464.

  Give a style-warning and ignore the bad type.

12 years agonon-consing NANOSLEEP
Nikodemus Siivola [Tue, 16 Aug 2011 17:58:41 +0000 (20:58 +0300)]
non-consing NANOSLEEP

  ...and hence SLEEP as well.

12 years agoextend ARRAY-TYPE-UPGRADED-ELEMENT-TYPE to work with member types
Nikodemus Siivola [Tue, 16 Aug 2011 11:26:28 +0000 (14:26 +0300)]
extend ARRAY-TYPE-UPGRADED-ELEMENT-TYPE to work with member types

 Fixes lp#826971.

12 years agouse WEAKEN-INTEGER-TYPE in ARRAY-IN-BOUNDS-P
Nikodemus Siivola [Mon, 15 Aug 2011 21:21:54 +0000 (00:21 +0300)]
use WEAKEN-INTEGER-TYPE in ARRAY-IN-BOUNDS-P

  The type of the bound might be a union-type. WEAKEN-INTEGER-TYPE
  gives us the ends of a range.

  lp#826970

12 years ago1.0.51: will be tagged as "sbcl-1.0.51"
Juho Snellman [Sat, 20 Aug 2011 23:15:10 +0000 (01:15 +0200)]
1.0.51: will be tagged as "sbcl-1.0.51"

12 years agofix bogus deadlocks from interrupts and GCs
Nikodemus Siivola [Mon, 15 Aug 2011 11:33:49 +0000 (14:33 +0300)]
fix bogus deadlocks from interrupts and GCs

 lp#807475

 Going in despite the freeze since this is a regression that can
 semi-randomly break correct code. *ouch*

 Thanks to Bart Bortta and #sbcl for the analysis.

 Problem 1:

   T1 holds L1

   T2 is waiting for L1

   T2 is interrupted, interrupt handler grabs L2

   T1 starts waiting on L2

   Prior to this patch, when GET-MUTEX in T2's interrupt handler grabbed
   L2 is marked T2 as still waiting for L1 -- which is not true until
   the interrupt handler returns.

 Problem 2:

   T1 holds L1

   T2 is waiting for L1

   GC is triggered in T2 inside GET-MUTEX

   T2 grabs *ALREADY-IN-GC* lock

   GC is triggered in T1, T1 tries to get *ALREADY-IN-GC* lock.

   Prior to this patch, when T1 detects a bogus deadlock as T2 has
   been marked as waiting for L1 -- which is not true until the GC is
   finished and normal execution resumes.

 Problem 3:

   T1 holds L1

   T2 is waiting for L1

   GC is triggered in T2 inside GET-MUTEX

   T2 grabs lock L2 due to a finalizer or an after-gc-hook

   GC is triggered in T1

   T1 tries to grab L2 due to a finalizer, etc.

   Same as problem 2, but with a user-lock and POST-GC instead of
   *ALREADY-IN-GC* and SUB-GC.

 This patch fixes the issue by saving, clearing, and restoring
 the waiting-for mark in

  1) interrupt handlers

  2) SUB-GC

  3) POST-GC

12 years agoFix automatic &rest to &more conversion in unsafe code
Paul Khuong [Sun, 14 Aug 2011 23:27:42 +0000 (19:27 -0400)]
Fix automatic &rest to &more conversion in unsafe code

 Applying &rest lists to known/typed functions can lead to a
 :fixed values call to %more-arg-values.  In that case, unroll
 it into several %more-arg of constant indices.

 Reported, with test case, by Lutz Euler (lp#826459).

12 years agoNew function: SB-EXT:SPIN-LOOP-HINT
Paul Khuong [Sun, 14 Aug 2011 22:31:52 +0000 (18:31 -0400)]
New function: SB-EXT:SPIN-LOOP-HINT

 Some architectures have developed ways to help the processor execute
 spin loops efficiently; expose them, where applicable, via
 SB-EXT:SPIN-LOOP-HINT.

 Assembles to PAUSE on x86oids, and to nothing on other platforms.

12 years agoMissing NEWS entry for 4e431db
Paul Khuong [Sun, 14 Aug 2011 21:32:27 +0000 (17:32 -0400)]
Missing NEWS entry for 4e431db

 Also, missing credit for Lutz Euler's bug report on a7b24b5.

12 years agoHandle SIMPLE-TYPE-ERROR when propagating bounds
Paul Khuong [Sun, 14 Aug 2011 21:28:22 +0000 (17:28 -0400)]
Handle SIMPLE-TYPE-ERROR when propagating bounds

 Type conversions (e.g. bignum to float) may signal a
 SIMPLE-TYPE-ERROR rather than returning an infinity.
 Treat that case like an unknown value.

 Add two tests.

 Fixes lp#819269.

12 years agoNew function: SB!KERNEL:%MULTIPLY-HIGH
Paul Khuong [Sun, 14 Aug 2011 20:49:27 +0000 (16:49 -0400)]
New function: SB!KERNEL:%MULTIPLY-HIGH

 * Does the same thing as only returning the first value of %MULTIPLY,
   only better on some platforms.

 * Implemented vas VOPs on x86, x86-64 and PPC.  The PPC code sequence
   is fully untested, and merely looks correct.

 * VOPs for fixnum first argument are included, but will only be used
   when the result is forcibly marked as fixnum, e.g., with TRULY-THE.
   Questionnable, but I'd rather err on the side of straightforwardness
   rather than put even more pressure on representation selection.

 * Use it in the division-by-multiplication transform for unsigned
   TRUNCATE by constant.

12 years agoMore efficient integer division by multiplication
Paul Khuong [Sun, 14 Aug 2011 20:46:01 +0000 (16:46 -0400)]
More efficient integer division by multiplication

 * Exploit restricted range for inputs (e.g. fixnums).

 * When the divisor is even, simplify with a mask instead of a shift.

 * Clean up the code a bit: we don't want modular arithmetic, it's
   actually all guaranteed not to wrap around.

 * Change the test so that larger divisors are a bit more likely to
   get tested too.

 * Lots more things can be done, including generalizing the transform
   to pretty much arbitrary rational divisor, or avoiding the costly
   general code sequence in nearly all cases.  Unfortunately, it's a
   lot of (somewhat original, at that) code, and can be fairly slow;
   if it matters to someone, I can try and find a compromise (contrib?).

12 years agoVarious (mostly) SSE x86-64 instruction definition fixes and additions
Paul Khuong [Sun, 14 Aug 2011 17:34:13 +0000 (13:34 -0400)]
Various (mostly) SSE x86-64 instruction definition fixes and additions

 * Fix typos in mnemonics and non-temporal store definitions;
 * Add some instructions;
 * CLFLUSH was totally broken.

Taken from Alexander Gavrilov's SSE intrinsics branch.

12 years agofix DESCRIBE on compiled closures from EVAL
Nikodemus Siivola [Sat, 13 Aug 2011 11:31:17 +0000 (14:31 +0300)]
fix DESCRIBE on compiled closures from EVAL

 lp#824974

12 years agoallow user-defined STRING synonyms in MAKE-SEQUENCE
Christophe Rhodes [Fri, 12 Aug 2011 12:57:51 +0000 (13:57 +0100)]
allow user-defined STRING synonyms in MAKE-SEQUENCE

...and MAP, MERGE, COERCE and CONCATENATE too.  This also meant
working a bit on TYPEXPAND, to make (STRING <N>) be unexpanded in the
same way as STRING, and consequently on VALUES-SPECIFIER-TYPE to
ensure that the system would still recognize those types.

Include test cases for the sequence functions but not for TYPEXPAND.

12 years agoDeclaim sb-di::valid-lisp-pointer-p inline.
Stas Boukarev [Thu, 11 Aug 2011 23:21:23 +0000 (03:21 +0400)]
Declaim sb-di::valid-lisp-pointer-p inline.

Making it inline prevents from creating a SAP, and thus reduces
consing and improves performance. It's called a lot by
map-allocated-objects when GCing is disabled, so consing less is a
desirable property.

Reported by `lisper' on #lisp

12 years agoFix QUERY-FILE-SYSTEM for Windows UNC and device file names
David Lichteblau [Thu, 11 Aug 2011 19:08:09 +0000 (21:08 +0200)]
Fix QUERY-FILE-SYSTEM for Windows UNC and device file names

Thanks to Anton Kovalenko.

12 years agosb-bsd-sockets: Fix error code handling on Windows
Anton Kovalenko [Wed, 18 Aug 2010 21:40:26 +0000 (01:40 +0400)]
sb-bsd-sockets: Fix error code handling on Windows

  Factored out into a new function for the win32-specific
  WSAGetLastError call.

  Run-time results now match the existing constant definitions.

Thanks to Anton Kovalenko.

12 years agosb-simple-streams: In test lp491087, merge the pathname
David Lichteblau [Wed, 10 Aug 2011 18:05:06 +0000 (20:05 +0200)]
sb-simple-streams: In test lp491087, merge the pathname

  Needed for Windows.

Thanks to Anton Kovalenko.

12 years agosb-simple-streams: Close files before deleting them on revert
David Lichteblau [Wed, 10 Aug 2011 14:50:29 +0000 (16:50 +0200)]
sb-simple-streams: Close files before deleting them on revert

Thanks to Anton Kovalenko.

12 years agosb-simple-streams: use the Windows file mapping API for memory-mapped files
Anton Kovalenko [Tue, 29 Mar 2011 11:55:42 +0000 (15:55 +0400)]
sb-simple-streams: use the Windows file mapping API for memory-mapped files

Thanks to Anton Kovalenko.

12 years agosb-posix: in win32 tests, avoid certain hardcoded file names
David Lichteblau [Wed, 10 Aug 2011 12:58:21 +0000 (14:58 +0200)]
sb-posix: in win32 tests, avoid certain hardcoded file names

  stat.5: Create a fresh file instead of hardcoding c:\pagefile.sys
  (was c:\config.sys until recently; was /bin/sh originally).

  rmdir.error.3: Use %windir% instead of c:\.

  Tests now pass with Wine on my system without local workarounds.