mit-scheme.git
5 years agoUse channel I/O directly for file->string and string->file.
Taylor R Campbell [Wed, 29 May 2019 20:43:55 +0000 (20:43 +0000)]
Use channel I/O directly for file->string and string->file.

Here a string is an octet sequence, always in US-ASCII or UTF-8, so
we don't need the rigmarole of text I/O.

5 years agoMake number of topmost frames with expressions shown configurable.
Taylor R Campbell [Wed, 29 May 2019 16:14:43 +0000 (16:14 +0000)]
Make number of topmost frames with expressions shown configurable.

5 years agoUse the Edwin-private %string-append.
Taylor R Campbell [Wed, 29 May 2019 16:13:50 +0000 (16:13 +0000)]
Use the Edwin-private %string-append.

No need to pay the cost of wide stuff with string-append*.

5 years agoLet SIGALRM do its thing even if we're on the right millisecond.
Taylor R Campbell [Wed, 29 May 2019 16:10:52 +0000 (16:10 +0000)]
Let SIGALRM do its thing even if we're on the right millisecond.

If we request a timer interrupt now in logic that closes a lot of
files, which runs through %deregister-io-descriptor, it looks like
_all_ the time is spent in closing files even if it's merely the case
that at least one file is closed every millisecond.

If we instead let SIGALRM do its thing, unless the interrupt is
_overdue_, then the profiler can discriminate at sub-millisecond
resolution where the time is spent which is what I really want.

5 years agoLine break between #; and multiline expression.
Taylor R Campbell [Wed, 29 May 2019 14:33:29 +0000 (14:33 +0000)]
Line break between #; and multiline expression.

Otherwise Emacs gets confused.

5 years agoUse number->string directly; skip dispatch through write-to-string.
Taylor R Campbell [Wed, 29 May 2019 04:57:53 +0000 (04:57 +0000)]
Use number->string directly; skip dispatch through write-to-string.

5 years agoBlock interrupts, _then_ lock.
Taylor R Campbell [Wed, 29 May 2019 04:24:40 +0000 (04:24 +0000)]
Block interrupts, _then_ lock.

Otherwise an interrupt might try to acquire the lock while we already
hold it, leading to deadlock.

5 years agoRework profiler to be more useful.
Taylor R Campbell [Wed, 29 May 2019 04:12:04 +0000 (04:12 +0000)]
Rework profiler to be more useful.

Just make a histogram of stacks and print that.

5 years agoFix check for arity of hash: must be binary, not unary.
Taylor R Campbell [Wed, 29 May 2019 04:11:52 +0000 (04:11 +0000)]
Fix check for arity of hash: must be binary, not unary.

5 years agoProcess pending thread events when unblocking them.
Taylor R Campbell [Wed, 29 May 2019 04:10:57 +0000 (04:10 +0000)]
Process pending thread events when unblocking them.

Partly fixes bug where profiler never got a chance to run when the
program was doing most of its work in short routines that block and
unblock thread events, like opening and closing files.

Only partly, because it seems something else unblocks thread events
without processing them -- until we do another block/unblock cycle as
in channel-close.  Verified that very little time is actually spent
in channel-close; haven't yet tracked down who the culprit is.

5 years agoIntegrate some subroutines that turn up hot in profiles.
Taylor R Campbell [Wed, 29 May 2019 00:53:14 +0000 (00:53 +0000)]
Integrate some subroutines that turn up hot in profiles.

5 years agoMerge branch 'riastradh-20190527-unicodereplacechar'
Taylor R Campbell [Tue, 28 May 2019 13:46:11 +0000 (13:46 +0000)]
Merge branch 'riastradh-20190527-unicodereplacechar'

5 years agoImplement character replacement on ill-formed octet sequences.
Taylor R Campbell [Mon, 27 May 2019 16:21:08 +0000 (16:21 +0000)]
Implement character replacement on ill-formed octet sequences.

- (utf8->string bv start end #t) now replaces by U+FFFD.

  Existing behaviour of (utf8->string bv [start end]) is unchanged so
  that utf8->string will fail noisily rather than quietly fail to be
  invertible by string->utf8 on certain inputs.

- Generic I/O input now replaces ill-formed octet sequences by U+FFFD.

  TODO: Add (port/set-coding-error port <action>) for <action> =
  replace or <action> = error, perhaps.

TODO: This does not exactly implement the replacement algorithm
recommended as a best practice by Unicode 9, ยง3.9, pp. 127-129.  That
algorithm is inconveneint because our decoder is factored into (a)
claiming a length based on the first code unit, and then (b)
consuming exactly that many bytes; the algorithm requires us to
refactor it so that part (b) can say `never mind' and consume fewer
bytes than (a) requeste.

5 years agoSet port coding to ISO-8859-1 for IMAP.
Taylor R Campbell [Mon, 27 May 2019 17:54:34 +0000 (17:54 +0000)]
Set port coding to ISO-8859-1 for IMAP.

This is a sleazy workaround: sometimes the input is really encoded as
UTF-8, but passing it through Scheme `strings' as ISO-8859-1 works
out to approximately the not-wrong thing.  Really we should be
operating on octets, not on characters-as-if-they-were-octets.

5 years agoFix enumerate-graphics-types per documentation.
Matt Birkholz [Fri, 17 May 2019 16:33:16 +0000 (09:33 -0700)]
Fix enumerate-graphics-types per documentation.

5 years agoTreat strings returned from primitives as UTF-8 coded.
Chris Hanson [Wed, 8 May 2019 06:50:48 +0000 (23:50 -0700)]
Treat strings returned from primitives as UTF-8 coded.

In particular, make sure that filenames are treated this way, because this is
normal for modern unix systems.  This change mostly affects filenames, but also
environment variables and command-line strings.

This is necessary because strings passed to primitives are converted to UTF-8
bytevectors.  Otherwise, a non-ASCII filename returned by a primitive won't be
converted back to the same bytes when passed to another primitive.

5 years agoOn macOS, support building without Xcode installed.
Chris Hanson [Wed, 8 May 2019 05:58:06 +0000 (22:58 -0700)]
On macOS, support building without Xcode installed.

However, command line tools must be installed.

5 years agox11-test: Expect the correct device name. Use x-graphics-draw-arc.
Matt Birkholz [Mon, 29 Apr 2019 21:43:08 +0000 (14:43 -0700)]
x11-test: Expect the correct device name.  Use x-graphics-draw-arc.

5 years agox-graphics-draw-arc: Add missing parameters.
Matt Birkholz [Mon, 29 Apr 2019 20:34:18 +0000 (13:34 -0700)]
x-graphics-draw-arc: Add missing parameters.

5 years agoMake this run on ucode without nonnegative-fixnum-length/mask.
Taylor R Campbell [Sat, 20 Apr 2019 19:30:40 +0000 (19:30 +0000)]
Make this run on ucode without nonnegative-fixnum-length/mask.

5 years agoSpecify arity in newer primitives.
Taylor R Campbell [Sat, 20 Apr 2019 19:23:16 +0000 (19:23 +0000)]
Specify arity in newer primitives.

5 years agoFix spelling error.
Arthur A. Gleckler [Wed, 20 Mar 2019 00:01:19 +0000 (17:01 -0700)]
Fix spelling error.

This came from the text of SRFI 9, which I've also corrected.

5 years agoEliminate unused handler for printing URIs.
Chris Hanson [Mon, 18 Mar 2019 05:56:09 +0000 (22:56 -0700)]
Eliminate unused handler for printing URIs.

5 years agoAdd test to make sure that string slices print correctly.
Chris Hanson [Sat, 16 Mar 2019 08:10:52 +0000 (01:10 -0700)]
Add test to make sure that string slices print correctly.

5 years agoFix bug in printing of string slices.
Chris Hanson [Sat, 16 Mar 2019 05:27:01 +0000 (22:27 -0700)]
Fix bug in printing of string slices.

5 years agoRemove cleverness for SIGTERM and SIGHUP.
Chris Hanson [Sat, 16 Mar 2019 05:15:58 +0000 (22:15 -0700)]
Remove cleverness for SIGTERM and SIGHUP.

SIGTERM shouldn't be caught; instead just leave the default behavior.  SIGHUP is
sent by Emacs when the *scheme* buffer is killed; it must kill the process or
we're left with a detached process.

5 years agoFix recursion in n-ary append.
Taylor R Campbell [Sat, 23 Feb 2019 03:21:00 +0000 (03:21 +0000)]
Fix recursion in n-ary append.

5 years agoTest append on dotted lists. I broked it.
Taylor R Campbell [Sat, 23 Feb 2019 03:16:30 +0000 (03:16 +0000)]
Test append on dotted lists.  I broked it.

5 years agoAdd release note about cross-compilation.
Taylor R Campbell [Mon, 11 Feb 2019 05:07:22 +0000 (05:07 +0000)]
Add release note about cross-compilation.

5 years agoAdd release notes about big-endian and powerpc.
Taylor R Campbell [Mon, 11 Feb 2019 05:00:51 +0000 (05:00 +0000)]
Add release notes about big-endian and powerpc.

5 years agoUse arity-dispatched procedures for APPEND and APPEND!.
Taylor R Campbell [Mon, 11 Feb 2019 05:00:36 +0000 (05:00 +0000)]
Use arity-dispatched procedures for APPEND and APPEND!.

APPEND turns up hot in the compiler, because LAP = quasiquote.  Let's
skip some round-trips through the microcode, shall we?

5 years agoSimplify and factor out carefully checking for stack overflows.
Taylor R Campbell [Mon, 11 Feb 2019 00:56:37 +0000 (00:56 +0000)]
Simplify and factor out carefully checking for stack overflows.

5 years agoConfirm delv does not blow out the stack.
Taylor R Campbell [Mon, 11 Feb 2019 00:44:21 +0000 (00:44 +0000)]
Confirm delv does not blow out the stack.

5 years agoAdd some tests of blowing out the stack with SRFI 1.
Taylor R Campbell [Mon, 11 Feb 2019 00:36:36 +0000 (00:36 +0000)]
Add some tests of blowing out the stack with SRFI 1.

5 years agoTidy up deletion routines in list.scm.
Taylor R Campbell [Mon, 11 Feb 2019 00:16:06 +0000 (00:16 +0000)]
Tidy up deletion routines in list.scm.

- Share code.
- Use constant stack space.

5 years agoMerge branch 'riastradh-20190210-letrecdefn'
Taylor R Campbell [Mon, 11 Feb 2019 00:45:58 +0000 (00:45 +0000)]
Merge branch 'riastradh-20190210-letrecdefn'

- Improve performance of LETREC* and unary LETREC.
- Convert various multi-way LETRECs to internal definitions.

The compiler knows about internal definitions.  Teaching to recognize
patterns of LET and SET! produced for LETREC semantics is a lot of
trouble, and internal definitions are usually much more legible
anyway.

This is a lot of little commits in case I made a mistake so you can
bisect to find the mistake.

5 years agoConvert multi-LETREC to internal definitions in edwin/undo.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:40:10 +0000 (22:40 +0000)]
Convert multi-LETREC to internal definitions in edwin/undo.scm.

5 years agoConvert multi-LETREC to internal definitions in edwin/txtprp.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:40:05 +0000 (22:40 +0000)]
Convert multi-LETREC to internal definitions in edwin/txtprp.scm.

5 years agoConvert multi-LETREC to internal definitions in edwin/tterm.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:39:59 +0000 (22:39 +0000)]
Convert multi-LETREC to internal definitions in edwin/tterm.scm.

5 years agoConvert multi-LETREC to internal definitions in edwin/tparse.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:39:54 +0000 (22:39 +0000)]
Convert multi-LETREC to internal definitions in edwin/tparse.scm.

5 years agoConvert multi-LETREC to internal definitions in edwin/string.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:39:49 +0000 (22:39 +0000)]
Convert multi-LETREC to internal definitions in edwin/string.scm.

5 years agoConvert multi-LETREC to internal definitions in edwin/occur.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:39:41 +0000 (22:39 +0000)]
Convert multi-LETREC to internal definitions in edwin/occur.scm.

5 years agoConvert multi-LETREC to internal definitions in sos/class.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:39:07 +0000 (22:39 +0000)]
Convert multi-LETREC to internal definitions in sos/class.scm.

5 years agoConvert multi-LETREC to internal definitions in uri.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:38:53 +0000 (22:38 +0000)]
Convert multi-LETREC to internal definitions in uri.scm.

5 years agoConvert multi-LETREC to internal definitions in thread.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:38:50 +0000 (22:38 +0000)]
Convert multi-LETREC to internal definitions in thread.scm.

5 years agoConvert multi-LETREC to internal definitions in stream.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:38:44 +0000 (22:38 +0000)]
Convert multi-LETREC to internal definitions in stream.scm.

5 years agoConvert multi-LETREC to internal definitions in srfi-1.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:38:24 +0000 (22:38 +0000)]
Convert multi-LETREC to internal definitions in srfi-1.scm.

5 years agoConvert multi-LETREC to internal definitions in rfc2822-headers.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:38:10 +0000 (22:38 +0000)]
Convert multi-LETREC to internal definitions in rfc2822-headers.scm.

5 years agoConvert multi-LETREC to internal definitions in ordvec.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:37:54 +0000 (22:37 +0000)]
Convert multi-LETREC to internal definitions in ordvec.scm.

5 years agoConvert multi-LETREC to internal definitions in list.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:37:37 +0000 (22:37 +0000)]
Convert multi-LETREC to internal definitions in list.scm.

5 years agoConvert multi-LETREC to internal definitions in lambda-list.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:37:18 +0000 (22:37 +0000)]
Convert multi-LETREC to internal definitions in lambda-list.scm.

5 years agoConvert multi-LETREC to internal definitions in dispatch-cache.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:35:38 +0000 (22:35 +0000)]
Convert multi-LETREC to internal definitions in dispatch-cache.scm.

5 years agoConvert multi-LETREC to internal definitions in arith.scm.
Taylor R Campbell [Sun, 10 Feb 2019 22:35:19 +0000 (22:35 +0000)]
Convert multi-LETREC to internal definitions in arith.scm.

5 years agoConvert multi-LETREC to internal definitions.
Taylor R Campbell [Sun, 10 Feb 2019 22:25:12 +0000 (22:25 +0000)]
Convert multi-LETREC to internal definitions.

The compressor turns up hot in profiles.  This doesn't make a big
difference but it saves some closure consing and reduces some
indentation levels.

5 years agoAdd some LETREC and LETREC* tests.
Taylor R Campbell [Sun, 10 Feb 2019 22:20:32 +0000 (22:20 +0000)]
Add some LETREC and LETREC* tests.

5 years agoUse internal definitions for LETREC* and unary LETREC.
Taylor R Campbell [Sun, 10 Feb 2019 22:09:48 +0000 (22:09 +0000)]
Use internal definitions for LETREC* and unary LETREC.

The compiler will recognize these better than LET and SET!; teaching
it to recognize LET and SET! is more trouble than I want to deal with
at the moment.  Internal definitions at the scode level have LETREC*
semantics anyway, and with only a single binding, LETREC and LETREC*
coincide.

5 years agoEliminate potentially-problematic use of delay for char-set-predicate.
Chris Hanson [Sun, 10 Feb 2019 22:04:07 +0000 (14:04 -0800)]
Eliminate potentially-problematic use of delay for char-set-predicate.

5 years agoUse arity-dispatched procedures for MAP, FOR-EACH, &c.
Taylor R Campbell [Sun, 10 Feb 2019 04:34:34 +0000 (04:34 +0000)]
Use arity-dispatched procedures for MAP, FOR-EACH, &c.

Requires shuffling initialization order in make.scm a little bit so
that we can call MAKE-ARITY-DISPATCHED-PROCEDURE in list.scm.

Saves a trip through the microcode to compute the lexpr for each call
to MAP and FOR-EACH, which turned up hot in profiles.

5 years agoIntegrate NULL-LIST?.
Taylor R Campbell [Sun, 10 Feb 2019 04:32:05 +0000 (04:32 +0000)]
Integrate NULL-LIST?.

This is used all over common SRFI 1 list operations, so what should
have been a pair of conditional branches turned into unknown
procedure calls, sometimes through a trampoline to fill in default
arguments, which turned up in profiling the compiler.

5 years agoAdd GENERAL-CAR-CDR to usual integrations.
Taylor R Campbell [Sun, 10 Feb 2019 04:26:40 +0000 (04:26 +0000)]
Add GENERAL-CAR-CDR to usual integrations.

The compiler explicitly calls this for every RTL accessor, so that
would explain why this primitive was turning up hot.  Should speed up
the compiler a little to avoid diving into microcoded primitives for
every attempt to get a piece out of an RTL expression during the RTL
passes!

5 years agoPut char-set microcode table back in data structure. Edwin needs this.
Chris Hanson [Sun, 10 Feb 2019 00:20:33 +0000 (16:20 -0800)]
Put char-set microcode table back in data structure.  Edwin needs this.

5 years agoCache char set table.
Taylor R Campbell [Sat, 9 Feb 2019 16:14:15 +0000 (16:14 +0000)]
Cache char set table.

This is a provisional kludge to make string searches by character set
in Edwin less obscenely expensive than they are at the moment, which
is killing IMAIL.

Formerly we just cached these in the char-set object itself.

5 years agoIntegrate record accessors and modifiers where convenient.
Taylor R Campbell [Sat, 9 Feb 2019 16:14:57 +0000 (16:14 +0000)]
Integrate record accessors and modifiers where convenient.

Limited to record types with:

- a defined predicate name we can pass to GUARANTEE, and
- no parent type so we can statically determine the field offsets.

Obviously it would be better if the compiler could do the flow
analysis to figure out where it can statically partially evaluate
RECORD-ACCESSOR and RECORD-MODIFIER, but, y'know, exercise for the
reader.

5 years agoDefer unmasking timer interrupt until after daemon is marked running.
Taylor R Campbell [Wed, 9 Jan 2019 04:04:51 +0000 (04:04 +0000)]
Defer unmasking timer interrupt until after daemon is marked running.

Otherwise we might re-enter on timer interrupt.

5 years agoAvoid consing closures if we're low on space.
Taylor R Campbell [Wed, 9 Jan 2019 04:04:12 +0000 (04:04 +0000)]
Avoid consing closures if we're low on space.

5 years agoCan't see why I chose to discard recent samples a decade ago.
Taylor R Campbell [Sun, 6 Jan 2019 04:14:15 +0000 (04:14 +0000)]
Can't see why I chose to discard recent samples a decade ago.

5 years agoDust off stack sampler.
Taylor R Campbell [Sun, 6 Jan 2019 04:14:01 +0000 (04:14 +0000)]
Dust off stack sampler.

Use of compiled-code-address? will be needed by the
riastrah-20181220-closentry{...} branch.

5 years agoTest restarting trapped references.
Taylor R Campbell [Fri, 4 Jan 2019 05:50:47 +0000 (05:50 +0000)]
Test restarting trapped references.

This is busted on x86 because of a compiler bug involving register
reuse, to be fixed on the riastradh-20181220-closentry{...} branch.

5 years agoFix the rest of the indentation in this file.
Taylor R Campbell [Sat, 9 Feb 2019 16:54:43 +0000 (16:54 +0000)]
Fix the rest of the indentation in this file.

No functional change.

5 years agoFix bug in test introduced by eliding open-block for SYNTAX.
Taylor R Campbell [Sat, 9 Feb 2019 16:53:52 +0000 (16:53 +0000)]
Fix bug in test introduced by eliding open-block for SYNTAX.

While here, fix indentation.

5 years agoEliminate simple-top-level-environment.
Chris Hanson [Sat, 26 Jan 2019 23:21:51 +0000 (15:21 -0800)]
Eliminate simple-top-level-environment.

This hasn't worked as intended since the reader was rewritten.

5 years agoChange param:reader-fold-case? to be settable.
Chris Hanson [Sat, 26 Jan 2019 23:21:33 +0000 (15:21 -0800)]
Change param:reader-fold-case? to be settable.

5 years agox11: Fix declaration of x_graphics_set_clip_rectangle.
Matt Birkholz [Thu, 24 Jan 2019 19:42:24 +0000 (12:42 -0700)]
x11: Fix declaration of x_graphics_set_clip_rectangle.

5 years agox11 version 1.3
Matt Birkholz [Wed, 23 Jan 2019 21:42:19 +0000 (14:42 -0700)]
x11 version 1.3

5 years agox11: Punt import-x11.
Matt Birkholz [Wed, 23 Jan 2019 21:57:20 +0000 (14:57 -0700)]
x11: Punt import-x11.

5 years agoruntime.pkg: Trim old, unnecessary package exports.
Matt Birkholz [Wed, 23 Jan 2019 21:08:18 +0000 (14:08 -0700)]
runtime.pkg: Trim old, unnecessary package exports.

The (runtime x-graphics) package doesn't use have-select? nor (lately)
make-image-type.  (The (x11 device) package imports make-image-type.)

5 years agox11: Link to deprecated (runtime x-graphics) bindings when loaded.
Matt Birkholz [Wed, 23 Jan 2019 20:46:35 +0000 (13:46 -0700)]
x11: Link to deprecated (runtime x-graphics) bindings when loaded.

5 years agox11: Rename device type to "x".
Matt Birkholz [Wed, 23 Jan 2019 20:44:17 +0000 (13:44 -0700)]
x11: Rename device type to "x".

5 years agoDon't return open block at top level when syntaxing a single form.
Chris Hanson [Mon, 21 Jan 2019 04:22:28 +0000 (20:22 -0800)]
Don't return open block at top level when syntaxing a single form.

5 years agox11: Fix x-graphics-vdc-extent and x-graphics-set-clip-rectangle.
Matt Birkholz [Sun, 20 Jan 2019 19:38:04 +0000 (11:38 -0800)]
x11: Fix x-graphics-vdc-extent and x-graphics-set-clip-rectangle.

x-graphics-vdc-extent should have had one argument and returned a
vector, and x-graphics-set-clip-rectangle needed to accept floats.

5 years agoChange tests to use sub-tests as originally intended.
Chris Hanson [Sat, 12 Jan 2019 21:03:39 +0000 (13:03 -0800)]
Change tests to use sub-tests as originally intended.

I messed it up the first time and Taylor had to patch around my mess.

5 years agoEliminate unnecessary consing in char-set-empty?.
Chris Hanson [Sat, 12 Jan 2019 21:03:05 +0000 (13:03 -0800)]
Eliminate unnecessary consing in char-set-empty?.

5 years agoFind all relevant shared objects. Handle NMV headers in vectors.
Chris Hanson [Sat, 12 Jan 2019 07:41:17 +0000 (23:41 -0800)]
Find all relevant shared objects.  Handle NMV headers in vectors.

5 years agoFix pasto for LIARC build of SOS.
Taylor R Campbell [Sat, 12 Jan 2019 01:37:43 +0000 (01:37 +0000)]
Fix pasto for LIARC build of SOS.

5 years agogitignore LIARC build products.
Taylor R Campbell [Sat, 12 Jan 2019 01:26:08 +0000 (01:26 +0000)]
gitignore LIARC build products.

5 years agoDon't leave the intermediate run-build shell process hanging around.
Taylor R Campbell [Sat, 12 Jan 2019 00:05:34 +0000 (00:05 +0000)]
Don't leave the intermediate run-build shell process hanging around.

5 years agoRun the ChaCha self-tests too.
Taylor R Campbell [Fri, 11 Jan 2019 09:42:12 +0000 (09:42 +0000)]
Run the ChaCha self-tests too.

5 years agoRefuse to let the MD5 primitives run unless self-test passes.
Taylor R Campbell [Fri, 11 Jan 2019 09:37:48 +0000 (09:37 +0000)]
Refuse to let the MD5 primitives run unless self-test passes.

5 years agoFix buffer overflow in self-test. Derp.
Taylor R Campbell [Fri, 11 Jan 2019 09:36:56 +0000 (09:36 +0000)]
Fix buffer overflow in self-test.  Derp.

This self-test was not used; there's a separate test in test-md5.scm
which is fine.  (The result in this self-test is also correct -- it
just never got tested anywhere.)

5 years agoFix byte ordering: encode state words in little-endian; don't memcpy!
Taylor R Campbell [Fri, 11 Jan 2019 09:36:00 +0000 (09:36 +0000)]
Fix byte ordering: encode state words in little-endian; don't memcpy!

How did I miss this earlier!?

5 years agoExploit oddness to get bit-for-bit identical results on +/-.
Taylor R Campbell [Fri, 11 Jan 2019 08:35:19 +0000 (08:35 +0000)]
Exploit oddness to get bit-for-bit identical results on +/-.

Fixes test failure on NetBSD/powerpc:

;|logit-logistic-1/2/(.2310585786300049 1.)| failed 1 sub-tests out of 1 in 0. seconds:
     assertion 1: value was -.23105857863000487 but expected an object = to -.2310585786300049

5 years agoUse a much simpler endian-independent execute cache mechanism.
Taylor R Campbell [Fri, 11 Jan 2019 06:35:27 +0000 (06:35 +0000)]
Use a much simpler endian-independent execute cache mechanism.

Requires no changes to the SVM1 byte code, so existing unlinked .com
files will continue to work (except for those created in the past
couple hours with my big-endian bodge that entailed no changes to the
little-endian hack), although built bands will confuse the microcode
because what cmpint stores in execute caches in memory changed.

- Before linking, an execution cache is simply the two words, as
  before on little-endian systems:

    <frame size> (fixnum)
    <name> (symbol)

- After linking, the frame size remains untouched and the name is
  replaced by the untagged address of the target:

    <frame size> (fixnum)
    <target> (untagged)

- INVOCATION:UUO-LINK now generates an (indirect-jump (pc-relative
  <cache>)) instruction, which already does the right thing:
  dereferences PC + offset to find a instruction address, and then
  jumps to that address.

5 years agoFix lambda-body -> scode-lambda-body straggler.
Taylor R Campbell [Fri, 11 Jan 2019 05:16:55 +0000 (05:16 +0000)]
Fix lambda-body -> scode-lambda-body straggler.

5 years agoDesign big-endian uuo link execute caches.
Taylor R Campbell [Fri, 11 Jan 2019 04:53:02 +0000 (04:53 +0000)]
Design big-endian uuo link execute caches.

The little-endian hack to overwrite the tag with instructions doesn't
work on big-endian because it's the datum, not the tag, that's at the
end of the word in the frame size.

There's no room for the instructions before anything here, so add
another word and move the frame size to the end.  Kinda wasteful --
for that matter, it's not clear why we need to have any instructions
here at all, when we could just have INVOCATION:UUO-LINK compile to
an IJUMP instruction itself.

5 years agoTeach SVM back end how to assemble big-endian instruction streams.
Taylor R Campbell [Fri, 11 Jan 2019 04:52:15 +0000 (04:52 +0000)]
Teach SVM back end how to assemble big-endian instruction streams.

Gotta do 'em backwards because the words are backwards in a bit
string on big-endian systems.

5 years agoFix ordering of _words_ in fasumped bit strings on big-endian.
Taylor R Campbell [Fri, 11 Jan 2019 04:51:25 +0000 (04:51 +0000)]
Fix ordering of _words_ in fasumped bit strings on big-endian.

Apparently the byte order within a word affects the word order within
a bit string.

5 years agoTweaks to make Edwin cross-compilable.
Taylor R Campbell [Fri, 11 Jan 2019 04:50:02 +0000 (04:50 +0000)]
Tweaks to make Edwin cross-compilable.

5 years agoNothing architecturally limits powerpc to high memory.
Taylor R Campbell [Fri, 11 Jan 2019 04:47:54 +0000 (04:47 +0000)]
Nothing architecturally limits powerpc to high memory.

Individual operating systems may, but none that I've encountered.

We may revisit this if we change SVM1 to always work in high memory.

5 years agoUse HOST_CC, default CC, to compile findprim.
Taylor R Campbell [Fri, 11 Jan 2019 04:45:19 +0000 (04:45 +0000)]
Use HOST_CC, default CC, to compile findprim.

This needs to run on the host system, not on the target system.

This way we can cross-compile the microcode if you have a C
cross-compiler handy, which makes iterating development a lot faster
when the target's native C compiler is painfully slow.

5 years agoMake powerpc floating-point exceptions fit in fixnums on 32-bit.
Taylor R Campbell [Thu, 10 Jan 2019 04:04:22 +0000 (04:04 +0000)]
Make powerpc floating-point exceptions fit in fixnums on 32-bit.