Luke Wagner wrote:
It seems to me that we*must*  have Math.clz perform ToUint32() on its input.  Otherwise (if ToInt32() 
is used), even if the expression is written "Math.clz(x>>>  0)", 
asm.js/type-inference won't be able to optimize away the<0 branch since the ToInt32() in the 
semantics of Math.clz will convert a large unsigned integer argument into a negative integer.

Secondly, I think clz(0) should be 32, not 0:
  - for x86's bsr, since the result is undefined if the input is zero, we need 
a branch or cmov*anyway*  to deal with zero.
  - to make up for bsr's shortcomings, newer x86 chips have lzcnt (which JITs 
can emit after testing the right cpuid bit), which defines clz(0) == 32.
  - ARM's clz also defines clz(0) == 32.

The only reason not to do this I could imagine is if there was a de facto 
standard among all x86 chips (such that the JIT could rely on it) to have 
bsr(0) == 0, but I couldn't find any evidence of this.

Thanks, I just presented this pretty much verbatim, and Math.clz32 it is, by TC39 consensus. ToUint32 on parameter, 0 => 32 and all.

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to