mit-scheme.git
5 years agoSimplify flo:-inf.0 and flo:+inf.0.
Taylor R Campbell [Sun, 25 Aug 2019 18:32:03 +0000 (18:32 +0000)]
Simplify flo:-inf.0 and flo:+inf.0.

We have put out a release now whose reader understands +inf.0/-inf.0,
so we should be able to use the notation.

Fixes bugs with incorrectly raising the divide-by-zero exception flag
(even if no trap), e.g.:

;|log1mexp-invalid/(4.9406564584124654e-324)| failed 1 sub-tests out of 1 in 0. seconds:
     assertion 3: value was 3 but expected an object eqv? to 1

Here 3 = (invalid-operation divide-by-zero), 1 = (invalid-operation)
[aarch64].

5 years agoFix comment about odd rounding mode.
Taylor R Campbell [Sat, 24 Aug 2019 07:10:39 +0000 (07:10 +0000)]
Fix comment about odd rounding mode.

5 years agoAdd missing include guards.
Taylor R Campbell [Sat, 24 Aug 2019 07:09:39 +0000 (07:09 +0000)]
Add missing include guards.

5 years agoUpdate and clarify fp-env documentation.
Taylor R Campbell [Sat, 24 Aug 2019 07:07:11 +0000 (07:07 +0000)]
Update and clarify fp-env documentation.

5 years agoSimplify flo:update-environment!.
Taylor R Campbell [Sat, 24 Aug 2019 04:32:50 +0000 (04:32 +0000)]
Simplify flo:update-environment!.

Caller is interested in exceptions afterward, so it is not sensible
to deregister interest in the floating-point environment afterward.
If you really want that, surround it in flo:preserving-environment.

5 years agoFix two bugs in floating-point environment.
Taylor R Campbell [Sat, 24 Aug 2019 04:26:31 +0000 (04:26 +0000)]
Fix two bugs in floating-point environment.

1. Don't cache it in the current thread.

   We can't mark everywhere the cache needs to be invalidated --
   i.e., every floating-point instruction -- and it's not clear
   there's any performance benefit to the cache anyway.  The main
   performance cost, as I recall, was swapping environments on every
   thread switch, which we avoid for all threads in the default
   environment.

2. The default environment initialization left the machine in a wacky
   state after reset-package!, which caused many spurious exception
   traps once I undid the cache.  There's no need to preserve the
   machine environment here; we are setting up the default
   environment, after all, so the environment we're in when done
   should be the default one.

5 years agoTest busted flo:set-environment!.
Taylor R Campbell [Sat, 24 Aug 2019 01:40:11 +0000 (01:40 +0000)]
Test busted flo:set-environment!.

5 years agoFix multiplication and division by purely imaginary numbers.
Taylor R Campbell [Tue, 20 Aug 2019 03:40:24 +0000 (03:40 +0000)]
Fix multiplication and division by purely imaginary numbers.

That is, complex numbers whose real part is exact zero.

5 years agoTest multiplication and division by +i and -i.
Taylor R Campbell [Tue, 20 Aug 2019 03:13:51 +0000 (03:13 +0000)]
Test multiplication and division by +i and -i.

We do not currently follow Kahan's recommenations that when the real
part is exactly zero, the arithmetic be done by negation rather than
multiplication.

5 years agoFix edge cases in ANGLE.
Taylor R Campbell [Tue, 20 Aug 2019 03:03:25 +0000 (03:03 +0000)]
Fix edge cases in ANGLE.

5 years agoExpand edge cases for ANGLE.
Taylor R Campbell [Tue, 20 Aug 2019 02:51:27 +0000 (02:51 +0000)]
Expand edge cases for ANGLE.

Based on Kahan's `Much Ado about Nothing's Sign Bit' paper.  We screw
up some zero edge cases.

5 years agoFix references incorrectly marked with EVR().
Chris Hanson [Mon, 19 Aug 2019 22:33:00 +0000 (15:33 -0700)]
Fix references incorrectly marked with EVR().

5 years ago`x ... ...' is busted in syntax-rules.
Taylor R Campbell [Sat, 17 Aug 2019 13:54:34 +0000 (13:54 +0000)]
`x ... ...' is busted in syntax-rules.

5 years agoMerge branch 'riastradh-20181220-closentry-v12'
Taylor R Campbell [Fri, 16 Aug 2019 05:02:00 +0000 (05:02 +0000)]
Merge branch 'riastradh-20181220-closentry-v12'

5 years agoTweak logit1/2+ condition number plot for clarity.
Taylor R Campbell [Fri, 16 Aug 2019 04:59:52 +0000 (04:59 +0000)]
Tweak logit1/2+ condition number plot for clarity.

5 years agoFactor out common PostScript code for plotting.
Taylor R Campbell [Fri, 16 Aug 2019 03:54:49 +0000 (03:54 +0000)]
Factor out common PostScript code for plotting.

Should make this a little more maintainable.

5 years agoUniform code and style for plots.
Taylor R Campbell [Fri, 16 Aug 2019 02:54:44 +0000 (02:54 +0000)]
Uniform code and style for plots.

Tweak line widths a little bit to roughly match cmmi10 (Computer
Modern Math Italic 10pt) rule widths for axes, and a little thicker
for the plots themselves, for the printed manual.

5 years agoProduce 300dpi, not 72dpi, PNGs for HTML output.
Taylor R Campbell [Fri, 16 Aug 2019 02:51:41 +0000 (02:51 +0000)]
Produce 300dpi, not 72dpi, PNGs for HTML output.

5 years agoUse TLS/SSL for links to <srfi.schemers.org>.
Arthur A. Gleckler [Thu, 15 Aug 2019 20:17:00 +0000 (13:17 -0700)]
Use TLS/SSL for links to <srfi.schemers.org>.

5 years agoAdd release note.
Taylor R Campbell [Thu, 15 Aug 2019 14:24:35 +0000 (14:24 +0000)]
Add release note.

5 years agoBump COMPILER_INTERFACE_VERSION.
Taylor R Campbell [Thu, 15 Aug 2019 05:19:18 +0000 (05:19 +0000)]
Bump COMPILER_INTERFACE_VERSION.

Make attempts to use old .com files fail a little more obviously.

5 years agoSet default target to all for cross-builds too.
Taylor R Campbell [Thu, 15 Aug 2019 04:57:56 +0000 (04:57 +0000)]
Set default target to all for cross-builds too.

No need to make it default to cross-host.  If you want to separate
the cross-host/cross-target stages, you'll know to do cross-host
anyway.

5 years agoAvoid spurious fallthrough (fortunately harmless here).
Taylor R Campbell [Thu, 15 Aug 2019 04:45:27 +0000 (04:45 +0000)]
Avoid spurious fallthrough (fortunately harmless here).

5 years agoTest fma exceptions too.
Taylor R Campbell [Wed, 14 Aug 2019 01:31:56 +0000 (01:31 +0000)]
Test fma exceptions too.

5 years agoAdd fma, fused-multiply/add.
Taylor R Campbell [Tue, 13 Aug 2019 23:25:14 +0000 (23:25 +0000)]
Add fma, fused-multiply/add.

Not yet open-coded anywhere.  Will be a huge pain on x86.  No aarch64
flonum open-coding at all yet.

(Maybe flo:fast-fma? should return false if it's not open-coded...)

5 years agoUse a different reflect code number for compiled invocations. origin/riastradh-20181220-closentry-v12
Taylor R Campbell [Sun, 6 Jan 2019 03:59:31 +0000 (03:59 +0000)]
Use a different reflect code number for compiled invocations.

Teach the continuation parser about it.

Turns out this doesn't actually coincide with the format the v8
microcode used for APPLY-COMPILED, which also has a frame size,
presumably so arity dispatch could be done in the callee.

(Not that the v8 stuff matters these days; maybe we should just flush
those parts of conpar.scm.)

5 years agoOpen-code WITH-STACK-MARKER too.
Taylor R Campbell [Sat, 5 Jan 2019 15:53:23 +0000 (15:53 +0000)]
Open-code WITH-STACK-MARKER too.

Saves a trip through reflect-to-interface, which would break the
return address branch target prediction stack.

5 years agoShare closure interrupt labels.
Taylor R Campbell [Sat, 5 Jan 2019 06:31:35 +0000 (06:31 +0000)]
Share closure interrupt labels.

The interrupt-handling subroutine just uses the tagged entry on the
stack, so no need for a separate call for each closure.  If nothing
else this should save some code size.

Also, in open-coding of with-interrupt-mask, reuse pop-return with
interrupt checks.

5 years agoTidy up compiler utility return addresses.
Taylor R Campbell [Sat, 5 Jan 2019 03:36:51 +0000 (03:36 +0000)]
Tidy up compiler utility return addresses.

Use compiled returns for the ones that are likely to return to Scheme
like lookups and assignments, and compiled entries for the ones that
are likely to return to microcode like interrupts.

Architectures on which compiled entries and compiled returns have the
same format will see no difference: compiled code passes in an
untagged return address either way.

On amd64, where compiled entries and compiled returns are different:

- For hooks that act like leaf subroutines and never return to
  microcode, use plain CALL/RET in pairs.

- For hooks that are subroutines likely to return to Scheme
  immediately but might return to microcode in screw cases, use

        (CALL ,hook)                    ; Invoke hook with untagged ret addr...
        (JMP (@PCR ,continuation))      ; ...which jumps to formatted entry.
        (WORD ...)
        (BLOCK-OFFSET ,continuation)
        (QUAD U 0)
       (LABEL ,continuation)
        ...                             ; continuation instructions

  For the non-screw cases this keeps CALL/RET paired.

- For hooks that always defer to microcode, namely to handle
  interrupts, use

        (LEA Q (R ,rbx) (@PCR ,continuation))
        (JMP ,hook)

  Here it doesn't really whether the CALL/RET is paired because we're
  going to wreck the return address branch prediction stack no matter
  what, but it is convenient to have the entry address rather than
  the return address in the compiled utility.

5 years agoUse ret for returns from interface and from generic arithmetic hooks.
Taylor R Campbell [Fri, 4 Jan 2019 04:58:51 +0000 (04:58 +0000)]
Use ret for returns from interface and from generic arithmetic hooks.

Let's take advantage of the return address stack branch target
predictor rather than unceremoniously trash it, shall we?

5 years agoOpen-code with-interrupt-mask, with-interrupts-reduced.
Taylor R Campbell [Thu, 3 Jan 2019 19:10:45 +0000 (19:10 +0000)]
Open-code with-interrupt-mask, with-interrupts-reduced.

Not open-coded at the RTL level, but at the LAP level.

This way we avoid going through a return trampoline, which wrecks the
return address stack branch target predictor as long as we transition
between Scheme and C to handle trampolines.

Most of the work, of munging MEMTOP and STACK_GUARD, is relegated to
an assembly hook subroutine so the code doesn't expand too much.  The
format of the stack still uses reflect-to-interface so that this
should require no changes to the continuation parser to get the
interrupt masks right, but with an intermediate empty-frame
continuation that actually calls the assembly hook and then pops
reflect-to-interface off.

5 years agoAllow return_to_compiled_code to return to compiled entries.
Taylor R Campbell [Thu, 3 Jan 2019 03:19:54 +0000 (03:19 +0000)]
Allow return_to_compiled_code to return to compiled entries.

The earlier compiled entry/return split left various utility calls
pushing compiled entries, rather than compiled return addresses, for
continuations on the stack -- notably interrupt routines, the linker
utility, and interpreter calls.

I arranged for these to all to use RETURN_TO_SCHEME_ENTRY (or
JUMP_TO_CC_ENTRY), but missed one spot: the continuations constructed
by STACK-FRAME->CONTINUATION, which use return_to_compiled_code,
which in turn expected a compiled return rather than a compiled entry
and choked.

The interrupt routines, linker utility, and interpreter calls should
all be adapted to take returns rather than entries (which is another
ABI-breaking flag day), but this will do for now.

5 years agoSave interpreter result too before anything in continuation.
Taylor R Campbell [Wed, 2 Jan 2019 23:44:09 +0000 (23:44 +0000)]
Save interpreter result too before anything in continuation.

On x86, the interpreter call result register is eax/rax, register 0,
which is also the first register we hand out for register allocation.
The continuation for an interpreter call result uses register 0, but
if the caller uses a dynamic link, the continuation first pops its
frame via the dynamic link...using a temporary register that is
guaranteed to be register 0 since it's the first one the register
allocator hands out.  The code sequence looks something like this:

;; (interpreter-call:cache-reference label-10 (register #x24) #f)
(mov q (r 2) (r 1))
(call (@ro 6 #xd0))
;; (continuation-entry label-10)
(word u #xfffc)
(block-offset label-10)
label-10:
;; (assign (register #x25) (post-increment (register 4) 1))
(pop q (r 0))
;; (assign (register #x26) (object->address (register #x25)))
(and q (r 0) (r 5))
;; (assign (offset (register 6) (machine-constant 4)) (register #x26))
(mov q (@ro 6 #x20) (r 0))
;; (assign (register #x23) (register 0))
(jmp (@pcr label-13))

On entry to the continuation, register 0 holds the value we want,
chosen as a machine alias for pseudo-register #x23 in the procedure
body, but the first thing the continuation does is pop the dynamic
link into register 0, ruining the party.

This is rather tricky to trigger because it turns out in _non-error_
cases, compiled code never asks the interpreter to evaluate a cache
reference that will return a value.  But you can trigger this by
referencing an unassigned variable and invoking a restart, which does
cause the cache reference to return a value:

;; Unassigned, so compiled code will ask interpreter for help.
(define null)

;; Recursive procedure for which the compiler uses a dynamic link.
(define (map f l)
  (let loop ((l l))
    (if (pair? l)
        (cons (f (car l)) (loop (cdr l)))
        null)))

;; Invoke the restart that will return from the cache reference with
;; a value.
(bind-condition-handler (list condition-type:unassigned-variable)
    (lambda (condition)
      condition
      (use-value '()))
  (lambda ()
    (map + '(1 2 3))))
;Value: (1 2 3 . #[false 15 #xea9c18])

Here #[false 15 #xea9c18] is the (detagged) dynamic link, a pointer
into the stack, not the result we wanted at all.

5 years agoMake entries point to _after_ the PC offset.
Taylor R Campbell [Mon, 31 Dec 2018 21:08:22 +0000 (21:08 +0000)]
Make entries point to _after_ the PC offset.

This saves a jump in closure headers, and makes non-closure entries
have a nice PC offset of 0 rather than an awkward PC offset of 8.
However, this causes all indirect calls to have an additional offset
of -8 in the addressing mode -- not clear yet how much this hurts.

WARNING: This changes the amd64 compiled code interface so that new
compiled code requires a new microcode and vice versa.  Further, you
must set compiler:cross-compiling? to #t to compile the system,
because compiled code block offsets are now in a different place
relative to compiled entries, so the native fasdumper of an old
microcode can't handle compiled entries produced by a new compiler.

5 years agoLoad the fallback into rax so caller needs no conditional branch.
Taylor R Campbell [Wed, 2 Jan 2019 06:10:52 +0000 (06:10 +0000)]
Load the fallback into rax so caller needs no conditional branch.

WARNING: This changes the amd64 compiled code interface so that new
compiled code requires a new microcode.  (However, a new microcode
should handle old compiled code without trouble, since old compiled
code treats rax as garbage at this point, and LEA does not affect
flags.)

5 years agoUse BTS to affix single-bit type tags.
Taylor R Campbell [Mon, 31 Dec 2018 20:32:37 +0000 (20:32 +0000)]
Use BTS to affix single-bit type tags.

5 years agoRelax register constraints for tagging rule.
Taylor R Campbell [Sat, 29 Dec 2018 21:57:47 +0000 (21:57 +0000)]
Relax register constraints for tagging rule.

No need to keep the source alive here -- use move-to-target and allow
any temporary register instead.

5 years agoSimplify hook calls.
Taylor R Campbell [Sat, 29 Dec 2018 16:40:02 +0000 (16:40 +0000)]
Simplify hook calls.

No need for CALL or the stack to be involved: just load PC-relative
address into RBX directly.  Should shave off a few bytes of code.

WARNING: This changes the amd64 compiled code interface so that new
compiled code requires a new microcode and vice versa.

5 years agoConvert x86-64 to use rax as value register.
Taylor R Campbell [Sun, 30 Dec 2018 21:28:19 +0000 (21:28 +0000)]
Convert x86-64 to use rax as value register.

WARNING: This changes the amd64 compiled code interface so that new
compiled code requires a new microcode and vice versa.

5 years agoAllow careful use of available machine registers in RTL.
Taylor R Campbell [Sun, 30 Dec 2018 21:01:00 +0000 (21:01 +0000)]
Allow careful use of available machine registers in RTL.

This will enable us to put fixed machine registers such as the value
register carefully into the RTL even if they are ordinarily available
as pseudo-register aliases for machine register allocation.

- CGEN-RINST calls TARGET-MACHINE-REGISTER! if the target of an RTL
  instruction is a machine register that is ordinarily available for
  register allocation.

- REGISTER-ALIAS declines to return any aliases reserved by
  TARGET-MACHINE-REGISTER!, until...

- DELETE-DEAD-REGISTERS! makes the target machine registers available
  again for REGISTER-ALIAS so that they can be chosen as targets.
  (However, they still won't be chosen as temporaries.)

- MOVE-TO-ALIAS-REGISTER! -- which may be used only after all other
  source registers have been chosen -- also allows the machine target
  to be used as a source alias in order to avoid unnecessary register
  motion.

- Don't propagate RTL references to available machine registers in
  common subexpression elimination or in code compression.

  Since the machine register might be allocated as an alias for another
  register, it can't be moved around.  The RTL generator ensures these
  references appear only at the beginning or end of a block where the
  machine register cannot be an alias for any live pseudo-register.

5 years agoEnsure register:value appears first or last in block.
Taylor R Campbell [Sun, 30 Dec 2018 21:01:58 +0000 (21:01 +0000)]
Ensure register:value appears first or last in block.

Either it is the first register referenced, or the last register
assigned.  This will enable us to use a machine register that is
normally available for register allocation, without having to worry
that it may be an alias for a live pseudo-register.

- In continuations that receive a value through register:value,
  create a temporary register and make the first instruction be an
  assignment of register:value to the temporary register, before we
  the pop-extra.

  The RTL optimizer avoids propagating this alias so the assignment
  will stay in place, but later on, the LAP generator will take
  advantage of the alias to avoid generating additional unnecessary
  code.

- In returns that store a value in register:value, create a temporary
  register and assign it where we used to assign to register:value,
  and then store the temporary in register:value as the very last
  instruction before pop-return after any frame-popping which might
  involve temporaries.

5 years agoOptimize execute caches: avoid indirect jumps if possible.
Taylor R Campbell [Sun, 30 Dec 2018 21:26:16 +0000 (21:26 +0000)]
Optimize execute caches: avoid indirect jumps if possible.

No change to the compiled code interface: this just generates faster
code in execute caches if it can.

5 years agoGenerate per-invocation jmp instructions.
Taylor R Campbell [Sat, 29 Dec 2018 04:12:28 +0000 (04:12 +0000)]
Generate per-invocation jmp instructions.

I hypothesize that this will help the CPU's branch target predictor
be more precise than having a single jmp instruction inside an
assembly hook that actually jumps to an unknown procedure.

Empirically, this gives about 5x speed improvement for a
microbenchmark involving unknown procedure calls:

(define x (make-vector 1))

(define (test-01 x)
  (define (g)
    (vector-set! x 0 0))
  (g)
  ((identity-procedure g)))

(define (test-10 x)
  (define (g)
    (vector-set! x 0 0))
  ((identity-procedure g))
  (g))

(define (repeat n f x)
  (show-time
   (lambda ()
     (do ((i 0 (fix:+ i 1)))
         ((fix:>= i n))
       (f x)))))

; Before:
(repeat 10000000 test-01 x)
;process time: 1420 (1370 RUN + 50 GC); real time: 1427

; After:
(repeat 10000000 test-01 x)
;process time: 290 (220 RUN + 70 GC); real time: 312

Caveat: This is on top of a bunch of other experiments.
XXX Redo this in isolation.

WARNING: This adds hooks to the amd64 compiled code interface, so new
compiled code requires a new microcode.  (However, a new microcode
should handle old compiled code just fine.)

5 years agoUse CALL/RET for pushing and returning to continuations on amd64.
Taylor R Campbell [Sat, 29 Dec 2018 01:11:00 +0000 (01:11 +0000)]
Use CALL/RET for pushing and returning to continuations on amd64.

Calls now look like:

  ;; (assign (register #x123) (cons-pointer tag (entry:continuation cont)))
  (CALL (@PCR pushed))
  (JMP (@PCR cont))
pushed:
  (OR Q (@R ,rsp) (&U ,tag))
  ...
  (JMP (@PCR uuo-link))

Returns now look like:

  ;; (pop-return)
  (AND Q (@R ,rsp) (R ,regnum:datum-mask))
  (RET)

These should happen in pairs, so that we can take advantage of the
CPU's return address branch target prediction stack rather than
abusing the indirect jump branch target predictor.

WARNING: This changes the amd64 compiled code interface, so new
compiled code requires a new microcode.  (A new microcode might be
able to handle existing compiled code just fine.)

5 years agoSplit compiled entries and compiled return addresses.
Taylor R Campbell [Fri, 28 Dec 2018 20:51:02 +0000 (20:51 +0000)]
Split compiled entries and compiled return addresses.

Reallocate tag 4 for return addresses.

This way, a compiled entry can be a pointer to a PC offsets so that
we can construct closures without dynamically generating code and
wrecking the instruction cache, while a compiled return addresses can
be a pointer to a PC, since we never dynamically create indirections
for returns.

For now, the runtime can handle both tags for return addresses.

XXX Only done and tested on x86-64 for now.  Other architectures need
to be tested.  Might be worthwhile to do this on i386 too, if anyone
still cares about i386.

WARNING: This changes the compiled code interface on all
architectures, so you'll have to build a new compiler running on an
old microcode and use that to compile a new system afresh.

5 years agoUse indirection for entry points on amd64.
Taylor R Campbell [Thu, 27 Dec 2018 03:58:38 +0000 (03:58 +0000)]
Use indirection for entry points on amd64.

A compiled entry is now a tagged address A pointing to a 64-bit word
W such that A + W points to instruction to execute.

This adds a memory indirection overhead to unknown procedure calls,
but it has the effect that consing a closure only involves writing
data memory, not instruction memory that must be reloaded into the
CPU's instruction cache.

WARNING: This changes the amd64 compiled code interface, so you'll
have to build a new compiler running on an old microcode and use that
to compile a new system afresh.

5 years agoAvoid CALL without RET for closure entries, hooks, and trampolines.
Taylor R Campbell [Thu, 20 Dec 2018 04:58:07 +0000 (04:58 +0000)]
Avoid CALL without RET for closure entries, hooks, and trampolines.

This will wreck the CPU's return address branch target predictor.

This is an intermediate change en route to using paired CALL/RET for
continuation pushes and pop-returns in order to take advantage of the
CPU's branch target predictor.

WARNING: This changes the format of compiled closures, and as such,
new compiled code requires a new microcode and vice versa.

5 years agoEliminate return/entry compiled invocation pun.
Taylor R Campbell [Thu, 27 Dec 2018 03:58:50 +0000 (03:58 +0000)]
Eliminate return/entry compiled invocation pun.

There is a small cost to this.  My hope is that it will be offset by:

1. distinguishing compiled entries from compiled return addresses, in
   order to enable...

2. using indirection for compiled entries so closures don't need
   dynamically generated code, and finally...

3. using direct instruction addresses for compiled return addresses
   so we can exploit the return stack branch predictor,

which all requires this change in order to function correctly.

No change to compiled code interface intended.

5 years agoUse ln -n to avoid following symlinks to directories.
Taylor R Campbell [Tue, 13 Aug 2019 14:26:13 +0000 (14:26 +0000)]
Use ln -n to avoid following symlinks to directories.

Evidently -h is the BSD option for `don't follow symlinks', following
the convention of chmod and other utilities, while -n is the GNU
option; fortunately at least NetBSD ln has had -n too for GNU
compatibility for decades so I'm satisfied with -n.  (Neither one is
POSIX.)

5 years agoAllow hyphenation of log-probability, log-logistic, ill-conditioned.
Taylor R Campbell [Sat, 10 Aug 2019 15:18:49 +0000 (15:18 +0000)]
Allow hyphenation of log-probability, log-logistic, ill-conditioned.

Can't find a good way to make TeX hyphenate a word that already has a
hyphen in it, so this'll have to do.

5 years agoClarify error amplification.
Taylor R Campbell [Sat, 10 Aug 2019 15:18:41 +0000 (15:18 +0000)]
Clarify error amplification.

5 years agoFix punctuation in display.
Taylor R Campbell [Sat, 10 Aug 2019 15:18:20 +0000 (15:18 +0000)]
Fix punctuation in display.

5 years agoAvoid Unicode in texinfo.
Taylor R Campbell [Sat, 10 Aug 2019 15:17:40 +0000 (15:17 +0000)]
Avoid Unicode in texinfo.

Modern LaTeX can handle it but texinfo can't.

5 years agoAdd missing definition of exact as noticed by GJS.
Chris Hanson [Sat, 10 Aug 2019 21:31:04 +0000 (14:31 -0700)]
Add missing definition of exact as noticed by GJS.

Also update the text of inexact and exact to match R7RS.

5 years agoFix thinko in previous change.
Chris Hanson [Sat, 10 Aug 2019 21:04:08 +0000 (14:04 -0700)]
Fix thinko in previous change.

5 years agoChange write to use datum labels only when cycles are present.
Chris Hanson [Sat, 10 Aug 2019 05:42:22 +0000 (22:42 -0700)]
Change write to use datum labels only when cycles are present.

This is required by R7RS but was not understood earlier.

5 years agoImplement bundle delegation using a more general combinator mechanism.
Chris Hanson [Mon, 5 Aug 2019 05:05:54 +0000 (22:05 -0700)]
Implement bundle delegation using a more general combinator mechanism.

5 years agoNeed to load sf before host-adapter.scm these days, it seems.
Taylor R Campbell [Sat, 10 Aug 2019 04:43:58 +0000 (04:43 +0000)]
Need to load sf before host-adapter.scm these days, it seems.

5 years agoAvoid bash.
Taylor R Campbell [Sat, 10 Aug 2019 04:22:21 +0000 (04:22 +0000)]
Avoid bash.

bash is not reliably available, and on the systems where it is
available, it is often not installed at /bin/bash.

5 years agoFix reading hashed object notation #[foo 123].
Taylor R Campbell [Fri, 9 Aug 2019 16:56:01 +0000 (16:56 +0000)]
Fix reading hashed object notation #[foo 123].

5 years agoTest hashed object notation.
Taylor R Campbell [Fri, 9 Aug 2019 16:53:43 +0000 (16:53 +0000)]
Test hashed object notation.

Currently busted for #[foo 123].

5 years agox11-screen: Fix cut/paste after upcasing X atom names.
Matt Birkholz [Fri, 9 Aug 2019 18:29:48 +0000 (11:29 -0700)]
x11-screen: Fix cut/paste after upcasing X atom names.

5 years agoDo not install non-existent runtime options hashtb and krypt.
Matt Birkholz [Wed, 7 Aug 2019 19:21:35 +0000 (12:21 -0700)]
Do not install non-existent runtime options hashtb and krypt.

5 years agox11-screen: downcase symbols, most names; fix copyright notices
Matt Birkholz [Wed, 7 Aug 2019 00:56:39 +0000 (17:56 -0700)]
x11-screen: downcase symbols, most names; fix copyright notices

5 years agox11: downcase symbols, most names; fix copyright notices
Matt Birkholz [Wed, 7 Aug 2019 01:01:48 +0000 (18:01 -0700)]
x11: downcase symbols, most names; fix copyright notices

5 years agopgsql: downcase symbols, most names; fix copyright notices
Matt Birkholz [Wed, 7 Aug 2019 00:05:48 +0000 (17:05 -0700)]
pgsql: downcase symbols, most names; fix copyright notices

5 years agomcrypt: downcase a symbol, most names; fix copyright notices
Matt Birkholz [Tue, 6 Aug 2019 23:57:47 +0000 (16:57 -0700)]
mcrypt: downcase a symbol, most names; fix copyright notices

5 years agogdbm: downcase symbols, most names; fix copyright notices
Matt Birkholz [Wed, 7 Aug 2019 00:51:55 +0000 (17:51 -0700)]
gdbm: downcase symbols, most names; fix copyright notices

5 years agoblowfish: downcase symbols, most names; fix copyright notices
Matt Birkholz [Tue, 6 Aug 2019 22:44:33 +0000 (15:44 -0700)]
blowfish: downcase symbols, most names; fix copyright notices

5 years agoffi: downcase symbols, most names
Matt Birkholz [Tue, 6 Aug 2019 22:33:34 +0000 (15:33 -0700)]
ffi: downcase symbols, most names

5 years agoAdd pgsql-shim.h as a dependency of pgsql-shim.la.
Matt Birkholz [Tue, 6 Aug 2019 21:38:47 +0000 (14:38 -0700)]
Add pgsql-shim.h as a dependency of pgsql-shim.la.

5 years agoPunt CREF's 9.2-compatible deprecated exports syntax.
Matt Birkholz [Tue, 6 Aug 2019 21:36:51 +0000 (14:36 -0700)]
Punt CREF's 9.2-compatible deprecated exports syntax.

Drop support for the awkward, undocumented and hopefully unused
EXPORT-DEPRECATED syntax too.

5 years agoFix definition of MIT_SCHEME_PKD; use _OS_SUFFIX from src/configure.
Matt Birkholz [Wed, 7 Aug 2019 18:44:23 +0000 (11:44 -0700)]
Fix definition of MIT_SCHEME_PKD; use _OS_SUFFIX from src/configure.

5 years agoEdwin/Makefile.am: Include sources.scm. Punt unnecessary overrides.
Matt Birkholz [Sun, 4 Aug 2019 23:03:35 +0000 (16:03 -0700)]
Edwin/Makefile.am: Include sources.scm.  Punt unnecessary overrides.

5 years agoPlugin builds: Improved tags-fix.sh. Handle .cdecl files specially.
Matt Birkholz [Sun, 4 Aug 2019 23:22:10 +0000 (16:22 -0700)]
Plugin builds: Improved tags-fix.sh.  Handle .cdecl files specially.

5 years agoPlugin builds: Add adapter.c to _shim_la_SOURCES, not _LIBADD.
Matt Birkholz [Sun, 4 Aug 2019 22:45:58 +0000 (15:45 -0700)]
Plugin builds: Add adapter.c to _shim_la_SOURCES, not _LIBADD.

5 years agoPlugin builds: Use MIT_SCHEME_PKD, not MIT_SCHEME_OS_SUFFIX.
Matt Birkholz [Sun, 4 Aug 2019 20:52:47 +0000 (13:52 -0700)]
Plugin builds: Use MIT_SCHEME_PKD, not MIT_SCHEME_OS_SUFFIX.

5 years agoPlugin builds: Do not include generated -const.c in dist.
Matt Birkholz [Sun, 4 Aug 2019 22:25:14 +0000 (15:25 -0700)]
Plugin builds: Do not include generated -const.c in dist.

5 years agoPlugin builds: Restore dependence of stamp-scheme on -const.bin.
Matt Birkholz [Sun, 4 Aug 2019 23:56:01 +0000 (16:56 -0700)]
Plugin builds: Restore dependence of stamp-scheme on -const.bin.

The stamp-scheme target builds -types.bin, not -const.bin.  The
-const.bin comes from plugin-const.scm which comes from ./plugin-const
which comes from -const.c which is a product of stamp-shim.

5 years agoSilence autogen.shs when plugins are built separately.
Matt Birkholz [Sun, 4 Aug 2019 16:59:14 +0000 (09:59 -0700)]
Silence autogen.shs when plugins are built separately.

5 years agomcrypt/Makefile.am: typo
Matt Birkholz [Sun, 4 Aug 2019 23:06:13 +0000 (16:06 -0700)]
mcrypt/Makefile.am: typo

5 years agoAdd subprocess-binary-i/o-port.
Matt Birkholz [Sun, 14 Jul 2019 20:40:41 +0000 (13:40 -0700)]
Add subprocess-binary-i/o-port.

5 years agoPlugin Makefile.am improvements.
Matt Birkholz [Thu, 25 Jul 2019 13:31:43 +0000 (08:31 -0500)]
Plugin Makefile.am improvements.

These were backported from recent improvements to x11/Makefile.am.

  + Use EXEEXT where appropriate.
  + Add MOSTLYCLEANFILES and mostlyclean-local.
  + Use TAGS_FILES and punt the ETAGS_ARGS misuse.
  + Add -adapter.lo to _shim_la_OBJECTS, not _shim_la_LIBADD.
  + Eliminate trailing whitespace.
  + Correct the copyright notices for x11 and x11-screen.
  + Punt stamp-scheme's dependence on -const.bin (redundant to the
    dependence on stamp-shim).

5 years agoSilence autogen.shs, which blabber error messages (to Emacs's eye).
Matt Birkholz [Thu, 25 Jul 2019 13:27:59 +0000 (08:27 -0500)]
Silence autogen.shs, which blabber error messages (to Emacs's eye).

5 years agogdbm: Downcase constants to match case in package descriptions.
Matt Birkholz [Sun, 14 Jul 2019 20:22:47 +0000 (13:22 -0700)]
gdbm: Downcase constants to match case in package descriptions.

5 years agoChange symbol<? to delegate to bytevector<?.
Chris Hanson [Sat, 20 Jul 2019 08:33:57 +0000 (04:33 -0400)]
Change symbol<? to delegate to bytevector<?.

This is much faster than string comparison, which matters since symbols should
be fast.  The downside is that symbols and strings will sort somewhat
differently, but that shouldn't matter since someone can always sort them using
symbol->string.

5 years agoImplement bytevector<?.
Chris Hanson [Sat, 20 Jul 2019 08:33:47 +0000 (04:33 -0400)]
Implement bytevector<?.

5 years agoDon't unread #f as if it were a character.
Chris Hanson [Sat, 20 Jul 2019 02:08:00 +0000 (22:08 -0400)]
Don't unread #f as if it were a character.

5 years agoEdwin: force subprocess I/O ports to use iso-8859-1 coding.
Chris Hanson [Fri, 19 Jul 2019 03:26:56 +0000 (23:26 -0400)]
Edwin: force subprocess I/O ports to use iso-8859-1 coding.

There may still be a problem with synchronous subprocesses, since we don't have
a way to get at those ports.  If the process writes UTF-8, then the I/O copier
will try to write unicode chars to a buffer, and I'm not sure what will happen
in that case.  It might just ignore the upper bits.

5 years agoTreat keyword-only syntax environments differently from runtime environments.
Chris Hanson [Wed, 17 Jul 2019 22:54:49 +0000 (18:54 -0400)]
Treat keyword-only syntax environments differently from runtime environments.

The former are those created by let-syntax and the like; the latter are models
of runtime environments as created by lambda.

This fixes a bug when let-syntax contains a bunch of definitions, which should
be defined in the parent environment of the let-syntax, because it's meaningless
to define them in the let-syntax environment itself.  This was previously worked
around by heuristic means, but this change makes the definitions appear in the
correct syntactic environment corresponding to the runtime environment.

5 years agoImplement a delegation protocol for bundles.
Chris Hanson [Wed, 17 Jul 2019 19:55:48 +0000 (15:55 -0400)]
Implement a delegation protocol for bundles.

5 years agoFix stupid typo in reader.
Chris Hanson [Tue, 9 Jul 2019 23:53:32 +0000 (19:53 -0400)]
Fix stupid typo in reader.

5 years agoFix screw-up in previous host-adapter change.
Chris Hanson [Tue, 9 Jul 2019 03:28:20 +0000 (23:28 -0400)]
Fix screw-up in previous host-adapter change.

5 years agoEliminate unused variable from typo.
Chris Hanson [Tue, 9 Jul 2019 03:10:10 +0000 (23:10 -0400)]
Eliminate unused variable from typo.

5 years agoFix a bunch of problems caused by the call-with-values/values change.
Chris Hanson [Tue, 9 Jul 2019 02:51:41 +0000 (22:51 -0400)]
Fix a bunch of problems caused by the call-with-values/values change.

First, SF was open-coding these, so that the compiled code wasn't using the new
convention.  This caused problems at the boundary between interpreted code and
compiled code, and of course the compiled code was now incorrect.  This is fixed
but requires stuff in host-adapter to make it work.

Second, eliminating the open-coding exposed a couple of places that would no
longer initialize correctly during the cold load because they were initialized
prior to the loading of the multiple-values procedures.  This is fixed by
rewriting those to not use multiple values and have been marked with comments.

Finally, because the host-adapter file is now changing SF, SF must be loaded
prior to loading the host adapter.  There was one case in the make file that
needed to be tweaked to make this guarantee.

5 years agoDon't choose the flo:+inf.0/flo:-inf.0 implementations at cold load.
Chris Hanson [Tue, 9 Jul 2019 02:48:43 +0000 (22:48 -0400)]
Don't choose the flo:+inf.0/flo:-inf.0 implementations at cold load.

This is wrong because in our public distributions, the cold load is done on
Ubuntu, but the code is supposed to run on any appropriate unix system.

The fix is to make the selection when the band is restored, guaranteeing that
it's running on the target system.

5 years agoAdd procedure-arity-intersection.
Chris Hanson [Mon, 8 Jul 2019 19:35:03 +0000 (15:35 -0400)]
Add procedure-arity-intersection.

5 years agoChange multiple-value return to be slighly closer to correct.
Chris Hanson [Mon, 8 Jul 2019 19:34:09 +0000 (15:34 -0400)]
Change multiple-value return to be slighly closer to correct.

It's never going to be correct, but this at least permits mixing single values
and multiple values a bit.

5 years agoDon't use +inf.0 because it throws an exception on macos.
Chris Hanson [Mon, 8 Jul 2019 19:33:23 +0000 (15:33 -0400)]
Don't use +inf.0 because it throws an exception on macos.

This will need to be fixed but right now it prevents compilation.

5 years agoPlot the new math functions and their condition numbers.
Taylor R Campbell [Mon, 8 Jul 2019 00:57:25 +0000 (00:57 +0000)]
Plot the new math functions and their condition numbers.

Plots are done purely in PostScript, so no additional tools required
on top of the existing PostScript/PDF stack we essentially already
depended on.  Plots are cubic spline interpolations computed by a
little automatic differentiation library in PostScript.

Fix some mistakes in the prose characterizations of the condition
numbers that I had written.