[webkit-dev] jit, unordered compare

Geoffrey Garen ggaren at apple.com
Mon Oct 12 12:18:58 PDT 2009

Hi Zoltan.

I believe you're talking about this code for op_jfalse:

>         zeroDouble(fpRegT0);
>         emitLoadDouble(cond, fpRegT1);
>         addJump(branchDouble(DoubleEqual, fpRegT0, fpRegT1), target);

and this code for op_jtrue:

>         zeroDouble(fpRegT0);
>         emitLoadDouble(cond, fpRegT1);
>         addJump(branchDouble(DoubleNotEqual, fpRegT0, fpRegT1),  
> target);

The goal of this code is to perform a comparison that distinguishes  
{ 0, NaN } from all other doubles. op_jfalse should branch in the case  
of 0 or NaN, and, inversely, op_jtrue should branch in all other cases.

It sounds like the equal / zero condition does not indicate NaN on all  
platforms. Bummer.

I'm not an expert in ARM (or other floating point processors, for that  
matter), so I'm not sure what the best abstraction is for this notion  
of "compares to zero as equal or unordered". Since IEEE double  
requires all comparisons to NaN to be implicitly false, I do expect  
that there is some efficient single branch that can do this on ARM.  
 From http://www.heyrick.co.uk/assembler/fpops.html#cmf, it looks like  
"the CMF instruction should be used to test for equality (ie when a  
BEQ or BNE is used afterwards) or to test for unorderedness (in the V  

Gavin, do you have any ideas here?


On Oct 12, 2009, at 4:05 AM, Zoltan Herczeg wrote:

> Hi,
> My stougle with USE_JSVALUE32_64 still continues on ARM. In
> emit_op_jfalse, there is a comparison here (fpRegT0 contains 0.0):
> addJump(branchDouble(DoubleEqual, fpRegT0, fpRegT1), target + 2);
> In x86, if either operand is NaN, the zero flag is set by definition
> (ucomisd instruction). I have no idea why (NaN == anything is true?).
> Unfortunately, ARM does not set the zero flag. What would be a  
> portable
> way to improve this instruction? (and emit_op_jtrue) Perhaps this  
> affects
> the possible thumb2 implementation with USE_JSVALUE32_64 as well.
> Zoltan
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20091012/00cd3754/attachment.html>

More information about the webkit-dev mailing list