sbcl.git
10 years agoSmaller stack frames on x86oids
Paul Khuong [Thu, 27 Jun 2013 22:46:52 +0000 (18:46 -0400)]
Smaller stack frames on x86oids

Start at 4 slots (for some reason, it seems that 3 isn't really
the minimum, and grows by one slot at a time.

10 years agoDisentangle storage base initial size from growth increments
Paul Khuong [Thu, 27 Jun 2013 22:44:08 +0000 (18:44 -0400)]
Disentangle storage base initial size from growth increments

Before, an initial stack frame size of 8 meant that the stack frame
always grew in increments of 8. Not only is a large initial size bad
for GC (it leaves more dead references untouched), but a large increment
is even worse.

10 years agoInsert explicit cut to width when needed
Paul Khuong [Thu, 18 Jul 2013 19:03:21 +0000 (15:03 -0400)]
Insert explicit cut to width when needed

 When modular arithmetic operations are replaced with specialised
 modular variants, the result's bitwidth is determined by the variant,
 and might be wider than expected. If necessary, insert an explicit
 cut to the exact bitwidth before returning a value in a non-modular
 context.

 Spotted by pfdietz's random tester.

 Fixes lp#1199428.

10 years agoAvoid uselessly re-scanning modular arithmetic expressions
Paul Khuong [Thu, 18 Jul 2013 18:29:12 +0000 (14:29 -0400)]
Avoid uselessly re-scanning modular arithmetic expressions

When modular arithmetic transforms have already fired for a
subexpression, and that subexpression's width is at most as wide
as the bitwidth we're cutting to, there is no need to re-traverse
the subexpression.

There was already some code to detect that case. Make it more general,
and, more importantly, sound.

10 years agoNo more destructive MERGE of shared data in best-modular-version
Paul Khuong [Tue, 9 Jul 2013 12:16:41 +0000 (08:16 -0400)]
No more destructive MERGE of shared data in best-modular-version

The old code worked by accident: few/no platform implements
untagged signed modular arithmetic VOPs.

The new code handles that common case to avoid consing a fresh list
when the MERGE will be an identity.

10 years agoOptimize TYPEP of (MOD X) on x86/x86-64.
Stas Boukarev [Tue, 16 Jul 2013 01:12:51 +0000 (05:12 +0400)]
Optimize TYPEP of (MOD X) on x86/x86-64.

Optimize type-tests in the same vein as type-checks previously, and
implement type-checks by means of type-tests. Further optimize it by
avoiding doing fixnum tests on known fixnums and boxing of
signed/unsigned numbers.

10 years agoHandle unbounded integer types in INTEGER-TYPE-NUMERIC-BOUNDS
Paul Khuong [Mon, 8 Jul 2013 21:05:26 +0000 (17:05 -0400)]
Handle unbounded integer types in INTEGER-TYPE-NUMERIC-BOUNDS

If any of the integer type in the union lack upper or lower bounds,
immediately abort with unknown bounds (rather than taking the MIN
of NIL and an integer).

Thanks to pfdietz for his random testing.

Fixes lp#1199127.

10 years agoAdd a regression test for lp#1194673.
Lutz Euler [Sun, 7 Jul 2013 13:06:47 +0000 (15:06 +0200)]
Add a regression test for lp#1194673.

10 years agorestore CLISP cross-compilability
Christophe Rhodes [Fri, 5 Jul 2013 16:24:44 +0000 (17:24 +0100)]
restore CLISP cross-compilability

s is the marker for short-float, not single-float.  Use f instead.

10 years agoUpdate ASDF to 3.0.2.
Stas Boukarev [Thu, 4 Jul 2013 09:58:54 +0000 (13:58 +0400)]
Update ASDF to 3.0.2.

10 years ago1.1.9: will be tagged as "sbcl-1.1.9"
Christophe Rhodes [Thu, 4 Jul 2013 08:29:48 +0000 (09:29 +0100)]
1.1.9: will be tagged as "sbcl-1.1.9"

10 years agofix typo in FFI chapter
Christophe Rhodes [Wed, 3 Jul 2013 09:26:01 +0000 (10:26 +0100)]
fix typo in FFI chapter

noted by Michael Crouch (lp#1197129)

10 years agoRevert to binding *package* in bootstrappy code
Paul Khuong [Sat, 29 Jun 2013 23:54:25 +0000 (19:54 -0400)]
Revert to binding *package* in bootstrappy code

 I see no sane way to use sb!ext:print-symbol-with-prefix or
 sb-ext:... in ~//. Bind *package* to :keyword instead, for
 undefined function conditions.

 Reported by adeth on #lisp.

10 years agoFix SLEEP on 32-bit platforms.
James M. Lawrence [Tue, 25 Jun 2013 21:43:27 +0000 (17:43 -0400)]
Fix SLEEP on 32-bit platforms.

10 years agoFix a typo in the block comment on encoding/decoding universal times
Paul Khuong [Fri, 28 Jun 2013 13:08:11 +0000 (09:08 -0400)]
Fix a typo in the block comment on encoding/decoding universal times

 Might as well, while we're updating URLs.

 Spotted by Luis Oliveira.

10 years agos/32/n-word-bits/ in bignum-index
Paul Khuong [Fri, 28 Jun 2013 06:03:33 +0000 (02:03 -0400)]
s/32/n-word-bits/ in bignum-index

 For some reason we missed that during all the work on x86-64. Then
 again, our static inference is good enough that no runtime check
 seem to be left to detect that the declaration is wrong.

10 years agoStore FP values from x87 to the heap outside pseudo-atomic
Paul Khuong [Fri, 28 Jun 2013 06:01:06 +0000 (02:01 -0400)]
Store FP values from x87 to the heap outside pseudo-atomic

 It suffices to get the header right, and that way we avoid signaling
 FPEs in PA, when, as is bound to happen, a value is only truncated
 when it's boxed.

10 years agodouble->single float conversion isn't a no-op on x87 anymore
Paul Khuong [Fri, 28 Jun 2013 05:45:49 +0000 (01:45 -0400)]
double->single float conversion isn't a no-op on x87 anymore

 The conversion can result in overflow, so pass through a stack
 temporary to force a truncation.

 Test case by Peter Keller on sbcl-devel, 2013-06-26.

10 years agoNew contrib: SB-GMP
Paul Khuong [Fri, 28 Jun 2013 03:15:38 +0000 (23:15 -0400)]
New contrib: SB-GMP

 This contrib was developed by Stephan Frank to replace some of our
 bignum and rational arithmetic code with calls to libgmp.  Simply
 loading the contrib will transparently accelerate arithmetic on
 large rationals when libgmp is available; if libgmp cannot be found,
 the contrib should change nothing.

 The contrib also wraps additional functions in GNU MP, so that they
 accept and return SBCL-native integers or ratios.  See GNU MP's manual
 for more information.

10 years agoDefer some sanity checks to after testing for value refence to inline functions
Paul Khuong [Fri, 28 Jun 2013 02:03:24 +0000 (22:03 -0400)]
Defer some sanity checks to after testing for value refence to inline functions

 The functional corresponding to an inline function can be marked as dead when
 there remains references in for-value contexts.  Detect such references before
 making sure the function is still live.

 Reported with a reduced test case by Teemu Likonen to sbcl-devel on 2013-06-24.

10 years agoIn MAKE-THREAD, use WITH-SYSTEM-MUTEX for locking *MAKE-THREAD-LOCK*
Jan Moringen [Sun, 23 Jun 2013 17:13:14 +0000 (19:13 +0200)]
In MAKE-THREAD, use WITH-SYSTEM-MUTEX for locking *MAKE-THREAD-LOCK*

Otherwise MAKE-THREAD could be interrupted after having
locked *MAKE-THREAD-LOCK*. If the interrupting code also called
MAKE-THREAD, a recursive lock attempt for *MAKE-THREAD-LOCK* would
occur.

The problem could be easily triggered by

  (MAKE-TIMER ... :THREAD <T or a thread>)

Also move let bindings of SETUP-SEM, REAL-FUNCTION, ARGUMENTS and
INITIAL-FUNCTION and the NOT *GC-INHIBIT* assertion out of the
critical section.

Tests have been added in threads.pure.lisp and timer.impure.lisp.

fixes lp#1180102.

10 years agoWrap the body of sb-debug:backtrace with with-debug-io-syntax.
Attila Lendvai [Wed, 27 Oct 2010 12:03:34 +0000 (14:03 +0200)]
Wrap the body of sb-debug:backtrace with with-debug-io-syntax.

 Added with-debug-io-syntax macro.

 Some whitespace changes as well.

10 years agoProvide more info in debugger-disabled-hook.
Attila Lendvai [Sun, 31 Oct 2010 00:18:53 +0000 (02:18 +0200)]
Provide more info in debugger-disabled-hook.

Before this change if there was an error printing the condition object,
then we didn't even try printing the backtrace afterwards, which can be
a useful source of information even if the condition printing has failed.

Some modifications by Paul Khuong.

10 years agoMake the printing of a slot-unbound error more error tolerant.
Attila Lendvai [Sun, 2 Jan 2011 15:41:47 +0000 (16:41 +0100)]
Make the printing of a slot-unbound error more error tolerant.

Especially against errors coming from custom PRINT-OBJECT methods, in which
case only print the TYPE-OF the instance. Also, print fully qualified
symbol names.

Slightly modified by Paul Khuong.

10 years agoUse sb!ext:print-symbol-with-prefix in implicit-generic-function-warning.
Attila Lendvai [Sun, 2 Jan 2011 15:42:15 +0000 (16:42 +0100)]
Use sb!ext:print-symbol-with-prefix in implicit-generic-function-warning.

 and export this useful function from sb-exr.

 Slight mangling by Paul Khuong.

10 years agoUpdate URL of "Long, Painful History of Time"
Pierre Thierry [Sun, 28 Aug 2011 19:38:28 +0000 (21:38 +0200)]
Update URL of "Long, Painful History of Time"

Previous URL was not available anymore (404 error)
Also rewrapped the paragraph to the same width as the others

10 years agoSimplify EMIT-VOP further.
Stas Boukarev [Mon, 24 Jun 2013 10:28:30 +0000 (14:28 +0400)]
Simplify EMIT-VOP further.

EMIT-VOP is only ever used in conjunction with INSERT-VOP-SEQUENCE, by
returning two values: first and last VOPs, all linked together,
INSERT-VOP-SEQUENCE then inserts them into the block. But nowadays
EMIT-VOP always returns the same VOP as the second value.
* EMIT-VOP now returns one value, the emitted VOP.
* INSERT-VOP-SEQUENCE is renamed to INSERT-VOP, accepts only one VOP.
* A new function EMIT-AND-INSERT-VOP is added, which combines them,
  and is used anywhere where EMIT-VOP was used.

This makes things less complicated, and reduces core size by 32KB, the
same as the previous commit, for a total of 64KB of savings
essentially for free.

(Also squeeze a couple of line-break fixes)

10 years agoSimplify EMIT-GENERIC-VOP.
Stas Boukarev [Mon, 24 Jun 2013 09:50:35 +0000 (13:50 +0400)]
Simplify EMIT-GENERIC-VOP.

Since there's only one kind of templates now, there's no need for
indirection. Rename EMIT-GENERIC-VOP to EMIT-VOP, remove EMIT-FUNCTION
slot from TEMPLATE, call EMIT-VOP directly.

10 years agobacktrace: don't cons large lists when RCX is overwritten inside XEPs.
Stas Boukarev [Sat, 22 Jun 2013 15:37:18 +0000 (19:37 +0400)]
backtrace: don't cons large lists when RCX is overwritten inside XEPs.

To present a list with the actual number of passed arguments in the
backtrace, clean-xep used the arg-count register and added missing
arguments in the form of #<unknown>, but if the register is
overwritten by other code, it could cons very large lists, exhausting
heap. Do such arg-list clean up only upon INVALID-ARG-COUNT-ERROR.
Fixes lp#1192929.

10 years agoHopefully fix the windows build to grovel time structures correctly.
Joshua Elsasser [Sun, 9 Jun 2013 04:36:48 +0000 (21:36 -0700)]
Hopefully fix the windows build to grovel time structures correctly.

It is a little misleading to say "correctly" since struct timespec
doesn't really exist on windows. Groveling the definition that we
define in our own pthreads wrapper seems the most consistent choice.

The grovel-headers.c changes have only been tested in isolation, not
with a real build. Thanks to Kyle Isom for testing, any resulting
build problems are entirely my fault.

10 years agoGrovel timeval and timespec struct definitions rather than hard-coding.
Joshua Elsasser [Sun, 12 May 2013 15:36:11 +0000 (08:36 -0700)]
Grovel timeval and timespec struct definitions rather than hard-coding.

10 years agoFix instruction encoding for XMM shifts with immediate count
Paul Khuong [Tue, 18 Jun 2013 17:23:42 +0000 (13:23 -0400)]
Fix instruction encoding for XMM shifts with immediate count

 x86 keeps getting more and more devious: the source/dest operand
 is in the r/m field for these instructions, so REX.B must be set,
 rather than REX.R, to access > xmm7. Intel's new documentation
 seems clearer about these issues, at least.

10 years agocheck-mod-fixnum: correct the test for power-of-two.
Stas Boukarev [Tue, 11 Jun 2013 11:20:10 +0000 (15:20 +0400)]
check-mod-fixnum: correct the test for power-of-two.

Testing for the power of two was performed on a fixnumized number,
causing the optimization for power-of-two to be never applied.

10 years agoAdd a missing :suppress-errors keyword for WRITE defknown.
Stas Boukarev [Mon, 10 Jun 2013 18:54:55 +0000 (22:54 +0400)]
Add a missing :suppress-errors keyword for WRITE defknown.

10 years agoNote removal of post-receive-email in NEWS
Christophe Rhodes [Mon, 10 Jun 2013 12:26:27 +0000 (13:26 +0100)]
Note removal of post-receive-email in NEWS

10 years agoremove git/ directory
Christophe Rhodes [Mon, 10 Jun 2013 12:20:14 +0000 (13:20 +0100)]
remove git/ directory

The scripts therein weren't directly relevant for SBCL development,
only for infrastructure to assist that development; additionally,
they are derived from git examples licensed under the GPL, and it
was difficult to explain the effects of this in a short paragraph
in the master COPYING file.  A new sbcl-git-hooks repository is
available on SourceForge for these and any other infrastructure
customizations.

10 years agoMicro-optimize DOUBLE-FLOAT-LOW-BITS on x68-64.
Lutz Euler [Mon, 10 Jun 2013 11:44:20 +0000 (13:44 +0200)]
Micro-optimize DOUBLE-FLOAT-LOW-BITS on x68-64.

Instead of loading a 64-bit register from memory and zeroing the upper
32 bits of it by the sequence SHL reg, 32; SHR reg, 32 simply load the
corresponding 32-bit register from memory, relying on the implicit
zero-extension to 64 bits this does. This is smaller and faster.

For example, if the input to the VOP is a descriptor register, the old
instruction sequence is:

  MOV RDX, [RDX-7]
  SHL RDX, 32
  SHR RDX, 32

and the new one:

  MOV EDX, [RDX-7]

Regarding store-to-load forwarding this change should make no
difference: Most current processors can forward a 64-bit store to a
32-bit load from the same address. The exception is Intel's Atom which
can forward only to a load of the same size as the store; but it also
supports this only between integer registers, and DOUBLE-FLOAT-LOW-BITS
mostly or even always acts on memory slots written from an XMM register
(of the three storage classes it supports as input, for the first it
does the store itself from an XMM register; for the other two I have
investigated some disassemblies and always found the prior store to be
from am XMM register).

10 years agoMake clean.sh clean up doc/internals, too.
Lutz Euler [Mon, 10 Jun 2013 10:37:22 +0000 (12:37 +0200)]
Make clean.sh clean up doc/internals, too.

For completeness and equal treatment with doc/manual.

10 years agogit: Add entries for the HTML manual to doc/internals/.gitignore.
Lutz Euler [Mon, 10 Jun 2013 10:37:22 +0000 (12:37 +0200)]
git: Add entries for the HTML manual to doc/internals/.gitignore.

These are the files and directories generated by "make html" in
doc/internals.

10 years agogit: New file doc/internals/.gitignore.
Lutz Euler [Sun, 9 Jun 2013 15:58:52 +0000 (17:58 +0200)]
git: New file doc/internals/.gitignore.

Ignore the files generated by building the internals manual.
Copied and adapted from doc/manual/.gitignore.

10 years agoInsert error traps after full calls inferred not to return
Paul Khuong [Sat, 8 Jun 2013 16:53:16 +0000 (12:53 -0400)]
Insert error traps after full calls inferred not to return

 An explicit error trap after full calls to known functions helps
 understand type derivation errors at runtime; it's certainly better
 than executing arbitrary bytes.

 Only do this when the return type was tightened to NIL via type
 derivation; if a function is defknowned not to return, it really
 shouldn't.

10 years agoOnly use MASK-SIGNED-FIELD VOPs as last resorts
Paul Khuong [Sat, 8 Jun 2013 15:26:19 +0000 (11:26 -0400)]
Only use MASK-SIGNED-FIELD VOPs as last resorts

 The MOVE hack usually leads to better code when it can be used.

10 years agoHandle (aref v (+ i k)), with i negative
Paul Khuong [Sat, 8 Jun 2013 05:39:10 +0000 (01:39 -0400)]
Handle (aref v (+ i k)), with i negative

 * Update the fndb to allow negative index values for foo-ref-with-offset
   and foo-set-with-offset.

 * Adjust VOPs accordingly.

 * Fix fold-index-addressing: only fold constant offsets if the resulting
   index argument would be a fixnum, and compute the new offset correctly
   for subtractions.

 * Unmark the corresponding test as an expected feailure, and add a test
   to make sure VOPs for data-vector-{ref,set}-with-offset  accept negative
   index values (unless the element size is too small
   to fold offsets in an EA).

 * Un-package-qualify a few spurious test-util:with-test.

10 years agoFix a typo in bignum--ref-with-offset
Paul Khuong [Sat, 8 Jun 2013 05:38:32 +0000 (01:38 -0400)]
Fix a typo in bignum--ref-with-offset

10 years agoConsistently force (double) rounding of foreign x87 values
Paul Khuong [Sat, 8 Jun 2013 05:34:52 +0000 (01:34 -0400)]
Consistently force (double) rounding of foreign x87 values

 SBCL always functions in 64 bit mode, but switches to 80 bit for
 foreign calls.  Return values might be unexpectedly precise.

 Force a round-trip from the x87 unit and the stack to make sure
 FP return values are rounded to the correct width.

10 years agoLook for left-over dead code when *check-consistency*
Paul Khuong [Sat, 8 Jun 2013 05:31:22 +0000 (01:31 -0400)]
Look for left-over dead code when *check-consistency*

 If ir1opt leaves dead code around, later parts of the compilation
 pipeline can become seriously confused.  Detect such issues earlier,
 rather than as mysterious failures.

10 years agoSimplify RATIONAL/constant FLOAT and INTEGER/constant RATIO comparisons
Paul Khuong [Sat, 8 Jun 2013 03:37:52 +0000 (23:37 -0400)]
Simplify RATIONAL/constant FLOAT and INTEGER/constant RATIO comparisons

 The spec says that rationals and floats are compared by first calling
 RATIONAL on the float. Constant fold the call to RATIONAL, and round
 to an integer if applicable.

10 years agoSilence notes about being specialised EQ templates on x86oids
Paul Khuong [Sat, 8 Jun 2013 02:29:55 +0000 (22:29 -0400)]
Silence notes about being specialised EQ templates on x86oids

 During LTN, we emit notes when the final chosen template costs
 at least 6 more units than an unapplicable template.  Adjust the
 costs of EQ VOPs to avoid triggering this logic.

10 years agoSilence the transforms that detect rightward arithmetic shift
Paul Khuong [Sat, 8 Jun 2013 02:27:59 +0000 (22:27 -0400)]
Silence the transforms that detect rightward arithmetic shift

 It seems most of the time, the notes complained about clear left
 shifts.

10 years agoMark DATA-VECTOR-REF[-WITH-OFFSET] as unsafely flushable
Paul Khuong [Sat, 8 Jun 2013 02:26:59 +0000 (22:26 -0400)]
Mark DATA-VECTOR-REF[-WITH-OFFSET] as unsafely flushable

 Unsafe code will be able to eliminate array reads as dead code.

10 years agoAdjust internal encoding for TN location for larger SC count limit
Paul Khuong [Sat, 8 Jun 2013 02:25:57 +0000 (22:25 -0400)]
Adjust internal encoding for TN location for larger SC count limit

 We need one more bit to encode values up to 62.

10 years agoNew VOP for LOGAND of bignum and word-sized constant on x86-64
Paul Khuong [Sat, 8 Jun 2013 01:43:16 +0000 (21:43 -0400)]
New VOP for LOGAND of bignum and word-sized constant on x86-64

 We can directly read the first bignum digit and AND it.

10 years agoMASK-SIGNED-FIELD VOPs on x86-64
Paul Khuong [Sat, 8 Jun 2013 01:42:17 +0000 (21:42 -0400)]
MASK-SIGNED-FIELD VOPs on x86-64

 Other platforms go through the MOVE hack like before.

10 years agoMore identity folding for LOGAND and LOGIOR with constants
Paul Khuong [Fri, 7 Jun 2013 23:36:13 +0000 (19:36 -0400)]
More identity folding for LOGAND and LOGIOR with constants

 * Handle more complex cases than only powers of two:
   compare the variant argument with a power-of-two-sized
   prefix of the constant bit pattern.

 * Add parallel logic for LOGIOR: if all the ones we're ORing in
   are already set because the variant argument is a small enough
   negative integer, we've got an identity.

 * This is a bit hairy, so exhaustively check the logic with small
   values.

10 years agoMore associativity-based constant-folding
Paul Khuong [Fri, 7 Jun 2013 23:06:32 +0000 (19:06 -0400)]
More associativity-based constant-folding

 Detect patterns like (+ (- x k1) k2) and (* (/ x k1) k2).

10 years agoEnable signed modular arithmetic for LOGIOR
Paul Khuong [Fri, 7 Jun 2013 23:03:44 +0000 (19:03 -0400)]
Enable signed modular arithmetic for LOGIOR

 When the result of a bitwise or is known to be negative, we don't
 need to compute the most significant bits (they're all ones).

10 years agoEnable more modular arithmetic
Paul Khuong [Fri, 7 Jun 2013 23:01:09 +0000 (19:01 -0400)]
Enable more modular arithmetic

 The rewrites now trigger when the result type for LOGAND or
 MASK-SIGNED-FIELD is an union of integer types.

10 years agoComplete cut-to-width for modular arithmetic
Paul Khuong [Fri, 7 Jun 2013 22:46:25 +0000 (18:46 -0400)]
Complete cut-to-width for modular arithmetic

 For each modular argument, go through the nodes that provide its
 value and try to narrow down their bitwidth. If we fail on any and
 the result might be too wide, splice in an explicit call to LOGAND
 or MASK-SIGNED-FIELD. Skip that last step if the value is an argument
 to an equivalent LOGAND or MASK-SIGNED-FIELD.

 Test case by Eric Marsden.

10 years agoFix negation of SIMD-PACK types
Paul Khuong [Fri, 7 Jun 2013 22:42:42 +0000 (18:42 -0400)]
Fix negation of SIMD-PACK types

 type-union2 can punt and return NIL.

10 years agoSimplify getting the contents of assembler segments.
Lutz Euler [Thu, 6 Jun 2013 14:26:30 +0000 (16:26 +0200)]
Simplify getting the contents of assembler segments.

Extend FINALIZE-SEGMENT to compact the segment's buffer and provide an
exported function to get at this buffer. This resolves an old KLUDGE
noted at ON-SEGMENT-CONTENTS-VECTORLY, making this function unnecessary.

There are several benefits to this change: First, the consumers of
assembler segment's contents, like WRITE-SEGMENT-CONTENTS which is used
for example during FASL dumping, or MAKE-CORE-COMPONENT, now call
WRITE-SEQUENCE respectively COPY-BYTE-VECTOR-TO-SYSTEM-AREA only once
per segment and not once per the pieces of the segment's contents that
ON-SEGMENT-CONTENTS-VECTORLY provided, which makes for less overhead.

Second, this allows to greatly simplify the whole operation of
DISASSEMBLE-ASSEM-SEGMENT, in the course deleting several helpers of it.
So far this repartitioned the pieces of the segment's contents from
ON-SEGMENT-CONTENTS-VECTORLY, while caring not to split the contents
inside instructions, which needed a sizable amount of code. Now the
segment's contents are simply disassembled as a whole. Also, the old
code (specifically SEGMENT-OVERFLOW) didn't take prefix instructions
into account correctly which surfaced as the bug in lp#1085729.

Fixes lp#1085729.

Also, fix an unrelated typo in NEWS.

10 years agoStop exporting unused symbols.
Stas Boukarev [Wed, 5 Jun 2013 23:11:42 +0000 (03:11 +0400)]
Stop exporting unused symbols.

10 years agoFactor out read-var-integer into a function.
Stas Boukarev [Wed, 5 Jun 2013 19:28:44 +0000 (23:28 +0400)]
Factor out read-var-integer into a function.

read-var-integer macro is used quite a number of times, expand the
macro into a SETF, which calls %read-var-integer, which does actual
reading. Reduces the core size by 65KB on x86-64.

10 years agosb-bsd-sockets: More robust inet-socket-bind test on Windows.
Stas Boukarev [Wed, 5 Jun 2013 10:50:34 +0000 (18:50 +0800)]
sb-bsd-sockets: More robust inet-socket-bind test on Windows.

Nested unwind-protects aren't supported on Windows.

10 years agoGet rid of vm-support-routines indirection.
Stas Boukarev [Wed, 5 Jun 2013 18:24:54 +0000 (22:24 +0400)]
Get rid of vm-support-routines indirection.

VM routines were defined using two functions, one calling another
through structure slots. This is unnecessary, removing leads to a
~200KB core size reduction on x86-64.

10 years agoOptimize (mod FIXNUM) type-checks on x86oids.
Stas Boukarev [Wed, 5 Jun 2013 14:38:42 +0000 (18:38 +0400)]
Optimize (mod FIXNUM) type-checks on x86oids.

Instead of two (and (>= x 0) (< x FIXNUM)) comparisons, do one
unsigned.
(mod power-of-two) is further optimized by doing one mask test
determine the range and fixnumness in one go.

10 years agosb-bsd-socket tests: don't listen on a predefined port.
Stas Boukarev [Tue, 4 Jun 2013 20:58:55 +0000 (00:58 +0400)]
sb-bsd-socket tests: don't listen on a predefined port.

Listening on 1974 prevents from building contribs in parallel.

10 years agofix CL case conversions of characters involving iota subscript
Christophe Rhodes [Tue, 4 Jun 2013 12:00:50 +0000 (13:00 +0100)]
fix CL case conversions of characters involving iota subscript

Oh boy.  Judging by the length of the web page explaining the issue
(at <http://www.tlg.uci.edu/~opoudjis/unicode/unicode_adscript.html>)
this is a bit of a minefield.  I hope that this doesn't contribute
further to the trouble...

Although the combined _WITH_PROSGEGRAMMENI characters are of
general class "Lt" (i.e. titlecase), for CL purposes we treat them
as the uppercase equivalent of the lowercase _WITH_YPOGEGRAMMENI
characters (as directly specified by the case mapping data in
UnicodeData.txt).  This is a little awkward, and involves a bit
of rearrangement in the indices of the misc table entries to make
the (CL) uppercase/lowercase tests efficient, but seems to be the
best of all possible worlds given that we must comply with CL's
character-to-character case mappings -- the alternative of not
providing an uppercase version of LOWERCASE_OMEGA_WITH_YPOGEGRAMMENI
seems even weirder.

The way this is done in ucd.lisp is a little bit kludgy, because we
have to avoid giving the same exception to the serbian titlecase
digraphs (Dz and friends) which mustn't map to anything, or else
we'd break invertibility.  (The lowercase dz and uppercase DZ are
already (CL) case mappings of each other).  Probably the thing which
will confuse future readers is that some (Unicode) titlecase
characters are (CL) upper-case-p.

10 years agoSimpler and more precise type derivation for APPEND/NCONC
Paul Khuong [Mon, 3 Jun 2013 17:21:25 +0000 (13:21 -0400)]
Simpler and more precise type derivation for APPEND/NCONC

 We can suppose that all but the last argument are lists when
 deriving the return type... and the logic to compute the return
 type can be much simpler: it's either a CONS, the last argument,
 or we don't know which (yet).

10 years agoUninitialized type-error conditions can now be printed.
Stas Boukarev [Mon, 3 Jun 2013 16:40:59 +0000 (20:40 +0400)]
Uninitialized type-error conditions can now be printed.

(print (make-condition 'simple-type-error)) signalled an unbound slot
error.

Reported by Eric Marsden, fixes lp#1184586.

10 years agosb-bsd-sockets: Fix type of canonname in addrinfo.
Stas Boukarev [Mon, 3 Jun 2013 16:30:19 +0000 (20:30 +0400)]
sb-bsd-sockets: Fix type of canonname in addrinfo.

Should be c-string-pointer, not c-string.

Fixes lp#1187041, patch by Jerry James.

10 years agoFix APPEND/NCONC type derivation properly this time.
Stas Boukarev [Mon, 3 Jun 2013 14:25:19 +0000 (18:25 +0400)]
Fix APPEND/NCONC type derivation properly this time.

Use type-intersection for checking types, it's more robust than what
was there before.

And a slight improvement. When argument in the middle can't be a NIL,
then the end result is guaranteed to be a CONS. Previously, the
assumption was if the type is a CONS, but that doesn't work with types
like (or cons vector).

10 years agofixes in EXPT type derivation
Christophe Rhodes [Mon, 3 Jun 2013 13:54:17 +0000 (14:54 +0100)]
fixes in EXPT type derivation

It was possible to construct mostly (but not completely) unobservable
bogus floating-point types when deriving the type of functions
returning the value of calls to EXPT.  Noticed by Vsevolod Dyomkin,
who found a way to observe it by redefining methods.

10 years agoFix NCONC type derivation.
Stas Boukarev [Mon, 3 Jun 2013 11:28:02 +0000 (15:28 +0400)]
Fix NCONC type derivation.

Properly check the types of arguments, instead of testing for subtypes
or supertypes of LIST, check for arguments to be subtypes of NULL or CONS.

Reported by Jerry James.

10 years agosleep: Add more precautions to avoid consing on x86.
Stas Boukarev [Mon, 3 Jun 2013 10:46:30 +0000 (14:46 +0400)]
sleep: Add more precautions to avoid consing on x86.

10 years agoFix sleep on ratios, avoiding consing.
Stas Boukarev [Mon, 3 Jun 2013 09:52:06 +0000 (13:52 +0400)]
Fix sleep on ratios, avoiding consing.

Enable sleep tests for some platforms.

10 years agosome tests of SLEEP with ratios
Christophe Rhodes [Mon, 3 Jun 2013 09:28:02 +0000 (10:28 +0100)]
some tests of SLEEP with ratios

10 years agofix sleep on most ratios
Christophe Rhodes [Mon, 3 Jun 2013 08:49:49 +0000 (09:49 +0100)]
fix sleep on most ratios

really really ensure that the second argument to nanosleep is an
integer

10 years agodelete ye olde FIXME relating to unbound variable warnings
Christophe Rhodes [Mon, 3 Jun 2013 08:48:55 +0000 (09:48 +0100)]
delete ye olde FIXME relating to unbound variable warnings

Testing the code in the real system gives a full warning

10 years agofix (again) the handling of read errors in the debugger
Christophe Rhodes [Mon, 3 Jun 2013 08:47:32 +0000 (09:47 +0100)]
fix (again) the handling of read errors in the debugger

Actually the read errors were doing what we wanted, but EOF was no
longer popping one debugger level.  The control transfer is a bit
gnarly, so explicitly grab the restart we might want to use and pass
it as an argument to DEBUG-READ.

10 years agoAvoid consing in SLEEP.
Stas Boukarev [Sun, 2 Jun 2013 20:15:33 +0000 (00:15 +0400)]
Avoid consing in SLEEP.

Try to compute seconds without consing, when the arguments are small
enough (in the fixnum range).

Add a transform to go directly to sb-unix:nanosleep when possible.

10 years agoMake %coerce-callable-to-fun static on x86oids.
Stas Boukarev [Sun, 2 Jun 2013 19:18:20 +0000 (23:18 +0400)]
Make %coerce-callable-to-fun static on x86oids.

It's called a lot when doing funcall or apply.

10 years agoDon't go through fdefn when referencing #'known-functions.
Stas Boukarev [Sun, 2 Jun 2013 18:58:27 +0000 (22:58 +0400)]
Don't go through fdefn when referencing #'known-functions.

Known functions are know to be always present, save on indirection by
using them directly.

10 years agoslightly better handling of read errors in the debugger
Christophe Rhodes [Sun, 2 Jun 2013 18:50:05 +0000 (19:50 +0100)]
slightly better handling of read errors in the debugger

wrap the read as well as the eval in the WITH-SIMPLE-RESTART ABORT
so that the user can return to the existing debugger level on read
errors.

10 years agoCorrect call-indirect for >32-bit addresses.
Stas Boukarev [Sun, 2 Jun 2013 18:22:44 +0000 (22:22 +0400)]
Correct call-indirect for >32-bit addresses.

10 years agoBetter calls to static functions on x86-64.
Stas Boukarev [Sun, 2 Jun 2013 17:25:21 +0000 (21:25 +0400)]
Better calls to static functions on x86-64.

Encode the calls to static functions as an immediate argument to the
CALL instruction when possible.

10 years agoBetter calls to static functions on x86-64.
Stas Boukarev [Sun, 2 Jun 2013 17:14:15 +0000 (21:14 +0400)]
Better calls to static functions on x86-64.

Encode the calls to static functions as an immediate argument to the
CALL instruction when possible.

10 years agoBetter initialization of ir2-component-constants on x86-64.
Stas Boukarev [Sun, 2 Jun 2013 16:33:54 +0000 (20:33 +0400)]
Better initialization of ir2-component-constants on x86-64.

x86 uses the first constant for the fixup vector, x86-64 doesn't.
Don't leave empty space in ir2-component-constants.

On the C side, call gencgc_apply_code_fixups only on x86, and not on
x86_64 as well, since its body is conditionalized for x86_64 anyway.

10 years agoRemove unused variables in the compiler.
Stas Boukarev [Fri, 31 May 2013 16:08:19 +0000 (20:08 +0400)]
Remove unused variables in the compiler.

*code-vector* *next-location* *result-fixups* were last seen being
used on 24 Aug 1990.

10 years agodisassemble: Better annotation of static functions and safepoints.
Stas Boukarev [Sun, 2 Jun 2013 16:21:38 +0000 (20:21 +0400)]
disassemble: Better annotation of static functions and safepoints.

Static functions, like LENGTH and some others, weren't annotated in
the disassemble output.
Also add annotations for safepoints.

10 years ago1.1.8: will be tagged as "sbcl-1.1.8"
Christophe Rhodes [Sun, 2 Jun 2013 13:12:30 +0000 (14:12 +0100)]
1.1.8: will be tagged as "sbcl-1.1.8"

10 years agoFix expected result for a character comparison test under non-unicode.
Lutz Euler [Sun, 2 Jun 2013 12:58:49 +0000 (14:58 +0200)]
Fix expected result for a character comparison test under non-unicode.

The test "character.pure.lisp / :case-insensitive-char-comparisons
:exhaustive" was marked as an expected failure as the unicode
implementation is not yet complete, but on a non-unicode build it
actually already succeeds.

10 years agoFix a regression in APPEND type derivation.
Stas Boukarev [Fri, 31 May 2013 12:27:11 +0000 (16:27 +0400)]
Fix a regression in APPEND type derivation.

Do not just test the arguments for validity by being subtypes or
supertypes of LIST, but also if it's a subytpe of NULL, since ATOM or
SYMBOL won't satisfy the LIST tests.

Regression since f32ee7d.."Better type derivation for APPEND, NCONC,
LIST.", reported by Eric Marsden.

10 years agoStricter precondition when strength reducing variable right shifts
Paul Khuong [Fri, 31 May 2013 01:49:55 +0000 (21:49 -0400)]
Stricter precondition when strength reducing variable right shifts

 Looking at the node's derived type is safer than a result type
 constraint, which seems to consider the LVAR's derived or
 truly-declared type.

 Remove a redundant AVER too. If people call %ash/right directly and
 incorrectly, they're looking for trouble. Moreover, the call's
 type will be derived only if the argument types are correct.

 Reported by Eric Marsden on sbcl-devel; further reduced test cases
 by Christophe Rhodes.

10 years agoCompute single-value-type correctly in the absence of required values
Paul Khuong [Mon, 27 May 2013 21:38:15 +0000 (17:38 -0400)]
Compute single-value-type correctly in the absence of required values

 * For the longest time (at least 2003), we didn't take defaulting
   into account and did not union the single-value type with NULL.
   For some reason, the issue didn't manigest itself until we improved
   code generation for EQ/EQL this month.

   Thanks to Attila Lendvai for the reasonable test case.

 * Also, fix a typo in a VOP name for EQ of fixnum values.

10 years agofix CHAR-EQUALity of non-ascii caseful characters
Christophe Rhodes [Mon, 27 May 2013 07:11:05 +0000 (08:11 +0100)]
fix CHAR-EQUALity of non-ascii caseful characters

Or at least mostly fix it.  There are issues surrounding iota subscript and
titlecase, which aren't regressions in the current release and will require
some more investigation to fix.

11 years agoSkip unicode normalization tests on non-unicode builds.
Lutz Euler [Sat, 25 May 2013 14:39:28 +0000 (16:39 +0200)]
Skip unicode normalization tests on non-unicode builds.

This was accidentally missed when the tests were introduced.

11 years agoRevert "Fix (aref vector (+ i constant)) with i negative on x86oids"
Paul Khuong [Fri, 24 May 2013 20:45:57 +0000 (16:45 -0400)]
Revert "Fix (aref vector (+ i constant)) with i negative on x86oids"

This reverts commit 5d3a728a1d9a91e7218fe53f12f96ab63b846810.

The current code is still wrong, but better the bugs we've always had
than the ones that break currently-working code.

Kept the test case, and added the one we failed on.

11 years agoEven safer substitution of constants in CUT-TO-WIDTH
Paul Khuong [Fri, 24 May 2013 17:13:12 +0000 (13:13 -0400)]
Even safer substitution of constants in CUT-TO-WIDTH

 * Fix another aspect of the modular arithmetic bug that was only
   partially fixed by ccd2a1d (Substitute constants with modular
   equivalents more safely); detected by the previous fix not
   working on !x86oids.

11 years agoRobustify specialised IF/IF conversion introduced in 729ce57
Paul Khuong [Fri, 24 May 2013 17:08:55 +0000 (13:08 -0400)]
Robustify specialised IF/IF conversion introduced in 729ce57

 * When unlinking a node from its destination LVAR, always mark
   the node as potentially up for dead code elimination. IR2 can
   become really confused when converting dead code; a more
   systematic cleanup pass might provide a useful safety net.

 * The changes make a widely-used ir1-manipulation function safer,
   so this might also fix some other obscure compiler bug.

 * Reported by James Y Knight on IRC and Fila Kolodny on Launchpad
   (fixes lp#1183496).

11 years agoSilence the compiler when (runtime-) compiling PCL innards
Paul Khuong [Fri, 24 May 2013 17:07:36 +0000 (13:07 -0400)]
Silence the compiler when (runtime-) compiling PCL innards