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