Array.concat should be fast for integer or double arrays
authorrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Jul 2015 17:45:29 +0000 (17:45 +0000)
committerrniwa@webkit.org <rniwa@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 6 Jul 2015 17:45:29 +0000 (17:45 +0000)
commit76f460feeb33f1f1d765e4fd8612e41be0c90252
treeaa7e1ccdcc2215606db27bce88268f40efa4cd35
parent587d615784847e57658c1c198d607314d68cb077
Array.concat should be fast for integer or double arrays
https://bugs.webkit.org/show_bug.cgi?id=146260

Reviewed by Darin Adler.

Added a fast path to Array.prototype.concat. When concatenating two Int32, Double, or Contiguous
arrays, simply memcopy the arrays into a new uninitialized buffer.

This improves huffman encoding in CompressionBench by 3.7x on a Mid 2014 MacBookPro.

* runtime/ArrayPrototype.cpp:
(JSC::arrayProtoFuncConcat):
* runtime/JSArray.cpp:
(JSC::JSArray::fastConcatWith): Added.
* runtime/JSArray.h:
(JSC::JSArray::fastConcatType): Added. Returns the resultant array's indexing type if we can use
the fact path. Returns NonArray otherwise.

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