As noted below I'm not seeing that much speedup here. Around 2% for V8's crypto benchmarks (less on the whole suite), but around 0.7% regression on SunSpider.

I have an alternative change in the works (some code is shared between the two changes), which only works for positive Smis, but which does not have trouble with a zero answer. I also added inlining of multiplication by constants (we
only get here if both sides of the multiplication are non-constant).

However my change also has the 0.7% SunSpider regression.  I don't expect to
finish it unless a solution is found, since the V8 benchmark progress is only 1%
and so all in all it's not very compelling.  One way forward, if you want to
explore it, is to make use of the no_negative_zero() call on the Expression
object. This would mean the zero test could be eliminated in some cases, and
might make the change more convincing.


http://codereview.chromium.org/2868018/diff/24001/25001
File src/arm/codegen-arm.cc (right):

http://codereview.chromium.org/2868018/diff/24001/25001#newcode900
src/arm/codegen-arm.cc:900: if (loop_nesting() != 0) {
This should be if (inline_smi) so as not to inline things like 1.2 * x.

http://codereview.chromium.org/2868018/diff/24001/25001#newcode905
src/arm/codegen-arm.cc:905: // All ops need to know whether we are
dealing with two Smis.  Set up
This comment ("All ops") doesn't make sense in this place.

http://codereview.chromium.org/2868018/diff/24001/25001#newcode922
src/arm/codegen-arm.cc:922: __ tst(scratch, Operand(scratch));
I'm not seeing much speedup on this change and I think this line is to
blame.  The answer is often 0 and then we bail out because it could be
-0 which is not a Smi.

http://codereview.chromium.org/2868018/show

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to