[JSC] Optimize number parsing and string parsing in LiteralParser
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Apr 2016 00:45:27 +0000 (00:45 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 23 Apr 2016 00:45:27 +0000 (00:45 +0000)
commitdeda9f6f87bb4cfc84e7993971e7563e3b8e2b57
treeddcdb452cd878a3ee3a35bdc05125510754819b9
parent8cdf80a98863b76807c23b40fdea53b84ddd28dd
[JSC] Optimize number parsing and string parsing in LiteralParser
https://bugs.webkit.org/show_bug.cgi?id=156896

Reviewed by Mark Lam.

This patch aim to improve JSON.parse performance. Major 2 optimizations are included.

1. Change `double result` to `int32_t result` in integer parsing case.
We already have the optimized path for integer parsing, when it's digits are less than 10.
At that case, the maximum number is 999999999, and the minimum number is -99999999.
The both are in range of Int32. So We can use int32_t for accumulation instead of double.

2. Add the string parsing fast / slow cases.
We add the fast case for string parsing, which does not include any escape sequences.

Both optimizations improve Kraken json-parse-financial, roughly 3.5 - 4.5%.

json-parse-financial        49.128+-1.589             46.979+-0.912           might be 1.0457x faster

* runtime/LiteralParser.cpp:
(JSC::isJSONWhiteSpace):
(JSC::isSafeStringCharacter):
(JSC::LiteralParser<CharType>::Lexer::lexString):
(JSC::LiteralParser<CharType>::Lexer::lexStringSlow):
(JSC::LiteralParser<CharType>::Lexer::lexNumber):
* runtime/LiteralParser.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@199941 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/LiteralParser.cpp
Source/JavaScriptCore/runtime/LiteralParser.h