aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-26 14:44:16 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-26 14:51:29 -0700
commit9987b9a039052cb84f33127e5b2c3df58f349d7c (patch)
tree35b8fafd420fbe84a6ffc5e1e1aef11263238f57
parentb5cff5e14f352b7deadd0f674b5fe987650bcf39 (diff)
flatten if-chains into smaller chains, chunking reduces the overhead of flattening them out entirely
-rwxr-xr-xtests/runner.py6
-rw-r--r--tools/js-optimizer.js50
-rw-r--r--tools/test-js-optimizer-asm-outline1-output.js92
-rw-r--r--tools/test-js-optimizer-asm-outline2-output.js240
4 files changed, 224 insertions, 164 deletions
diff --git a/tests/runner.py b/tests/runner.py
index 15f0070a..fc41c8a1 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -11091,11 +11091,11 @@ f.close()
self.get_library('zlib', os.path.join('libz.a'), make_args=['libz.a']),
open(path_from_root('tests', 'zlib', 'ref.txt'), 'r').read(),
{
- 100: (190, 210),
+ 100: (190, 250),
250: (300, 330),
500: (250, 310),
- 1000: (330, 400),
- 2000: (450, 500),
+ 1000: (230, 300),
+ 2000: (380, 450),
5000: (800, 1100),
0: (1500, 1800)
},
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index 95d9b82f..29b36cad 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -3001,7 +3001,7 @@ function outline(ast) {
// Try to flatten out code as much as possible, to make outlining more feasible.
function flatten(func, asmData) {
- var minSize = sizeToOutline/3;
+ var minSize = sizeToOutline;
var helperId = 0;
function getHelper() {
while (1) {
@@ -3012,18 +3012,22 @@ function outline(ast) {
}
}
}
+ var ignore = [];
traverse(func, function(node) {
var stats = getStatements(node);
if (stats) {
for (var i = 0; i < stats.length; i++) {
var node = stats[i]; // step over param
+ if (ignore.indexOf(node) >= 0) continue;
+ if (node[0] == 'stat') node = node[1];
+ if (ignore.indexOf(node) >= 0) continue;
var type = node[0];
if (measureSize(node) >= minSize) {
if (type === 'if' && node[3]) {
var reps = [];
var helper = getHelper();
// clear helper
- reps.push(['stat', ['assign', true, ['name', helper], ['num', 1]]]);
+ reps.push(['stat', ['assign', true, ['name', helper], ['num', 1]]]); // 1 means continue in ifs
// gather parts
var parts = [];
var curr = node;
@@ -3036,13 +3040,41 @@ function outline(ast) {
break;
}
}
- // generate flattened code
+ // chunkify. Each chunk is a chain of if-elses, with the new overhead just on entry and exit
+ var chunks = [];
+ var currSize = 0;
+ var currChunk = [];
parts.forEach(function(part) {
- var condition = ['name', helper];
- if (part.condition) condition = ['conditional', condition, part.condition, ['num', 0]];
- assert(part.body[0] == 'block');
- reps.push(makeIf(condition, part.body[1]));
- getStatements(part.body).unshift(['stat', ['assign', true, ['name', helper], ['num', 0]]]);
+ var size = (part.condition ? measureSize(part.condition) : 0) + measureSize(part.body) + 5; // add constant for overhead of extra code
+ assert(size > 0);
+ if (size + currSize >= minSize && currSize) {
+ chunks.push(currChunk);
+ currChunk = [];
+ currSize = 0;
+ }
+ currChunk.push(part);
+ currSize += size;
+ });
+ assert(currSize);
+ chunks.push(currChunk);
+ // generate flattened code
+ chunks.forEach(function(chunk) {
+ var pre = ['stat', ['assign', true, ['name', helper], ['num', 0]]];
+ var chain = null, tail = null;
+ chunk.forEach(function(part) {
+ // add to chain
+ var contents = makeIf(part.condition || ['num', 1], part.body[1]);
+ if (chain) {
+ tail[3] = contents;
+ } else {
+ chain = contents;
+ ignore.push(contents);
+ }
+ tail = contents;
+ });
+ // if none of the ifs were entered, in the final else note that we need to continue
+ tail[3] = ['block', [['stat', ['assign', true, ['name', helper], ['num', 1]]]]];
+ reps.push(makeIf(['name', helper], [pre, chain]));
});
// replace code and update i
stats.splice.apply(stats, [i, 1].concat(reps));
@@ -3504,7 +3536,7 @@ function outline(ast) {
var newFuncs = doOutline(func, asmData, stats, i, end); // outline [i, .. ,end] inclusive
if (newFuncs.length) {
ret.push.apply(ret, newFuncs);
- printErr('performed outline on ' + func[1] + ' of ' + sizeSeen + ', func is now size ' + measureSize(func));
+ printErr('performed outline on ' + func[1] + ' of ' + sizeSeen + ', func is now size ' + measureSize(func) + ' ==> ' + newFuncs[0][1]);
}
sizeSeen = 0;
end = i-1;
diff --git a/tools/test-js-optimizer-asm-outline1-output.js b/tools/test-js-optimizer-asm-outline1-output.js
index 65fbd6a5..5027f680 100644
--- a/tools/test-js-optimizer-asm-outline1-output.js
+++ b/tools/test-js-optimizer-asm-outline1-output.js
@@ -276,7 +276,7 @@ function vars_w_stack(x, y) {
function chain() {
var helper$0 = 0, sp = 0;
sp = STACKTOP;
- STACKTOP = STACKTOP + 352 | 0;
+ STACKTOP = STACKTOP + 336 | 0;
helper$0 = 1;
HEAP32[sp + 56 >> 2] = 0;
HEAP32[sp + 60 >> 2] = 0;
@@ -583,17 +583,23 @@ function chain$0(sp) {
sp = sp | 0;
var helper$0 = 0;
helper$0 = HEAP32[sp + 8 >> 2] | 0;
- if (helper$0 ? x == 11 : 0) {
- helper$0 = 0;
- print(11);
- }
- if (helper$0 ? x == 12 : 0) {
+ if (helper$0) {
helper$0 = 0;
- print(12);
+ if (x == 11) {
+ print(11);
+ } else if (x == 12) {
+ print(12);
+ } else {
+ helper$0 = 1;
+ }
}
if (helper$0) {
helper$0 = 0;
- print(99);
+ if (1) {
+ print(99);
+ } else {
+ helper$0 = 1;
+ }
}
HEAP32[sp + 8 >> 2] = helper$0;
}
@@ -601,13 +607,15 @@ function chain$1(sp) {
sp = sp | 0;
var helper$0 = 0;
helper$0 = HEAP32[sp + 8 >> 2] | 0;
- if (helper$0 ? x == 9 : 0) {
- helper$0 = 0;
- print(9);
- }
- if (helper$0 ? x == 10 : 0) {
+ if (helper$0) {
helper$0 = 0;
- print(10);
+ if (x == 9) {
+ print(9);
+ } else if (x == 10) {
+ print(10);
+ } else {
+ helper$0 = 1;
+ }
}
HEAP32[sp + 8 >> 2] = helper$0;
}
@@ -615,13 +623,15 @@ function chain$2(sp) {
sp = sp | 0;
var helper$0 = 0;
helper$0 = HEAP32[sp + 8 >> 2] | 0;
- if (helper$0 ? x == 7 : 0) {
- helper$0 = 0;
- print(7);
- }
- if (helper$0 ? x == 8 : 0) {
+ if (helper$0) {
helper$0 = 0;
- print(8);
+ if (x == 7) {
+ print(7);
+ } else if (x == 8) {
+ print(8);
+ } else {
+ helper$0 = 1;
+ }
}
HEAP32[sp + 8 >> 2] = helper$0;
}
@@ -629,13 +639,15 @@ function chain$3(sp) {
sp = sp | 0;
var helper$0 = 0;
helper$0 = HEAP32[sp + 8 >> 2] | 0;
- if (helper$0 ? x == 5 : 0) {
- helper$0 = 0;
- print(5);
- }
- if (helper$0 ? x == 6 : 0) {
+ if (helper$0) {
helper$0 = 0;
- print(6);
+ if (x == 5) {
+ print(5);
+ } else if (x == 6) {
+ print(6);
+ } else {
+ helper$0 = 1;
+ }
}
HEAP32[sp + 8 >> 2] = helper$0;
}
@@ -643,13 +655,15 @@ function chain$4(sp) {
sp = sp | 0;
var helper$0 = 0;
helper$0 = HEAP32[sp + 8 >> 2] | 0;
- if (helper$0 ? x == 3 : 0) {
- helper$0 = 0;
- print(3);
- }
- if (helper$0 ? x == 4 : 0) {
+ if (helper$0) {
helper$0 = 0;
- print(4);
+ if (x == 3) {
+ print(3);
+ } else if (x == 4) {
+ print(4);
+ } else {
+ helper$0 = 1;
+ }
}
HEAP32[sp + 8 >> 2] = helper$0;
}
@@ -657,13 +671,15 @@ function chain$5(sp) {
sp = sp | 0;
var helper$0 = 0;
helper$0 = HEAP32[sp + 8 >> 2] | 0;
- if (helper$0 ? x == 1 : 0) {
- helper$0 = 0;
- print(1);
- }
- if (helper$0 ? x == 2 : 0) {
+ if (helper$0) {
helper$0 = 0;
- print(2);
+ if (x == 1) {
+ print(1);
+ } else if (x == 2) {
+ print(2);
+ } else {
+ helper$0 = 1;
+ }
}
HEAP32[sp + 8 >> 2] = helper$0;
}
diff --git a/tools/test-js-optimizer-asm-outline2-output.js b/tools/test-js-optimizer-asm-outline2-output.js
index abff54cb..9f0be278 100644
--- a/tools/test-js-optimizer-asm-outline2-output.js
+++ b/tools/test-js-optimizer-asm-outline2-output.js
@@ -38,54 +38,62 @@ function _free($mem) {
$16 = $mem + (($10 & -8) - 8) | 0;
L621 : do {
helper$0 = 1;
- if (helper$0 ? ($10 & 1 | 0) == 0 : 0) {
+ if (helper$0) {
helper$0 = 0;
- $21 = HEAP32[($mem - 8 | 0) >> 2] | 0;
- if (($10 & 3 | 0) == 0) {
- return;
- }
- $25 = $mem + (-8 - $21 | 0) | 0;
- $26 = $21 + ($10 & -8) | 0;
- if (($mem + (-8 - $21 | 0) | 0) >>> 0 < $5 >>> 0) {
- _abort();
- }
- HEAP32[sp + 672 >> 2] = 0;
- HEAP32[sp + 676 >> 2] = 0;
- HEAP32[sp + 48 >> 2] = $25;
- HEAP32[sp + 8 >> 2] = $mem;
- HEAP32[sp + 24 >> 2] = $10;
- HEAP32[sp + 56 >> 2] = $26;
- HEAP32[sp + 40 >> 2] = $21;
- HEAP32[sp + 16 >> 2] = $5;
- HEAP32[sp + 224 >> 2] = $p_0;
- HEAP32[sp + 216 >> 2] = $psize_0;
- _free$1(sp);
- $p_0 = HEAP32[sp + 224 >> 2] | 0;
- $psize_0 = HEAP32[sp + 216 >> 2] | 0;
- tempValue = HEAP32[sp + 672 >> 2] | 0;
- tempInt = HEAP32[sp + 676 >> 2] | 0;
- tempDouble = +HEAPF32[sp + 676 >> 2];
- HEAP32[sp + 672 >> 2] = 0;
- HEAP32[sp + 676 >> 2] = 0;
- if ((tempValue | 0) == 5) {
- return;
- }
- if ((tempValue | 0) == 1) {
- break;
- }
- if ((tempValue | 0) == 2) {
- switch (tempInt | 0) {
- case 2:
- {
- break L621;
+ if (($10 & 1 | 0) == 0) {
+ $21 = HEAP32[($mem - 8 | 0) >> 2] | 0;
+ if (($10 & 3 | 0) == 0) {
+ return;
+ }
+ $25 = $mem + (-8 - $21 | 0) | 0;
+ $26 = $21 + ($10 & -8) | 0;
+ if (($mem + (-8 - $21 | 0) | 0) >>> 0 < $5 >>> 0) {
+ _abort();
+ }
+ HEAP32[sp + 664 >> 2] = 0;
+ HEAP32[sp + 668 >> 2] = 0;
+ HEAP32[sp + 48 >> 2] = $25;
+ HEAP32[sp + 8 >> 2] = $mem;
+ HEAP32[sp + 24 >> 2] = $10;
+ HEAP32[sp + 56 >> 2] = $26;
+ HEAP32[sp + 40 >> 2] = $21;
+ HEAP32[sp + 16 >> 2] = $5;
+ HEAP32[sp + 224 >> 2] = $p_0;
+ HEAP32[sp + 216 >> 2] = $psize_0;
+ _free$1(sp);
+ $p_0 = HEAP32[sp + 224 >> 2] | 0;
+ $psize_0 = HEAP32[sp + 216 >> 2] | 0;
+ tempValue = HEAP32[sp + 664 >> 2] | 0;
+ tempInt = HEAP32[sp + 668 >> 2] | 0;
+ tempDouble = +HEAPF32[sp + 668 >> 2];
+ HEAP32[sp + 664 >> 2] = 0;
+ HEAP32[sp + 668 >> 2] = 0;
+ if ((tempValue | 0) == 5) {
+ return;
+ }
+ if ((tempValue | 0) == 1) {
+ break;
+ }
+ if ((tempValue | 0) == 2) {
+ switch (tempInt | 0) {
+ case 2:
+ {
+ break L621;
+ }
}
}
+ } else {
+ helper$0 = 1;
}
}
if (helper$0) {
helper$0 = 0;
- $p_0 = $mem - 8 | 0;
- $psize_0 = $10 & -8;
+ if (1) {
+ $p_0 = $mem - 8 | 0;
+ $psize_0 = $10 & -8;
+ } else {
+ helper$0 = 1;
+ }
}
} while (0);
$189 = $p_0;
@@ -96,8 +104,8 @@ function _free($mem) {
if (($194 & 1 | 0) == 0) {
_abort();
}
- HEAP32[sp + 680 >> 2] = 0;
- HEAP32[sp + 684 >> 2] = 0;
+ HEAP32[sp + 672 >> 2] = 0;
+ HEAP32[sp + 676 >> 2] = 0;
HEAP32[sp + 240 >> 2] = $194;
HEAP32[sp + 32 >> 2] = $16;
HEAP32[sp + 216 >> 2] = $psize_0;
@@ -106,11 +114,11 @@ function _free($mem) {
HEAP32[sp + 8 >> 2] = $mem;
HEAP32[sp + 24 >> 2] = $10;
_free$2(sp);
- tempValue = HEAP32[sp + 680 >> 2] | 0;
- tempInt = HEAP32[sp + 684 >> 2] | 0;
- tempDouble = +HEAPF32[sp + 684 >> 2];
- HEAP32[sp + 680 >> 2] = 0;
- HEAP32[sp + 684 >> 2] = 0;
+ tempValue = HEAP32[sp + 672 >> 2] | 0;
+ tempInt = HEAP32[sp + 676 >> 2] | 0;
+ tempDouble = +HEAPF32[sp + 676 >> 2];
+ HEAP32[sp + 672 >> 2] = 0;
+ HEAP32[sp + 676 >> 2] = 0;
if ((tempValue | 0) == 5) {
return;
}
@@ -149,7 +157,7 @@ function linear$1(sp) {
}
function _free$0(sp) {
sp = sp | 0;
- var $16 = 0, $220 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $227 = 0, $194 = 0, helper$2 = 0, $233 = 0, $mem = 0, $10 = 0, $236 = 0, $_pre_phi305 = 0, $267 = 0, $270 = 0, $273 = 0, $294 = 0, $299 = 0, $R7_1 = 0, $R7_0 = 0, $RP9_0 = 0, $301 = 0, $302 = 0, $305 = 0, $306 = 0, $278 = 0, $320 = 0, $351 = 0, $364 = 0, $psize_1 = 0;
+ var $16 = 0, $220 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $227 = 0, $194 = 0, $233 = 0, $mem = 0, $10 = 0, $236 = 0, $_pre_phi305 = 0, $267 = 0, $270 = 0, $273 = 0, $294 = 0, $299 = 0, $R7_1 = 0, $R7_0 = 0, $RP9_0 = 0, $301 = 0, $302 = 0, $305 = 0, $306 = 0, $278 = 0, $320 = 0, $351 = 0, $364 = 0, $psize_1 = 0;
$psize_1 = HEAP32[sp + 424 >> 2] | 0;
$10 = HEAP32[sp + 24 >> 2] | 0;
$mem = HEAP32[sp + 8 >> 2] | 0;
@@ -165,14 +173,12 @@ function _free$0(sp) {
HEAP32[25] = $p_0;
HEAP32[$p_0 + 4 >> 2] = $220 | 1;
HEAP32[$189 + $220 >> 2] = $220;
- HEAP32[sp + 664 >> 2] = 5;
+ HEAP32[sp + 656 >> 2] = 5;
break OL;
}
$227 = ($194 & -8) + $psize_0 | 0;
L726 : do {
- helper$2 = 1;
- if (helper$2 ? $194 >>> 0 < 256 : 0) {
- helper$2 = 0;
+ if ($194 >>> 0 < 256) {
$233 = HEAP32[$mem + ($10 & -8) >> 2] | 0;
$236 = HEAP32[$mem + ($10 & -8 | 4) >> 2] | 0;
do {
@@ -206,9 +212,7 @@ function _free$0(sp) {
} while (0);
HEAP32[$233 + 12 >> 2] = $236;
HEAP32[$_pre_phi305 >> 2] = $233;
- }
- if (helper$2) {
- helper$2 = 0;
+ } else {
$267 = $mem + (($10 & -8) - 8) | 0;
$270 = HEAP32[$mem + (($10 & -8) + 16) >> 2] | 0;
$273 = HEAP32[$mem + ($10 & -8 | 4) >> 2] | 0;
@@ -329,11 +333,11 @@ function _free$0(sp) {
HEAP32[$189 + $227 >> 2] = $227;
if (($p_0 | 0) != (HEAP32[25] | 0)) {
$psize_1 = $227;
- HEAP32[sp + 664 >> 2] = 1;
+ HEAP32[sp + 656 >> 2] = 1;
break OL;
}
HEAP32[22] = $227;
- HEAP32[sp + 664 >> 2] = 5;
+ HEAP32[sp + 656 >> 2] = 5;
break OL;
} while (0);
HEAP32[sp + 424 >> 2] = $psize_1;
@@ -354,14 +358,14 @@ function _free$1(sp) {
if ((HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] & 3 | 0) != 3) {
$p_0 = $25;
$psize_0 = $26;
- HEAP32[sp + 672 >> 2] = 1;
+ HEAP32[sp + 664 >> 2] = 1;
break OL;
}
HEAP32[22] = $26;
HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] = HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] & -2;
HEAP32[$mem + ((-8 - $21 | 0) + 4) >> 2] = $26 | 1;
HEAP32[($mem + (($10 & -8) - 8) | 0) >> 2] = $26;
- HEAP32[sp + 672 >> 2] = 5;
+ HEAP32[sp + 664 >> 2] = 5;
break OL;
}
if ($21 >>> 0 < 256) {
@@ -382,7 +386,7 @@ function _free$1(sp) {
HEAP32[20] = HEAP32[20] & (1 << ($21 >>> 3) ^ -1);
$p_0 = $25;
$psize_0 = $26;
- HEAP32[sp + 672 >> 2] = 1;
+ HEAP32[sp + 664 >> 2] = 1;
break OL;
}
do {
@@ -403,7 +407,7 @@ function _free$1(sp) {
HEAP32[$_pre_phi307 >> 2] = $37;
$p_0 = $25;
$psize_0 = $26;
- HEAP32[sp + 672 >> 2] = 1;
+ HEAP32[sp + 664 >> 2] = 1;
break OL;
}
$69 = $mem + (-8 - $21 | 0) | 0;
@@ -470,7 +474,7 @@ function _free$1(sp) {
if (($72 | 0) == 0) {
$p_0 = $25;
$psize_0 = $26;
- HEAP32[sp + 672 >> 2] = 1;
+ HEAP32[sp + 664 >> 2] = 1;
break OL;
}
$120 = 384 + (HEAP32[($mem + ((-8 - $21 | 0) + 28) | 0) >> 2] << 2) | 0;
@@ -483,8 +487,8 @@ function _free$1(sp) {
HEAP32[21] = HEAP32[21] & (1 << HEAP32[($mem + ((-8 - $21 | 0) + 28) | 0) >> 2] ^ -1);
$p_0 = $25;
$psize_0 = $26;
- HEAP32[sp + 672 >> 2] = 2;
- HEAP32[sp + 676 >> 2] = 2;
+ HEAP32[sp + 664 >> 2] = 2;
+ HEAP32[sp + 668 >> 2] = 2;
break OL;
} else {
if ($72 >>> 0 < (HEAP32[24] | 0) >>> 0) {
@@ -498,8 +502,8 @@ function _free$1(sp) {
if (($R_1 | 0) == 0) {
$p_0 = $25;
$psize_0 = $26;
- HEAP32[sp + 672 >> 2] = 2;
- HEAP32[sp + 676 >> 2] = 2;
+ HEAP32[sp + 664 >> 2] = 2;
+ HEAP32[sp + 668 >> 2] = 2;
break OL;
}
}
@@ -524,7 +528,7 @@ function _free$1(sp) {
if (($164 | 0) == 0) {
$p_0 = $25;
$psize_0 = $26;
- HEAP32[sp + 672 >> 2] = 1;
+ HEAP32[sp + 664 >> 2] = 1;
break OL;
}
if ($164 >>> 0 < (HEAP32[24] | 0) >>> 0) {
@@ -534,7 +538,7 @@ function _free$1(sp) {
HEAP32[$164 + 24 >> 2] = $R_1;
$p_0 = $25;
$psize_0 = $26;
- HEAP32[sp + 672 >> 2] = 1;
+ HEAP32[sp + 664 >> 2] = 1;
break OL;
}
} while (0);
@@ -554,56 +558,64 @@ function _free$2(sp) {
OL : do {
do {
helper$1 = 1;
- if (helper$1 ? ($194 & 2 | 0) == 0 : 0) {
+ if (helper$1) {
helper$1 = 0;
- if (($16 | 0) == (HEAP32[26] | 0)) {
- $204 = (HEAP32[23] | 0) + $psize_0 | 0;
- HEAP32[23] = $204;
- HEAP32[26] = $p_0;
- HEAP32[$p_0 + 4 >> 2] = $204 | 1;
- if (($p_0 | 0) == (HEAP32[25] | 0)) {
- HEAP32[25] = 0;
- HEAP32[22] = 0;
+ if (($194 & 2 | 0) == 0) {
+ if (($16 | 0) == (HEAP32[26] | 0)) {
+ $204 = (HEAP32[23] | 0) + $psize_0 | 0;
+ HEAP32[23] = $204;
+ HEAP32[26] = $p_0;
+ HEAP32[$p_0 + 4 >> 2] = $204 | 1;
+ if (($p_0 | 0) == (HEAP32[25] | 0)) {
+ HEAP32[25] = 0;
+ HEAP32[22] = 0;
+ }
+ if ($204 >>> 0 <= (HEAP32[27] | 0) >>> 0) {
+ HEAP32[sp + 672 >> 2] = 5;
+ break OL;
+ }
+ _sys_trim(0) | 0;
+ HEAP32[sp + 672 >> 2] = 5;
+ break OL;
}
- if ($204 >>> 0 <= (HEAP32[27] | 0) >>> 0) {
- HEAP32[sp + 680 >> 2] = 5;
+ HEAP32[sp + 656 >> 2] = 0;
+ HEAP32[sp + 660 >> 2] = 0;
+ HEAP32[sp + 32 >> 2] = $16;
+ HEAP32[sp + 216 >> 2] = $psize_0;
+ HEAP32[sp + 224 >> 2] = $p_0;
+ HEAP32[sp + 232 >> 2] = $189;
+ HEAP32[sp + 240 >> 2] = $194;
+ HEAP32[sp + 8 >> 2] = $mem;
+ HEAP32[sp + 24 >> 2] = $10;
+ HEAP32[sp + 424 >> 2] = $psize_1;
+ _free$0(sp);
+ $psize_1 = HEAP32[sp + 424 >> 2] | 0;
+ tempValue = HEAP32[sp + 656 >> 2] | 0;
+ tempInt = HEAP32[sp + 660 >> 2] | 0;
+ tempDouble = +HEAPF32[sp + 660 >> 2];
+ HEAP32[sp + 656 >> 2] = 0;
+ HEAP32[sp + 660 >> 2] = 0;
+ if ((tempValue | 0) == 5) {
+ HEAP32[sp + 672 >> 2] = 5;
break OL;
}
- _sys_trim(0) | 0;
- HEAP32[sp + 680 >> 2] = 5;
- break OL;
- }
- HEAP32[sp + 664 >> 2] = 0;
- HEAP32[sp + 668 >> 2] = 0;
- HEAP32[sp + 32 >> 2] = $16;
- HEAP32[sp + 216 >> 2] = $psize_0;
- HEAP32[sp + 224 >> 2] = $p_0;
- HEAP32[sp + 232 >> 2] = $189;
- HEAP32[sp + 240 >> 2] = $194;
- HEAP32[sp + 8 >> 2] = $mem;
- HEAP32[sp + 24 >> 2] = $10;
- HEAP32[sp + 424 >> 2] = $psize_1;
- _free$0(sp);
- $psize_1 = HEAP32[sp + 424 >> 2] | 0;
- tempValue = HEAP32[sp + 664 >> 2] | 0;
- tempInt = HEAP32[sp + 668 >> 2] | 0;
- tempDouble = +HEAPF32[sp + 668 >> 2];
- HEAP32[sp + 664 >> 2] = 0;
- HEAP32[sp + 668 >> 2] = 0;
- if ((tempValue | 0) == 5) {
- HEAP32[sp + 680 >> 2] = 5;
- break OL;
- }
- if ((tempValue | 0) == 1) {
- break;
+ if ((tempValue | 0) == 1) {
+ break;
+ }
+ } else {
+ helper$1 = 1;
}
}
if (helper$1) {
helper$1 = 0;
- HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] = $194 & -2;
- HEAP32[$p_0 + 4 >> 2] = $psize_0 | 1;
- HEAP32[$189 + $psize_0 >> 2] = $psize_0;
- $psize_1 = $psize_0;
+ if (1) {
+ HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] = $194 & -2;
+ HEAP32[$p_0 + 4 >> 2] = $psize_0 | 1;
+ HEAP32[$189 + $psize_0 >> 2] = $psize_0;
+ $psize_1 = $psize_0;
+ } else {
+ helper$1 = 1;
+ }
}
} while (0);
$390 = $psize_1 >>> 3;
@@ -628,7 +640,7 @@ function _free$2(sp) {
HEAP32[$F16_0 + 12 >> 2] = $p_0;
HEAP32[$p_0 + 8 >> 2] = $F16_0;
HEAP32[$p_0 + 12 >> 2] = 120 + ($390 << 1 << 2) | 0;
- HEAP32[sp + 680 >> 2] = 5;
+ HEAP32[sp + 672 >> 2] = 5;
break OL;
}
$414 = $p_0;
@@ -715,7 +727,7 @@ function _free$2(sp) {
if (($501 | 0) == 0) {
$sp_0_in_i = 536;
} else {
- HEAP32[sp + 680 >> 2] = 5;
+ HEAP32[sp + 672 >> 2] = 5;
break OL;
}
while (1) {
@@ -728,7 +740,7 @@ function _free$2(sp) {
}
HEAP32[28] = -1;
STACKTOP = sp;
- HEAP32[sp + 680 >> 2] = 5;
+ HEAP32[sp + 672 >> 2] = 5;
break OL;
} while (0);
}