mit-scheme.git
6 years agoBit string primitives are missing type checks.
Taylor R Campbell [Mon, 3 Dec 2018 09:18:13 +0000 (09:18 +0000)]
Bit string primitives are missing type checks.

6 years agoTeach pp to respect custom print methods for tagged vectors.
Taylor R Campbell [Sun, 2 Dec 2018 03:32:42 +0000 (03:32 +0000)]
Teach pp to respect custom print methods for tagged vectors.

6 years agopp doesn't respect custom print methods for tagged vectors.
Taylor R Campbell [Sun, 2 Dec 2018 03:29:16 +0000 (03:29 +0000)]
pp doesn't respect custom print methods for tagged vectors.

6 years agoRework vector tag printer methods so they work again.
Taylor R Campbell [Sun, 2 Dec 2018 02:45:35 +0000 (02:45 +0000)]
Rework vector tag printer methods so they work again.

XXX Needs tests, but these are a pain to construct...

6 years agopp _is_ busted after all but it takes a hairier example.
Taylor R Campbell [Sun, 2 Dec 2018 02:08:58 +0000 (02:08 +0000)]
pp _is_ busted after all but it takes a hairier example.

6 years agopp is not busted; I just didn't know about pp-avoid-circularity.
Taylor R Campbell [Sun, 2 Dec 2018 02:00:17 +0000 (02:00 +0000)]
pp is not busted; I just didn't know about pp-avoid-circularity.

TIL.

6 years agoMake pp's job easier in this test. (Still busted.)
Taylor R Campbell [Sun, 2 Dec 2018 01:56:52 +0000 (01:56 +0000)]
Make pp's job easier in this test.  (Still busted.)

6 years agoFix find-shared-objects. pp is still busted.
Taylor R Campbell [Sun, 2 Dec 2018 01:55:45 +0000 (01:55 +0000)]
Fix find-shared-objects.  pp is still busted.

6 years agofind-shared-objects is busted for multiple references.
Taylor R Campbell [Sun, 2 Dec 2018 01:53:02 +0000 (01:53 +0000)]
find-shared-objects is busted for multiple references.

6 years agopp is busted on circular data structures.
Taylor R Campbell [Sun, 2 Dec 2018 01:35:04 +0000 (01:35 +0000)]
pp is busted on circular data structures.

6 years agoAllow the full form of FLUID-LET with ACCESS.
Taylor R Campbell [Sun, 2 Dec 2018 01:34:41 +0000 (01:34 +0000)]
Allow the full form of FLUID-LET with ACCESS.

6 years agoFLUID-LET of ACCESS broke.
Taylor R Campbell [Sun, 2 Dec 2018 01:33:44 +0000 (01:33 +0000)]
FLUID-LET of ACCESS broke.

(Yes, I know it's legacy, but I need it for another test at the
moment.)

6 years agoTickled a bug in connectivity analysis with arity error.
Taylor R Campbell [Sun, 2 Dec 2018 01:00:20 +0000 (01:00 +0000)]
Tickled a bug in connectivity analysis with arity error.

6 years agoCompiler chokes on a variable named |#[continuation]|.
Taylor R Campbell [Sun, 2 Dec 2018 00:14:53 +0000 (00:14 +0000)]
Compiler chokes on a variable named |#[continuation]|.

6 years agoOpen-code some flonum predicates on amd64.
Taylor R Campbell [Sat, 1 Dec 2018 23:04:19 +0000 (23:04 +0000)]
Open-code some flonum predicates on amd64.

- flonum-is-equal?
- flonum-is-finite?
- flonum-is-infinite?
- flonum-is-nan?
- flonum-is-normal?
- flonum-is-zero?

6 years agoTeach sf about flo:safe-zero? and flo:safe=.
Taylor R Campbell [Sat, 1 Dec 2018 22:50:22 +0000 (22:50 +0000)]
Teach sf about flo:safe-zero? and flo:safe=.

6 years agoSpeed this up a little at the expense of coverage.
Taylor R Campbell [Sat, 1 Dec 2018 22:50:07 +0000 (22:50 +0000)]
Speed this up a little at the expense of coverage.

6 years agoAdd some more spot checks. Zero is not exact here, for sign.
Taylor R Campbell [Sat, 1 Dec 2018 22:49:17 +0000 (22:49 +0000)]
Add some more spot checks.  Zero is not exact here, for sign.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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 (!).

6 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.

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

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

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

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.).

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

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

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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!

6 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.

6 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.

6 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.

6 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.

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

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

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

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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.

6 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)

6 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.

6 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=.

6 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.

6 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.

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

6 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.

6 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?.

6 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.

6 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.

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

6 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.

6 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.

6 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.

6 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.

6 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.