diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-01-09 13:02:04 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-01-09 13:02:04 -0800 |
commit | e18b0b100a57b1121b12356026600877d34ff47e (patch) | |
tree | b93f70419c978bd8519495ae4fbc51a4111b85ec /src/parseTools.js | |
parent | e407b29dcf1c08f0138628d6bc0eee96a411be47 (diff) |
optimize memcpy/memset in ta0/1
Diffstat (limited to 'src/parseTools.js')
-rw-r--r-- | src/parseTools.js | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/parseTools.js b/src/parseTools.js index 473caaba..3a88fc25 100644 --- a/src/parseTools.js +++ b/src/parseTools.js @@ -1045,8 +1045,8 @@ function makeSetValues(ptr, pos, value, type, num, align) { if (isNumber(num) && parseInt(num) <= UNROLL_LOOP_MAX) { return unroll(type, num); } - return 'for (var $$i = 0; $$i < ' + num + '; $$i++) {\n' + - makeSetValue(ptr, getFastValue(pos, '+', '$$i'), value, type) + '\n}'; + return 'for (var $$dest = ' + getFastValue(ptr, '+', pos) + ', $$stop = $$dest + ' + num + '; $$dest < $$stop; $$dest++) {\n' + + makeSetValue('$$dest', '0', value, type) + '\n}'; } else { // USE_TYPED_ARRAYS == 2 // If we don't know how to handle this at compile-time, or handling it is best done in a large amount of code, call memset // TODO: optimize the case of numeric num but non-numeric value @@ -1068,7 +1068,7 @@ function makeSetValues(ptr, pos, value, type, num, align) { if (num <= UNROLL_LOOP_MAX*possibleAlign) { ret.push(unroll('i' + (possibleAlign*8), Math.floor(num/possibleAlign), possibleAlign, values[possibleAlign])); } else { - ret.push('for (var $$i = 0, $$dest = ' + getFastValue(ptr, '+', pos) + (possibleAlign > 1 ? '>>' + log2(possibleAlign) : '') + ', ' + + ret.push('for (var $$dest = ' + getFastValue(ptr, '+', pos) + (possibleAlign > 1 ? '>>' + log2(possibleAlign) : '') + ', ' + '$$stop = $$dest + ' + Math.floor(num/possibleAlign) + '; $$dest < $$stop; $$dest++) {\n' + ' HEAP' + (possibleAlign*8) + '[$$dest] = ' + values[possibleAlign] + '\n}'); } @@ -1100,9 +1100,11 @@ function makeCopyValues(dest, src, num, type, modifier, align) { if (isNumber(num) && parseInt(num) <= UNROLL_LOOP_MAX) { return unroll(type, num); } - dest = dest + '+$$i'; - src = src + '+$$i'; - return 'for (var $$i = 0; $$i < ' + num + '; $$i++) {\n' + unroll(type, 1) + ' }'; + var oldDest = dest, oldSrc = src; + dest = '$$dest'; + src = '$$src'; + return 'for ($$src = ' + oldSrc + ', $$dest = ' + oldDest + ', $$stop = $$src + ' + num + '; $$src < $$stop; $$src++, $$dest++) {\n' + + unroll(type, 1) + ' }'; } else { // USE_TYPED_ARRAYS == 2 // If we don't know how to handle this at compile-time, or handling it is best done in a large amount of code, call memset if (!isNumber(num) || (align < 4 && parseInt(num) >= SEEK_OPTIMAL_ALIGN_MIN)) { |