mit-scheme.git
5 years agoTest some more edge cases and exception flags.
Taylor R Campbell [Sat, 1 Dec 2018 22:44:17 +0000 (22:44 +0000)]
Test some more edge cases and exception flags.

5 years agoTeach Scheme about the floating-point subnormal-operand exception.
Taylor R Campbell [Sat, 1 Dec 2018 22:41:56 +0000 (22:41 +0000)]
Teach Scheme about the floating-point subnormal-operand exception.

5 years agoMake flo:clear-exceptions! register interest in fp env.
Taylor R Campbell [Sat, 1 Dec 2018 22:39:12 +0000 (22:39 +0000)]
Make flo:clear-exceptions! register interest in fp env.

Not sure why I made it conditional before.  Makes sense for
flo:raise-exceptions! for functions whose callers might or might not
want them, but usually you do flo:clear-exceptions! only if you are
actually going to use them afterward.

5 years agoEarlier change to flo:clear-exceptions! is busted.
Taylor R Campbell [Sat, 1 Dec 2018 22:34:55 +0000 (22:34 +0000)]
Earlier change to flo:clear-exceptions! is busted.

In particular, the pattern

(flo:preserving-environment
 (lambda ()
   (flo:clear-exceptions! (flo:supported-exceptions))
   ...))

ought to give you an environment where the exceptions are cleared,
but it doesn't.

5 years agoTeach the compiler about more boolean and function primitives.
Taylor R Campbell [Sat, 1 Dec 2018 15:32:48 +0000 (15:32 +0000)]
Teach the compiler about more boolean and function primitives.

5 years agoRecursively integrate after substitution.
Taylor R Campbell [Sat, 1 Dec 2018 15:16:49 +0000 (15:16 +0000)]
Recursively integrate after substitution.

The declarations in this context may have changed.  This way, you can
get a lot of straight-line floating-point arithmetic like so:

(define (flo:sinh-taylor19 x)
  (declare (no-type-checks))
  (let* ((x^2 (flo:* x x))
         (t8 (flo:/ 1. 121645100408832000.))
         (t7 (flo:+ (flo:/ 1. 355687428096000.) (flo:* x^2 t8)))
         (t6 (flo:+ (flo:/ 1. 1307674368000.) (flo:* x^2 t7)))
         (t5 (flo:+ (flo:/ 1. 6227020800.) (flo:* x^2 t6)))
         (t4 (flo:+ (flo:/ 1. 39916800.) (flo:* x^2 t5)))
         (t3 (flo:+ (flo:/ 1. 362880.) (flo:* x^2 t4)))
         (t2 (flo:+ (flo:/ 1. 5040.) (flo:* x^2 t3)))
         (t1 (flo:+ (flo:/ 1. 120.) (flo:* x^2 t2)))
         (t0 (flo:+ (flo:/ 1. 6.) (flo:* x^2 t1))))
    (declare (integrate t0 t1 t2 t3 t4 t5 t6 t7 t8 x^2))
    (flo:* x (flo:+ 1. (flo:* x^2 t0)))))

Previously, the number of variables in this sequence that would be
integrated depended on the number of surrounding integrated calls in
the body of the let (!).

5 years agoRestore parallel compilation of compiler.
Taylor R Campbell [Sat, 1 Dec 2018 14:53:19 +0000 (14:53 +0000)]
Restore parallel compilation of compiler.

5 years agoFix thinko.
Taylor R Campbell [Sat, 1 Dec 2018 14:34:07 +0000 (14:34 +0000)]
Fix thinko.

5 years agoUse real:abs, real:copysign.
Taylor R Campbell [Sat, 1 Dec 2018 02:09:21 +0000 (02:09 +0000)]
Use real:abs, real:copysign.

These aren't guaranteed to be flonums here.

Mixed-exactness complex numbers are pretty silly.

5 years agoSqrt is busted on sone mixed-infinite/exact cases.
Taylor R Campbell [Sat, 1 Dec 2018 02:07:03 +0000 (02:07 +0000)]
Sqrt is busted on sone mixed-infinite/exact cases.

5 years agoMake ieee754-binary-hex-string follow IEEE 754-2008.
Taylor R Campbell [Sat, 1 Dec 2018 02:05:40 +0000 (02:05 +0000)]
Make ieee754-binary-hex-string follow IEEE 754-2008.

5 years agoNew procedure (flo:logb x) gives the integer exponent of x.
Taylor R Campbell [Fri, 30 Nov 2018 18:31:20 +0000 (18:31 +0000)]
New procedure (flo:logb x) gives the integer exponent of x.

5 years agoImplement and fix fenceposts in inf and NaN encoding.
Taylor R Campbell [Fri, 30 Nov 2018 18:06:44 +0000 (18:06 +0000)]
Implement and fix fenceposts in inf and NaN encoding.

5 years agoUse ieee754-binary-parameters to reduce magic constants.
Taylor R Campbell [Fri, 30 Nov 2018 17:42:26 +0000 (17:42 +0000)]
Use ieee754-binary-parameters to reduce magic constants.

5 years agoFix broken hexadecimal floating-point printing.
Taylor R Campbell [Fri, 30 Nov 2018 17:42:04 +0000 (17:42 +0000)]
Fix broken hexadecimal floating-point printing.

5 years agoWhat was I thinking. This is all wrong if the top bit is not 1.
Taylor R Campbell [Fri, 30 Nov 2018 16:24:12 +0000 (16:24 +0000)]
What was I thinking.  This is all wrong if the top bit is not 1.

5 years agoNote copysign procedure.
Taylor R Campbell [Fri, 30 Nov 2018 08:50:19 +0000 (08:50 +0000)]
Note copysign procedure.

5 years agoRemove bogus note about flo:compare and flo:safe-compare.
Taylor R Campbell [Fri, 30 Nov 2018 08:47:59 +0000 (08:47 +0000)]
Remove bogus note about flo:compare and flo:safe-compare.

Never actually committed these; decided a four-way comparison wasn't
worth it without a motivating application.  Won't work for anything
that expects a three-way -1/0/+1 compare.

5 years agoOpen-code flo:copysign on amd64.
Taylor R Campbell [Fri, 30 Nov 2018 00:43:36 +0000 (00:43 +0000)]
Open-code flo:copysign on amd64.

5 years agoAdd a copysign test case that bit me in a state I can't reproduce.
Taylor R Campbell [Fri, 30 Nov 2018 08:22:27 +0000 (08:22 +0000)]
Add a copysign test case that bit me in a state I can't reproduce.

5 years agoDon't futz with floenv if not in use.
Taylor R Campbell [Fri, 30 Nov 2018 07:59:04 +0000 (07:59 +0000)]
Don't futz with floenv if not in use.

Makes flo:raise-exceptions! kosher to use anywhere without incurring
cost in threads that don't care.

5 years agoClear exceptions so residual crud doesn't trap.
Taylor R Campbell [Fri, 30 Nov 2018 07:46:42 +0000 (07:46 +0000)]
Clear exceptions so residual crud doesn't trap.

5 years agoTidy up some negative tests. No functional change intended.
Taylor R Campbell [Fri, 30 Nov 2018 07:26:07 +0000 (07:26 +0000)]
Tidy up some negative tests.  No functional change intended.

5 years agoRename flo:safe-negative? -> flo:sign-negative?.
Taylor R Campbell [Fri, 30 Nov 2018 07:19:49 +0000 (07:19 +0000)]
Rename flo:safe-negative? -> flo:sign-negative?.

It was confusing that (flo:safe< x 0.) was not the same as
(flo:safe-negative? x) -- they disagree on -0 and NaN values with
negative sign bits.

5 years agoFix some things that I was mistakenly testing with an old compiler.
Taylor R Campbell [Fri, 30 Nov 2018 07:11:27 +0000 (07:11 +0000)]
Fix some things that I was mistakenly testing with an old compiler.

sqrt should not trap on qNaN, which requires some care with
comparisons.  Further, since sqrt(-0) is supposed to be -0, we can't
just use flo:safe-negative? (which returns true for -0.); we must
instead use (flo:safe< x 0.) (which returns false for -0.).

5 years agoDefine and expose flo:precision.
Taylor R Campbell [Fri, 30 Nov 2018 06:48:05 +0000 (06:48 +0000)]
Define and expose flo:precision.

This is the same as flo:significand-digits-base-2, but its name
doesn't imply base 2 -- it refers to whatever the floating-point
radix is.  Not that we're likely to do decimal floating-point ever,
but maybe you might want to write code that could be used in another
environment that does.

5 years agoSimplify and test some more exception cases.
Taylor R Campbell [Fri, 30 Nov 2018 06:45:46 +0000 (06:45 +0000)]
Simplify and test some more exception cases.

5 years agoTest NaN preservation of sqrt.
Taylor R Campbell [Fri, 30 Nov 2018 06:37:51 +0000 (06:37 +0000)]
Test NaN preservation of sqrt.

5 years agoHandle more sqrt edge cases.
Taylor R Campbell [Fri, 30 Nov 2018 06:29:58 +0000 (06:29 +0000)]
Handle more sqrt edge cases.

5 years agoEnable traps here to confirm they don't happen.
Taylor R Campbell [Fri, 30 Nov 2018 05:51:26 +0000 (05:51 +0000)]
Enable traps here to confirm they don't happen.

5 years agoRaise the appropriate exceptions in exact->exact.
Taylor R Campbell [Fri, 30 Nov 2018 05:49:03 +0000 (05:49 +0000)]
Raise the appropriate exceptions in exact->exact.

- inexact-result if result is changed by rounding
- overflow if result is infinite.

5 years agoTest exceptions in exact->inexact.
Taylor R Campbell [Fri, 30 Nov 2018 05:45:06 +0000 (05:45 +0000)]
Test exceptions in exact->inexact.

5 years agoTeach exact->inexact to return infinity rather than crash.
Taylor R Campbell [Fri, 30 Nov 2018 05:11:35 +0000 (05:11 +0000)]
Teach exact->inexact to return infinity rather than crash.

5 years agoTest exact->inexact near integer edge cases.
Taylor R Campbell [Fri, 30 Nov 2018 04:43:02 +0000 (04:43 +0000)]
Test exact->inexact near integer edge cases.

5 years agoUse exact-integer-sqrt in sqrt for exact integers and rationals.
Taylor R Campbell [Fri, 30 Nov 2018 04:39:18 +0000 (04:39 +0000)]
Use exact-integer-sqrt in sqrt for exact integers and rationals.

5 years agoDeduplicate test cases.
Taylor R Campbell [Fri, 30 Nov 2018 04:30:29 +0000 (04:30 +0000)]
Deduplicate test cases.

5 years agoFix sqrt along negative real axis with inexact zero imaginary part.
Taylor R Campbell [Fri, 30 Nov 2018 04:29:55 +0000 (04:29 +0000)]
Fix sqrt along negative real axis with inexact zero imaginary part.

5 years agoSqrt shouldn't discard an inexact zero imaginary component.
Taylor R Campbell [Fri, 30 Nov 2018 04:24:20 +0000 (04:24 +0000)]
Sqrt shouldn't discard an inexact zero imaginary component.

5 years agoTest sqrt along the negative real line with/without inexact imaginary part.
Taylor R Campbell [Fri, 30 Nov 2018 04:13:51 +0000 (04:13 +0000)]
Test sqrt along the negative real line with/without inexact imaginary part.

5 years agoTest (sqrt -0.) = -0., per IEEE 754-2008.
Taylor R Campbell [Fri, 30 Nov 2018 03:21:44 +0000 (03:21 +0000)]
Test (sqrt -0.) = -0., per IEEE 754-2008.

5 years agoMore sqrt edge cases, some working and some busted.
Taylor R Campbell [Fri, 30 Nov 2018 03:11:48 +0000 (03:11 +0000)]
More sqrt edge cases, some working and some busted.

5 years agoCouple more sqrt edge cases.
Taylor R Campbell [Fri, 30 Nov 2018 03:04:11 +0000 (03:04 +0000)]
Couple more sqrt edge cases.

5 years agoFor +/-2i x, compute sqrt by sqrt(x) +/- i sqrt(x).
Taylor R Campbell [Fri, 30 Nov 2018 03:01:32 +0000 (03:01 +0000)]
For +/-2i x, compute sqrt by sqrt(x) +/- i sqrt(x).

Strike off some expected failures.

5 years agoFix branch cuts of some test cases -- no more xfail!
Taylor R Campbell [Fri, 30 Nov 2018 02:27:07 +0000 (02:27 +0000)]
Fix branch cuts of some test cases -- no more xfail!

5 years agoAnnotate where these tests rely on type and range checks.
Taylor R Campbell [Fri, 30 Nov 2018 01:56:12 +0000 (01:56 +0000)]
Annotate where these tests rely on type and range checks.

5 years agoDefine (copysign m s) = magnitude of m, sign of s.
Taylor R Campbell [Fri, 30 Nov 2018 01:54:51 +0000 (01:54 +0000)]
Define (copysign m s) = magnitude of m, sign of s.

5 years agoAdd some more edge cases for sqrt.
Taylor R Campbell [Fri, 30 Nov 2018 01:26:31 +0000 (01:26 +0000)]
Add some more edge cases for sqrt.

5 years agoTest exceptions in sqrt too.
Taylor R Campbell [Fri, 30 Nov 2018 01:03:30 +0000 (01:03 +0000)]
Test exceptions in sqrt too.

5 years agoTest flo:negate.
Taylor R Campbell [Fri, 30 Nov 2018 00:53:48 +0000 (00:53 +0000)]
Test flo:negate.

5 years agoAdd some more sqrt edge cases.
Taylor R Campbell [Fri, 30 Nov 2018 00:53:05 +0000 (00:53 +0000)]
Add some more sqrt edge cases.

5 years agoFix mistranscription of opcode for UNPCKLF.
Taylor R Campbell [Fri, 30 Nov 2018 00:47:15 +0000 (00:47 +0000)]
Fix mistranscription of opcode for UNPCKLF.

5 years agoAdd some more copysign tests.
Taylor R Campbell [Thu, 29 Nov 2018 05:30:04 +0000 (05:30 +0000)]
Add some more copysign tests.

5 years agoFloating-point total ordering.
Taylor R Campbell [Thu, 29 Nov 2018 03:05:53 +0000 (03:05 +0000)]
Floating-point total ordering.

- (flo:total< x y) is true if x < y in the total ordering on
  floating-point values defined in IEEE 754-2008 Sec. 5.10, i.e. this
  is the totalOrder function of IEEE 754-2008 Sec. 5.7.2.
- (flo:total-order x y) is -1 if x < y, 0 if x = y, +1 if x > y in the
  total ordering -- the three-way comparison version of total<.
- (flo:total-mag< x y) = (flo:total< (flo:abs x) (flo:abs y))
- (flo:total-order-mag x y)
  = (flo:total-order (flo:abs x) (flo:abs y))

While here, tweak release notes on flonum stuff.

5 years agosqrt is busted on infinities.
Taylor R Campbell [Thu, 29 Nov 2018 02:57:09 +0000 (02:57 +0000)]
sqrt is busted on infinities.

5 years agoMove a bunch of flonum tests to test-flonum.scm.
Taylor R Campbell [Thu, 29 Nov 2018 02:54:45 +0000 (02:54 +0000)]
Move a bunch of flonum tests to test-flonum.scm.

Let's keep test-arith.scm for higher-level numerical computations.

5 years agoMake the signature of define-enumerated-test match everyone else.
Taylor R Campbell [Thu, 29 Nov 2018 02:43:50 +0000 (02:43 +0000)]
Make the signature of define-enumerated-test match everyone else.

Not sure why I used vectors here in the first place.

5 years agoNote string and symbol escape printing bug.
Taylor R Campbell [Thu, 29 Nov 2018 02:12:01 +0000 (02:12 +0000)]
Note string and symbol escape printing bug.

5 years agoNote local optional parameter bug.
Taylor R Campbell [Thu, 29 Nov 2018 02:11:51 +0000 (02:11 +0000)]
Note local optional parameter bug.

5 years agoNote magnitude overflow bug.
Taylor R Campbell [Thu, 29 Nov 2018 02:11:40 +0000 (02:11 +0000)]
Note magnitude overflow bug.

5 years agoNote flo:min/max IEEE 754-2008 conformance.
Taylor R Campbell [Thu, 29 Nov 2018 02:11:21 +0000 (02:11 +0000)]
Note flo:min/max IEEE 754-2008 conformance.

5 years agoTest more edge cases of rounding operations.
Taylor R Campbell [Thu, 29 Nov 2018 02:10:41 +0000 (02:10 +0000)]
Test more edge cases of rounding operations.

Include the rounding->exact operations too.

5 years agoUpdate some release notes on floating-point stuff.
Taylor R Campbell [Thu, 29 Nov 2018 02:09:57 +0000 (02:09 +0000)]
Update some release notes on floating-point stuff.

5 years agoUse fabs(3) for C implementation of FLONUM-ABS.
Taylor R Campbell [Thu, 29 Nov 2018 02:05:51 +0000 (02:05 +0000)]
Use fabs(3) for C implementation of FLONUM-ABS.

A conditional based on < doesn't handle NaN correctly.

5 years agoOur C implementation of flo:abs is busted.
Taylor R Campbell [Thu, 29 Nov 2018 02:02:22 +0000 (02:02 +0000)]
Our C implementation of flo:abs is busted.

5 years agoPass multiple arguments here. No functional change.
Taylor R Campbell [Thu, 29 Nov 2018 01:59:16 +0000 (01:59 +0000)]
Pass multiple arguments here.  No functional change.

5 years agoNew NaN-related and min/max flonum procedures and fixes.
Taylor R Campbell [Wed, 28 Nov 2018 19:24:36 +0000 (19:24 +0000)]
New NaN-related and min/max flonum procedures and fixes.

- (flo:qnan) returns a quiet NaN: arithmetic on it quietly returns
  another qNaN (usually the same one, unless there are multiple to
  choose from) without raising any exception.

- (flo:snan) returns a signalling NaN: arithmetic on it returns
  another sNaN (usually the same) and raises an exception, which will
  trap if you ask.

- (flo:qnan? f) = (and (flo:nan? f) (flo:nan-quiet? f))

- (flo:snan? f) = (and (flo:nan? f) (not (flo:nan-quiet? f)))

- (flo:min x y) and (flo:max x y) now raise an exception only if at
  least one input is a signalling NaN, and traps only if you ask.
  These now implement minNum and maxNum of IEEE 754-2008.

- (flo:min-mag x y) and (flo:max-mag x y) return whichever of the
  inputs has the smaller magnitude, as in minNumMag and maxNumMag in
  IEEE 754-2008.

5 years agoNew primitives for creating and examining NaNs.
Taylor R Campbell [Wed, 28 Nov 2018 17:55:03 +0000 (17:55 +0000)]
New primitives for creating and examining NaNs.

- (flo:make-nan negative? quiet? payload)
- (flo:nan-quiet? nan)
- (flo:nan-payload nan)

5 years agoNew CTASSERT macro for compile-time assertions.
Taylor R Campbell [Wed, 28 Nov 2018 17:53:31 +0000 (17:53 +0000)]
New CTASSERT macro for compile-time assertions.

5 years agoImplement flo:safe-zero? and flo:safe=.
Taylor R Campbell [Wed, 28 Nov 2018 17:07:36 +0000 (17:07 +0000)]
Implement flo:safe-zero? and flo:safe=.

5 years agoMerge these cases again now that the xfails are fixed.
Taylor R Campbell [Wed, 28 Nov 2018 16:55:06 +0000 (16:55 +0000)]
Merge these cases again now that the xfails are fixed.

5 years agoImplement binary-hash-by-X; some hair to guarantee fixnum result.
Chris Hanson [Tue, 27 Nov 2018 07:18:35 +0000 (23:18 -0800)]
Implement binary-hash-by-X; some hair to guarantee fixnum result.

Not nearly as fast as the underlying unary hash, but for now that's OK.  If need
be we can make it faster.

5 years agoSimplify spar-push-body.
Chris Hanson [Mon, 26 Nov 2018 07:16:50 +0000 (23:16 -0800)]
Simplify spar-push-body.

5 years agoEliminate unnecessary copy of map-in-order.
Chris Hanson [Mon, 26 Nov 2018 01:09:37 +0000 (17:09 -0800)]
Eliminate unnecessary copy of map-in-order.

5 years agoTeach LIAR/x86-64 to open-code flo:safe-negative?.
Taylor R Campbell [Wed, 28 Nov 2018 09:48:40 +0000 (09:48 +0000)]
Teach LIAR/x86-64 to open-code flo:safe-negative?.

5 years agoCorrectly commute flo:safe>= to flo:safe<=, not to safe:>=.
Taylor R Campbell [Wed, 28 Nov 2018 09:19:49 +0000 (09:19 +0000)]
Correctly commute flo:safe>= to flo:safe<=, not to safe:>=.

Until LIAR's RTL code compression was taught to search through
object->float, this code path appears to have been impossible to
exercise.

5 years agoTeach RTL compression to search through object->float too.
Taylor R Campbell [Wed, 28 Nov 2018 09:15:45 +0000 (09:15 +0000)]
Teach RTL compression to search through object->float too.

This way it can fold (object->float (constant #x1p+0)) in both

(assign (register #x22) (object->float (constant #x1p+0))
(assign (register #x23) (offset (register 4) (machine-constant 0)))
(assign (register #x24) (object->float (register #x23)))
(jumpc (flonum-pred-2-args flonum-is-greater? (register #x22) (register #x24)) label-3)

and

(assign (register #x21) (offset (register 4) (machine-constant 0)))
(assign (register #x22) (object->float (register #x21)))
(assign (register #x24) (object->float (constant #x1p+0)))
(jumpc (flonum-pred-2-args flonum-is-greater? (register #x22) (register #x24)) label-3)

where previously it could handle only the second one because the
reference appeared in the immediately subsequent instruction.

This exposes a latent bug in the x86-64 code generator, to be fixed
in a subsequent commit.

5 years agofixup! aa477cf3a28ded82f8cbcda5e8ee317cf9490d2f
Taylor R Campbell [Wed, 28 Nov 2018 08:53:20 +0000 (08:53 +0000)]
fixup! aa477cf3a28ded82f8cbcda5e8ee317cf9490d2f

5 years agoDelete a rewriting rule that could not possibly have ever matched.
Taylor R Campbell [Wed, 28 Nov 2018 08:51:28 +0000 (08:51 +0000)]
Delete a rewriting rule that could not possibly have ever matched.

It would have required (object->float (object->float ...)) to appear
in the input, which makes no sense.

5 years agoTest literal operands to flonum comparators.
Taylor R Campbell [Wed, 28 Nov 2018 08:48:09 +0000 (08:48 +0000)]
Test literal operands to flonum comparators.

This is a failed attempt to trigger a compiler bug that I noticed by
code inspection.

5 years agoMake thie test actually check something by calling both.
Taylor R Campbell [Wed, 28 Nov 2018 08:47:41 +0000 (08:47 +0000)]
Make thie test actually check something by calling both.

5 years agoRe-enable invalid-operation traps here and fix the one broken test.
Taylor R Campbell [Wed, 28 Nov 2018 05:33:23 +0000 (05:33 +0000)]
Re-enable invalid-operation traps here and fix the one broken test.

Should maybe add a flo:safe-zero?, or decide that flo:zero? is the
quiet version and (flo:= x 0.) is the signalling one.

5 years agoFactor out unary->binary predicate conversion.
Taylor R Campbell [Wed, 28 Nov 2018 05:23:10 +0000 (05:23 +0000)]
Factor out unary->binary predicate conversion.

5 years agoAdd flo:<>, as (or flo:< flo:>) for now.
Taylor R Campbell [Wed, 28 Nov 2018 05:18:21 +0000 (05:18 +0000)]
Add flo:<>, as (or flo:< flo:>) for now.

5 years agoTest flo:unordered? both ways too.
Taylor R Campbell [Wed, 28 Nov 2018 05:17:34 +0000 (05:17 +0000)]
Test flo:unordered? both ways too.

5 years agoTest compilation of flonum comparisons both ways.
Taylor R Campbell [Wed, 28 Nov 2018 05:15:41 +0000 (05:15 +0000)]
Test compilation of flonum comparisons both ways.

5 years agoRun the flonum tests both compiled and interpreted.
Taylor R Campbell [Wed, 28 Nov 2018 05:03:39 +0000 (05:03 +0000)]
Run the flonum tests both compiled and interpreted.

5 years agoThese tests now pass on x86-64.
Taylor R Campbell [Wed, 28 Nov 2018 04:47:50 +0000 (04:47 +0000)]
These tests now pass on x86-64.

Need to teach i386, svm, and C about this now.

5 years agoTest compiling in-line calls to the flonum comparators too.
Taylor R Campbell [Wed, 28 Nov 2018 04:45:03 +0000 (04:45 +0000)]
Test compiling in-line calls to the flonum comparators too.

5 years agoTeach LIAR/x86-64 about ordered vs unordered comparisons.
Taylor R Campbell [Wed, 28 Nov 2018 04:43:18 +0000 (04:43 +0000)]
Teach LIAR/x86-64 about ordered vs unordered comparisons.

- Fix miscompilation of ordered comparisons: now the standard
  comparison operators raise exceptions, which trap if you ask.

- Open-code the unordered comparisons flo:safe< &c.

5 years agoFactor out unary->binary predicate conversion.
Taylor R Campbell [Wed, 28 Nov 2018 03:57:18 +0000 (03:57 +0000)]
Factor out unary->binary predicate conversion.

5 years agoExplain what commute-flonum-predicate is doing.
Taylor R Campbell [Wed, 28 Nov 2018 03:48:20 +0000 (03:48 +0000)]
Explain what commute-flonum-predicate is doing.

5 years agoTeach rtlgen to open-code flo:safe-negative? too.
Taylor R Campbell [Wed, 28 Nov 2018 03:45:16 +0000 (03:45 +0000)]
Teach rtlgen to open-code flo:safe-negative? too.

Disabled on all machines for now.

5 years agoTeach rtlgen to open-code safe flonum comparison routines.
Taylor R Campbell [Wed, 28 Nov 2018 03:41:15 +0000 (03:41 +0000)]
Teach rtlgen to open-code safe flonum comparison routines.

Disable on all machines for now.

5 years agoTeach sf about some flonum primitives worth open-coding.
Taylor R Campbell [Wed, 28 Nov 2018 03:39:49 +0000 (03:39 +0000)]
Teach sf about some flonum primitives worth open-coding.

5 years agoFix miscompilation of default optional parameters.
Taylor R Campbell [Wed, 28 Nov 2018 03:01:22 +0000 (03:01 +0000)]
Fix miscompilation of default optional parameters.

Holdover from days when optional parameters were filled with
unassigned reference traps -- LIAR never got the memo.

5 years agoTest for miscompilation of optional arguments.
Taylor R Campbell [Wed, 28 Nov 2018 02:58:46 +0000 (02:58 +0000)]
Test for miscompilation of optional arguments.

5 years agoAdd some tests for primitive floating-point operations.
Taylor R Campbell [Wed, 28 Nov 2018 02:19:02 +0000 (02:19 +0000)]
Add some tests for primitive floating-point operations.

5 years agoTest for exceptions from ordered comparisons.
Taylor R Campbell [Wed, 28 Nov 2018 02:10:00 +0000 (02:10 +0000)]
Test for exceptions from ordered comparisons.

These are currently broken at least on x86 because the compiler
generates the wrong instructions.

When we switch the compiler to generating the right ones we may need to
adjust the runtime to use flo:safeX in certain places.

5 years agoDefine expect-error as an alias for assert-error.
Taylor R Campbell [Tue, 27 Nov 2018 02:25:20 +0000 (02:25 +0000)]
Define expect-error as an alias for assert-error.

The difference is in intent: expect-error means something is broken,
and the test signals an error because of a bug; assert-error means
the correct behaviour is to signal an error.

Pass expect-error or expect-failure as procedures, not as symbols
representing them, throughout the test suite.

Now we can find documented bugs by grepping for expect-error and
expect-failure.

5 years agoImplement random-bytevector!.
Taylor R Campbell [Tue, 27 Nov 2018 02:24:54 +0000 (02:24 +0000)]
Implement random-bytevector!.