Larceny v0.99 "Goldie" (May 25 2016 13:51:21, precise:Linux:split)
larceny.heap, built on Wed May 25 13:57:00 UTC 2016
> (< +nan.0 0.0)
#t
> (< 0.0 +nan.0)
#t
> (> +nan.0 0.0)
#f
> (> 0.0 +nan.0)
#f
> (define x +nan.0)
x
> (define y 0.0)
y
> (< x y)
#f
> (< y x)
#f
In the first two examples above, representation inference converts the calls to < into calls to <:flo:flo. Similarly for calls to fl<?, where the call to < always turns into a call to <:flo:flo. We are evidently generating incorrect code for that flonum comparison.
% cat temp.sch
(define x +nan.0)
(define y 1.0)
(define (g0 x y)
(fl=? x y))
(define (g1 x y)
(fl<? x y))
(define (g2 x y)
(fl>? x y))
In the first two examples above, representation inference converts the calls to
<
into calls to<:flo:flo
. Similarly for calls tofl<?
, where the call to<
always turns into a call to<:flo:flo
. We are evidently generating incorrect code for that flonum comparison.Compiling with the new register assignments:
I suspect we are misinterpreting the condition codes transferred by the
vmrs APSR_nzcv
instruction.