Thanks for the quick review, one comment inline.

I can look into this alternative solution and submit a new version once I have
code and test results ready, and submit the assembler bug fix separately.


https://codereview.chromium.org/222403002/diff/1/src/arm/macro-assembler-arm.cc
File src/arm/macro-assembler-arm.cc (left):

https://codereview.chromium.org/222403002/diff/1/src/arm/macro-assembler-arm.cc#oldcode3819
src/arm/macro-assembler-arm.cc:3819: // Set rounding mode to round to
the nearest integer by clearing bits[23:22].
On 2014/04/03 09:22:48, jbramley wrote:
Shouldn't we be in the right rounding mode already? ECMAScript maths
operations
are supposed to be done in round-to-nearest mode, and this is also the
default
FPSCR setting. If we've changed it explicitly somewhere else (for
whatever
reason), we're probably not doing normal ECMAScript maths properly.

If I'm correct about that, the whole thing collapses down:

// Handle inputs >= 255 (including +infinity).
mov(result_reg, 255);
Vmov(double_scratch, 255.0, result_reg);
VFPCompareAndSetFlags(input_reg, double_scratch);
b(ge, &done);

// All other inputs will clamp to the range [0-255]: NaN and -infinity
both
produce 0.
vcvt_u32_f64(double_scratch.low(), input_reg, kFPSCRRounding);
Vmov(result_reg, double_scratch.low());

This is more-or-less equivalent to what we did in ClampDoubleToUint8
in
src/arm64/macro-assembler-arm64.cc, though the available instructions
make it
much simpler in A64.

This would be an excellent solution, but it seems the FPSCR state can be
wrong when entering this function. VFPEnsureFPSCRState doesn't currently
set the rounding mode, and I suppose it can be messed with by outside
code. But if setting the FPSCR state in VFPEnsureFPSCRState will be
enough, this solution could work.

https://codereview.chromium.org/222403002/

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to