aboutsummaryrefslogtreecommitdiff
path: root/src/parseTools.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-10-16 09:48:32 -0700
committerAlon Zakai <alonzakai@gmail.com>2011-10-16 09:48:32 -0700
commit85817285da7a17f8cd914486fdd1f8766a271354 (patch)
treef5598bbfb20ede742a0ae84a3c5432898cff2ce6 /src/parseTools.js
parent7e6a5e1ed8627f7d9444708d0e36a67263578bbd (diff)
inline specific library functions for speed
Diffstat (limited to 'src/parseTools.js')
-rw-r--r--src/parseTools.js22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/parseTools.js b/src/parseTools.js
index f9ef419a..f50092c7 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -793,14 +793,23 @@ function makeSetValue(ptr, pos, value, type, noNeedFirst, ignore) {
}
}
+var UNROLL_LOOP_LIMIT = 5;
+
function makeSetValues(ptr, pos, value, type, num) {
function safety(where) {
where = where || getFastValue(ptr, '+', pos) + '+$mspi$';
return ';' + (SAFE_HEAP ? 'SAFE_HEAP_ACCESS(' + where + ', ' + type + ', 1)' : '');
}
if (USE_TYPED_ARRAYS in set(0, 1)) {
+ if (isNumber(num)) {
+ if (num < UNROLL_LOOP_LIMIT) {
+ return range(num).map(function(i) {
+ return makeSetValue(ptr, getFastValue(pos, '+', i), value, type);
+ }).join('; ');
+ }
+ }
return 'for (var $mspi$ = 0; $mspi$ < ' + num + '; $mspi$++) {\n' +
- makeSetValue(ptr, getFastValue(pos, '+', '$mspi$'), value, type) + ';\n}';
+ makeSetValue(ptr, getFastValue(pos, '+', '$mspi$'), value, type) + '\n}';
} else { // USE_TYPED_ARRAYS == 2
/*
return 'for (var $mspi$ = 0; $mspi$ < ' + num + '; $mspi$++) {\n' +
@@ -837,6 +846,17 @@ function makeCopyValues(dest, src, num, type, modifier) {
return (SAFE_HEAP ? 'SAFE_HEAP_COPY_HISTORY(' + to + ', ' + from + ')' : '');
}
if (USE_TYPED_ARRAYS in set(0, 1)) {
+ if (isNumber(num)) {
+ if (num < UNROLL_LOOP_LIMIT) {
+ return range(num).map(function(i) {
+ return type !== 'null' ? makeSetValue(dest, i, makeGetValue(src, i, type) + (modifier || ''), type)
+ : // Null is special-cased: We copy over all heaps
+ makeGetSlabs(dest, 'null', true).map(function(slab) {
+ return slab + '[' + dest + '+' + i + ']=' + slab + '[' + src + '+' + i + ']';
+ }).join('; ') + '; ' + safety(dest + '+' + i, src + '+' + i)
+ }).join('; ');
+ }
+ }
return 'for (var $mcpi$ = 0; $mcpi$ < ' + num + '; $mcpi$++) {\n' +
(type !== 'null' ? makeSetValue(dest, '$mcpi$', makeGetValue(src, '$mcpi$', type) + (modifier || ''), type)
: // Null is special-cased: We copy over all heaps