On Mon, 19 Mar 2012 18:28:00 +0100, Simen Kjærås <[email protected]> wrote:

On Mon, 19 Mar 2012 09:29:34 +0100, Timon Gehr <[email protected]> wrote:

The current limitations make it impossible to define (for example) a floating point type with NaN that behaves like built-in float/double/real.

As it turns out, this is possible. opCmp can return a float, and
things work just fine (!<, !>=, etc). The problem appears with
opEquals.

This is the generated assembly:

fldz
fucompp
fnstsw   ax
sahf
jne      <somewhere>

So it compares the result to 0.0, copies status flags to the CPU,
then checks if any of the flags are set. If the returned value *is*
equal to 0.0, the C3 flag is set. The result is that the jump is
taken only when the returned value is *less* than 0.0. I have a
feeling this is wrong. Should I file this in BugZilla?

I went ahead and filed it:
http://d.puremagic.com/issues/show_bug.cgi?id=7734

Reply via email to