diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-08-09 17:19:33 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-08-09 17:19:33 -0700 |
commit | 3adfd036d7bbfbae1b1c1cf7de4fc9850ce06ad4 (patch) | |
tree | 4c542b893c307e65a4aadf5050007073e1c6af2b | |
parent | ae236b288c46dab914a137670e9366e0b0cc4c09 (diff) |
aim for more evenly-sized pieces in outliner
-rwxr-xr-x | tests/runner.py | 10 | ||||
-rw-r--r-- | tools/js-optimizer.js | 24 | ||||
-rw-r--r-- | tools/shared.py | 2 | ||||
-rw-r--r-- | tools/test-js-optimizer-asm-outline1-output.js | 315 | ||||
-rw-r--r-- | tools/test-js-optimizer-asm-outline2-output.js | 562 |
5 files changed, 387 insertions, 526 deletions
diff --git a/tests/runner.py b/tests/runner.py index cbdacc2c..11555961 100755 --- a/tests/runner.py +++ b/tests/runner.py @@ -11379,11 +11379,11 @@ f.close() ([], { 100: (190, 250), 250: (200, 330), - 500: (250, 310), - 1000: (230, 300), - 2000: (380, 450), - 5000: (800, 1100), - 0: (1500, 1800) + 500: (250, 500), + 1000: (230, 1000), + 2000: (380, 2000), + 5000: (800, 5000), + 0: (1500, 5000) }), (['-O2'], { 100: (0, 1500), diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 5f1c6df8..ff6aee67 100644 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -3106,7 +3106,9 @@ function outline(ast) { // Reserve an extra two spots per possible outlining: one for control flow var, the other for control flow data // The control variables are zeroed out when calling an outlined function, and after using // the value after they return. - asmData.maxOutlinings = Math.round(3*measureSize(func)/extraInfo.sizeToOutline); + var size = measureSize(func); + asmData.maxOutlinings = Math.round(3*size/extraInfo.sizeToOutline); + asmData.intendedPieces = Math.ceil(size/extraInfo.sizeToOutline); asmData.totalStackSize = stackSize + (stack.length + 2*asmData.maxOutlinings)*8; asmData.controlStackPos = function(i) { return stackSize + (stack.length + i)*8 }; asmData.controlDataStackPos = function(i) { return stackSize + (stack.length + i)*8 + 4 }; @@ -3211,13 +3213,15 @@ function outline(ast) { var CONTROL_BREAK = 1, CONTROL_BREAK_LABEL = 2, CONTROL_CONTINUE = 3, CONTROL_CONTINUE_LABEL = 4, CONTROL_RETURN_VOID = 5, CONTROL_RETURN_INT = 6, CONTROL_RETURN_DOUBLE = 7; var sizeToOutline = null; // customized per function and as we make progress - function calculateThreshold(func) { - sizeToOutline = extraInfo.sizeToOutline; + function calculateThreshold(func, asmData) { var size = measureSize(func); - //var desiredChunks = Math.ceil(size/extraInfo.sizeToOutline); - ////sizeToOutline = Math.round((extraInfo.sizeToOutline + (2*size/desiredChunks))/3); - //sizeToOutline = Math.round(size/desiredChunks); - printErr('trying to reduce the size of ' + func[1] + ' which is ' + size + ' (>= ' + extraInfo.sizeToOutline + '), aim for ' + sizeToOutline); + if (size <= extraInfo.sizeToOutline) { + sizeToOutline = Infinity; + printErr(' no point in trying to reduce the size of ' + func[1] + ' which is ' + size + ' <= ' + extraInfo.sizeToOutline); + } else { + sizeToOutline = Math.round(size/Math.max(2, asmData.intendedPieces--)); + printErr('trying to reduce the size of ' + func[1] + ' which is ' + size + ' (>=? ' + extraInfo.sizeToOutline + '), aim for ' + sizeToOutline); + } } var level = 0, loops = 0; @@ -3446,7 +3450,7 @@ function outline(ast) { } outliningParents[newIdent] = func[1]; printErr('performed outline ' + [func[1], newIdent, 'code sizes (pre/post):', originalCodeSize, measureSize(code), 'overhead (w/r):', setSize(setSub(codeInfo.writes, owned)), setSize(setSub(codeInfo.reads, owned)), ' owned: ', setSize(owned), ' left: ', setSize(asmData.vars), setSize(asmData.params), ' loopsDepth: ', loops]); - calculateThreshold(func); + calculateThreshold(func, asmData); return [newFunc]; } @@ -3526,6 +3530,7 @@ function outline(ast) { if (ret.length > pre) { // we outlined recursively, reset our state here //printErr('successful outline in recursion ' + func[1] + ' due to recursive in level ' + level); + if (measureSize(func) <= extraInfo.sizeToOutline) break; end = i-1; sizeSeen = 0; canRestart = true; @@ -3565,6 +3570,7 @@ function outline(ast) { if (newFuncs.length) { ret.push.apply(ret, newFuncs); } + if (measureSize(func) <= extraInfo.sizeToOutline) break; sizeSeen = 0; end = i-1; canRestart = true; @@ -3596,8 +3602,8 @@ function outline(ast) { if (size >= extraInfo.sizeToOutline) { aggressiveVariableElimination(func, asmData); flatten(func, asmData); - calculateThreshold(func); analyzeFunction(func, asmData); + calculateThreshold(func, asmData); var stats = getStatements(func); var ret = outlineStatements(func, asmData, stats, 0.9*size); assert(level == 0); diff --git a/tools/shared.py b/tools/shared.py index 37d568e7..08231af9 100644 --- a/tools/shared.py +++ b/tools/shared.py @@ -630,7 +630,7 @@ def line_splitter(data): return out -def limit_size(string, MAX=120*20): +def limit_size(string, MAX=12000*20): if len(string) < MAX: return string return string[0:MAX/2] + '\n[..]\n' + string[-MAX/2:] diff --git a/tools/test-js-optimizer-asm-outline1-output.js b/tools/test-js-optimizer-asm-outline1-output.js index de0747f9..904e56cf 100644 --- a/tools/test-js-optimizer-asm-outline1-output.js +++ b/tools/test-js-optimizer-asm-outline1-output.js @@ -5,7 +5,6 @@ function lin() { c(1); c(2); c(3); - c(4); HEAP32[sp + 16 >> 2] = 0; HEAP32[sp + 20 >> 2] = 0; lin$1(sp); @@ -21,8 +20,6 @@ function lin2() { while (1) { c(1); c(2); - c(3); - c(4); HEAP32[sp + 16 >> 2] = 0; HEAP32[sp + 20 >> 2] = 0; lin2$1(sp); @@ -42,9 +39,14 @@ function lin3() { c(3); c(4); c(5); - HEAP32[sp + 16 >> 2] = 0; - HEAP32[sp + 20 >> 2] = 0; - lin3$1(sp); + c(6); + c(7); + c(8); + c(9); + c(10); + c(11); + c(12); + c(13); HEAP32[sp + 8 >> 2] = 0; HEAP32[sp + 12 >> 2] = 0; lin3$0(sp); @@ -70,9 +72,15 @@ function lin4() { c(2); c(3); c(4); - HEAP32[sp + 16 >> 2] = 0; - HEAP32[sp + 20 >> 2] = 0; - lin4$1(sp); + c(5); + c(6); + c(7); + c(8); + c(9); + c(10); + c(11); + c(12); + c(13); HEAP32[sp + 8 >> 2] = 0; HEAP32[sp + 12 >> 2] = 0; lin4$0(sp); @@ -97,9 +105,15 @@ function lin5() { c(2); c(3); c(4); - HEAP32[sp + 16 >> 2] = 0; - HEAP32[sp + 20 >> 2] = 0; - lin5$1(sp); + c(5); + c(6); + c(7); + c(8); + c(9); + c(10); + c(11); + c(12); + c(13); HEAP32[sp + 8 >> 2] = 0; HEAP32[sp + 12 >> 2] = 0; lin5$0(sp); @@ -120,13 +134,6 @@ function mix() { sp = STACKTOP; STACKTOP = STACKTOP + 168 | 0; main : while (1) { - c(1); - c(2); - c(3); - c(4); - c(5); - c(6); - c(7); HEAP32[sp + 16 >> 2] = 0; HEAP32[sp + 20 >> 2] = 0; mix$1(sp); @@ -170,11 +177,10 @@ function vars(x, y) { var sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 152 | 0; - HEAP32[sp + 8 >> 2] = x; - HEAPF32[sp + 16 >> 2] = y; - HEAP32[sp + 32 >> 2] = 0; - HEAP32[sp + 36 >> 2] = 0; - vars$1(sp); + c(1 + (x + y)); + c(2 + y * x); + c(3 + (x + y)); + c(4 + y * x); HEAP32[sp + 8 >> 2] = x; HEAPF32[sp + 16 >> 2] = y; HEAP32[sp + 24 >> 2] = 0; @@ -192,6 +198,7 @@ function vars2(x, y) { b = y * x; a = c(1 + a); b = c(2 + b); + a = c(3 + a); HEAP32[sp + 24 >> 2] = a; HEAPF32[sp + 32 >> 2] = b; HEAP32[sp + 40 >> 2] = 0; @@ -207,13 +214,11 @@ function vars3(x, y) { var a = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 160 | 0; - HEAP32[sp + 8 >> 2] = x; - HEAPF32[sp + 16 >> 2] = y; - HEAP32[sp + 24 >> 2] = a; - HEAP32[sp + 40 >> 2] = 0; - HEAP32[sp + 44 >> 2] = 0; - vars3$1(sp); - a = HEAP32[sp + 24 >> 2] | 0; + a = x + y; + a = c(1 + a); + a = c(2 + y * x); + a = c(3 + a); + a = c(4 + y * x); HEAP32[sp + 8 >> 2] = x; HEAPF32[sp + 16 >> 2] = y; HEAP32[sp + 24 >> 2] = a; @@ -230,15 +235,11 @@ function vars4(x, y) { sp = STACKTOP; STACKTOP = STACKTOP + 168 | 0; a = x + y; - HEAP32[sp + 8 >> 2] = x; - HEAPF32[sp + 16 >> 2] = y; - HEAP32[sp + 24 >> 2] = a; - HEAPF32[sp + 32 >> 2] = b; - HEAP32[sp + 48 >> 2] = 0; - HEAP32[sp + 52 >> 2] = 0; - vars4$1(sp); - a = HEAP32[sp + 24 >> 2] | 0; - b = +HEAPF32[sp + 32 >> 2]; + b = y * x; + a = c(1 + a); + a = c(2 + a); + a = c(3 + a); + a = c(4 + a); HEAP32[sp + 8 >> 2] = x; HEAP32[sp + 24 >> 2] = a; HEAPF32[sp + 32 >> 2] = b; @@ -255,7 +256,6 @@ function vars_w_stack(x, y) { var a = 0, b = +0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 208 | 0; - a = x + y; HEAP32[sp + 24 >> 2] = x; HEAPF32[sp + 32 >> 2] = y; HEAP32[sp + 40 >> 2] = a; @@ -276,19 +276,9 @@ function vars_w_stack(x, y) { function chain() { var helper$0 = 0, sp = 0; sp = STACKTOP; - STACKTOP = STACKTOP + 336 | 0; + STACKTOP = STACKTOP + 240 | 0; helper$0 = 1; HEAP32[sp + 8 >> 2] = helper$0; - HEAP32[sp + 56 >> 2] = 0; - HEAP32[sp + 60 >> 2] = 0; - chain$5(sp); - helper$0 = HEAP32[sp + 8 >> 2] | 0; - HEAP32[sp + 8 >> 2] = helper$0; - HEAP32[sp + 48 >> 2] = 0; - HEAP32[sp + 52 >> 2] = 0; - chain$4(sp); - helper$0 = HEAP32[sp + 8 >> 2] | 0; - HEAP32[sp + 8 >> 2] = helper$0; HEAP32[sp + 40 >> 2] = 0; HEAP32[sp + 44 >> 2] = 0; chain$3(sp); @@ -298,21 +288,10 @@ function chain() { HEAP32[sp + 36 >> 2] = 0; chain$2(sp); helper$0 = HEAP32[sp + 8 >> 2] | 0; - HEAP32[sp + 8 >> 2] = helper$0; - HEAP32[sp + 24 >> 2] = 0; - HEAP32[sp + 28 >> 2] = 0; - chain$1(sp); - helper$0 = HEAP32[sp + 8 >> 2] | 0; - HEAP32[sp + 8 >> 2] = helper$0; - HEAP32[sp + 16 >> 2] = 0; - HEAP32[sp + 20 >> 2] = 0; - chain$0(sp); - helper$0 = HEAP32[sp + 8 >> 2] | 0; STACKTOP = sp; } function lin$0(sp) { sp = sp | 0; - c(13); c(14); c(15); c(16); @@ -323,6 +302,7 @@ function lin$0(sp) { } function lin$1(sp) { sp = sp | 0; + c(4); c(5); c(6); c(7); @@ -331,10 +311,10 @@ function lin$1(sp) { c(10); c(11); c(12); + c(13); } function lin2$0(sp) { sp = sp | 0; - c(13); c(14); c(15); c(16); @@ -345,6 +325,8 @@ function lin2$0(sp) { } function lin2$1(sp) { sp = sp | 0; + c(3); + c(4); c(5); c(6); c(7); @@ -353,6 +335,7 @@ function lin2$1(sp) { c(10); c(11); c(12); + c(13); } function lin3$0(sp) { sp = sp | 0; @@ -369,21 +352,9 @@ function lin3$0(sp) { break OL; } while (0); } -function lin3$1(sp) { - sp = sp | 0; - c(6); - c(7); - c(8); - c(9); - c(10); - c(11); - c(12); - c(13); -} function lin4$0(sp) { sp = sp | 0; OL : do { - c(13); c(14); c(15); c(16); @@ -395,21 +366,9 @@ function lin4$0(sp) { break OL; } while (0); } -function lin4$1(sp) { - sp = sp | 0; - c(5); - c(6); - c(7); - c(8); - c(9); - c(10); - c(11); - c(12); -} function lin5$0(sp) { sp = sp | 0; OL : do { - c(13); c(14); c(15); c(16); @@ -421,22 +380,9 @@ function lin5$0(sp) { break OL; } while (0); } -function lin5$1(sp) { - sp = sp | 0; - c(5); - c(6); - c(7); - c(8); - c(9); - c(10); - c(11); - c(12); -} function mix$0(sp) { sp = sp | 0; OL : do { - c(16); - c(17); HEAP32[sp + 8 >> 2] = 2; HEAP32[sp + 12 >> 2] = 2; break OL; @@ -460,6 +406,13 @@ function mix$0(sp) { } function mix$1(sp) { sp = sp | 0; + c(1); + c(2); + c(3); + c(4); + c(5); + c(6); + c(7); c(8); c(9); c(10); @@ -468,6 +421,8 @@ function mix$1(sp) { c(13); c(14); c(15); + c(16); + c(17); } function vars$0(sp) { sp = sp | 0; @@ -479,22 +434,11 @@ function vars$0(sp) { c(7 + (x + y)); c(8 + y * x); } -function vars$1(sp) { - sp = sp | 0; - var x = 0, y = +0; - x = HEAP32[sp + 8 >> 2] | 0; - y = +HEAPF32[sp + 16 >> 2]; - c(1 + (x + y)); - c(2 + y * x); - c(3 + (x + y)); - c(4 + y * x); -} function vars2$0(sp) { sp = sp | 0; - var a = 0, b = +0; + var b = +0, a = 0; a = HEAP32[sp + 24 >> 2] | 0; b = +HEAPF32[sp + 32 >> 2]; - a = c(3 + a); b = c(4 + b); a = c(5 + a); b = c(6 + b); @@ -507,57 +451,28 @@ function vars3$0(sp) { x = HEAP32[sp + 8 >> 2] | 0; y = +HEAPF32[sp + 16 >> 2]; a = HEAP32[sp + 24 >> 2] | 0; - a = c(4 + y * x); a = c(5 + a); a = c(6 + y * x); a = c(7 + a); HEAP32[sp + 24 >> 2] = a; } -function vars3$1(sp) { - sp = sp | 0; - var a = 0, x = 0, y = +0; - x = HEAP32[sp + 8 >> 2] | 0; - y = +HEAPF32[sp + 16 >> 2]; - a = HEAP32[sp + 24 >> 2] | 0; - a = x + y; - a = c(1 + a); - a = c(2 + y * x); - a = c(3 + a); - HEAP32[sp + 24 >> 2] = a; -} function vars4$0(sp) { sp = sp | 0; var a = 0, x = 0, b = +0; x = HEAP32[sp + 8 >> 2] | 0; a = HEAP32[sp + 24 >> 2] | 0; b = +HEAPF32[sp + 32 >> 2]; - a = c(4 + a); a = c(5 + a); a = c(6 + a); b = c(7 + a + x); HEAP32[sp + 24 >> 2] = a; HEAPF32[sp + 32 >> 2] = b; } -function vars4$1(sp) { - sp = sp | 0; - var y = +0, x = 0, a = 0, b = +0; - x = HEAP32[sp + 8 >> 2] | 0; - y = +HEAPF32[sp + 16 >> 2]; - a = HEAP32[sp + 24 >> 2] | 0; - b = +HEAPF32[sp + 32 >> 2]; - b = y * x; - a = c(1 + a); - a = c(2 + a); - a = c(3 + a); - HEAP32[sp + 24 >> 2] = a; - HEAPF32[sp + 32 >> 2] = b; -} function vars_w_stack$0(sp) { sp = sp | 0; var a = 0, b = +0; a = HEAP32[sp + 40 >> 2] | 0; b = +HEAPF32[sp + 48 >> 2]; - a = c(4 + a); a = c(5 + a); a = c(6 + a); b = c(7 + a); @@ -567,15 +482,17 @@ function vars_w_stack$0(sp) { } function vars_w_stack$1(sp) { sp = sp | 0; - var y = +0, x = 0, a = 0, b = +0; + var a = 0, x = 0, y = +0, b = +0; x = HEAP32[sp + 24 >> 2] | 0; y = +HEAPF32[sp + 32 >> 2]; a = HEAP32[sp + 40 >> 2] | 0; b = +HEAPF32[sp + 48 >> 2]; + a = x + y; b = y * x; a = c(1 + a); a = c(2 + a); a = c(3 + a); + a = c(4 + a); HEAP32[sp + 40 >> 2] = a; HEAPF32[sp + 48 >> 2] = b; } @@ -583,23 +500,22 @@ function chain$0(sp) { sp = sp | 0; var helper$0 = 0; helper$0 = HEAP32[sp + 8 >> 2] | 0; - if (helper$0) { - helper$0 = 0; - if (x == 11) { - print(11); - } else if (x == 12) { - print(12); - } else { - helper$0 = 1; - } - } - if (helper$0) { - helper$0 = 0; - if (1) { - print(99); - } else { - helper$0 = 1; - } + if (x == 7) { + print(7); + } else if (x == 8) { + print(8); + } else if (x == 9) { + print(9); + } else if (x == 10) { + print(10); + } else if (x == 11) { + print(11); + } else if (x == 12) { + print(12); + } else if (1) { + print(99); + } else { + helper$0 = 1; } HEAP32[sp + 8 >> 2] = helper$0; } @@ -607,15 +523,20 @@ function chain$1(sp) { sp = sp | 0; var helper$0 = 0; helper$0 = HEAP32[sp + 8 >> 2] | 0; - if (helper$0) { - helper$0 = 0; - if (x == 9) { - print(9); - } else if (x == 10) { - print(10); - } else { - helper$0 = 1; - } + if (x == 1) { + print(1); + } else if (x == 2) { + print(2); + } else if (x == 3) { + print(3); + } else if (x == 4) { + print(4); + } else if (x == 5) { + print(5); + } else if (x == 6) { + print(6); + } else { + helper$0 = 1; } HEAP32[sp + 8 >> 2] = helper$0; } @@ -625,13 +546,11 @@ function chain$2(sp) { helper$0 = HEAP32[sp + 8 >> 2] | 0; if (helper$0) { helper$0 = 0; - if (x == 7) { - print(7); - } else if (x == 8) { - print(8); - } else { - helper$0 = 1; - } + HEAP32[sp + 8 >> 2] = helper$0; + HEAP32[sp + 16 >> 2] = 0; + HEAP32[sp + 20 >> 2] = 0; + chain$0(sp); + helper$0 = HEAP32[sp + 8 >> 2] | 0; } HEAP32[sp + 8 >> 2] = helper$0; } @@ -641,45 +560,11 @@ function chain$3(sp) { helper$0 = HEAP32[sp + 8 >> 2] | 0; if (helper$0) { helper$0 = 0; - if (x == 5) { - print(5); - } else if (x == 6) { - print(6); - } else { - helper$0 = 1; - } - } - HEAP32[sp + 8 >> 2] = helper$0; -} -function chain$4(sp) { - sp = sp | 0; - var helper$0 = 0; - helper$0 = HEAP32[sp + 8 >> 2] | 0; - if (helper$0) { - helper$0 = 0; - if (x == 3) { - print(3); - } else if (x == 4) { - print(4); - } else { - helper$0 = 1; - } - } - HEAP32[sp + 8 >> 2] = helper$0; -} -function chain$5(sp) { - sp = sp | 0; - var helper$0 = 0; - helper$0 = HEAP32[sp + 8 >> 2] | 0; - if (helper$0) { - helper$0 = 0; - if (x == 1) { - print(1); - } else if (x == 2) { - print(2); - } else { - helper$0 = 1; - } + HEAP32[sp + 8 >> 2] = helper$0; + HEAP32[sp + 24 >> 2] = 0; + HEAP32[sp + 28 >> 2] = 0; + chain$1(sp); + helper$0 = HEAP32[sp + 8 >> 2] | 0; } 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 5acac673..28feb6cb 100644 --- a/tools/test-js-optimizer-asm-outline2-output.js +++ b/tools/test-js-optimizer-asm-outline2-output.js @@ -11,6 +11,8 @@ function linear() { cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); + cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); + cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); HEAP32[sp + 16 >> 2] = 0; HEAP32[sp + 20 >> 2] = 0; linear$1(sp); @@ -21,7 +23,7 @@ function linear() { } function _free($mem) { $mem = $mem | 0; - var $5 = 0, $10 = 0, $16 = 0, $21 = 0, $25 = 0, $26 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $194 = 0, sp = 0, helper$0 = 0; + var $5 = 0, $10 = 0, $16 = 0, $21 = 0, $25 = 0, $26 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $194 = 0, sp = 0; sp = STACKTOP; if (($mem | 0) == 0) { STACKTOP = sp; @@ -37,63 +39,59 @@ function _free($mem) { } $16 = $mem + (($10 & -8) - 8) | 0; L621 : do { - helper$0 = 1; - if (helper$0) { - helper$0 = 0; - 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 + 8 >> 2] = $mem; - HEAP32[sp + 16 >> 2] = $5; - HEAP32[sp + 24 >> 2] = $10; - HEAP32[sp + 40 >> 2] = $21; - HEAP32[sp + 48 >> 2] = $25; - HEAP32[sp + 56 >> 2] = $26; - HEAP32[sp + 216 >> 2] = $psize_0; - HEAP32[sp + 224 >> 2] = $p_0; - HEAP32[sp + 664 >> 2] = 0; - HEAP32[sp + 668 >> 2] = 0; - _free$1(sp); - $psize_0 = HEAP32[sp + 216 >> 2] | 0; - $p_0 = HEAP32[sp + 224 >> 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) { + 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(); + } + if (($25 | 0) == (HEAP32[25] | 0)) { + if ((HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] & 3 | 0) != 3) { + $p_0 = $25; + $psize_0 = $26; break; } - if ((tempValue | 0) == 2) { - switch (tempInt | 0) { - case 2: - { - break L621; - } + 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; + return; + } + HEAP32[sp + 8 >> 2] = $mem; + HEAP32[sp + 16 >> 2] = $5; + HEAP32[sp + 40 >> 2] = $21; + HEAP32[sp + 48 >> 2] = $25; + HEAP32[sp + 56 >> 2] = $26; + HEAP32[sp + 216 >> 2] = $psize_0; + HEAP32[sp + 224 >> 2] = $p_0; + HEAP32[sp + 648 >> 2] = 0; + HEAP32[sp + 652 >> 2] = 0; + _free$1(sp); + $psize_0 = HEAP32[sp + 216 >> 2] | 0; + $p_0 = HEAP32[sp + 224 >> 2] | 0; + tempValue = HEAP32[sp + 648 >> 2] | 0; + tempInt = HEAP32[sp + 652 >> 2] | 0; + tempDouble = +HEAPF32[sp + 652 >> 2]; + HEAP32[sp + 648 >> 2] = 0; + HEAP32[sp + 652 >> 2] = 0; + 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; - if (1) { - $p_0 = $mem - 8 | 0; - $psize_0 = $10 & -8; - } else { - helper$0 = 1; } + } else { + $p_0 = $mem - 8 | 0; + $psize_0 = $10 & -8; } } while (0); $189 = $p_0; @@ -111,14 +109,14 @@ function _free($mem) { HEAP32[sp + 224 >> 2] = $p_0; HEAP32[sp + 232 >> 2] = $189; HEAP32[sp + 240 >> 2] = $194; - HEAP32[sp + 672 >> 2] = 0; - HEAP32[sp + 676 >> 2] = 0; + HEAP32[sp + 656 >> 2] = 0; + HEAP32[sp + 660 >> 2] = 0; _free$2(sp); - 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; + 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) { return; } @@ -137,7 +135,6 @@ function linear$0(sp) { cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); - cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); } function linear$1(sp) { sp = sp | 0; @@ -153,221 +150,186 @@ function linear$1(sp) { cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); - cheez(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); } function _free$0(sp) { sp = sp | 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; + var $194 = 0, $233 = 0, $mem = 0, $10 = 0, $236 = 0, $16 = 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; $mem = HEAP32[sp + 8 >> 2] | 0; $10 = HEAP32[sp + 24 >> 2] | 0; $16 = HEAP32[sp + 32 >> 2] | 0; - $psize_0 = HEAP32[sp + 216 >> 2] | 0; - $p_0 = HEAP32[sp + 224 >> 2] | 0; - $189 = HEAP32[sp + 232 >> 2] | 0; $194 = HEAP32[sp + 240 >> 2] | 0; - $psize_1 = HEAP32[sp + 424 >> 2] | 0; OL : do { - if (($16 | 0) == (HEAP32[25] | 0)) { - $220 = (HEAP32[22] | 0) + $psize_0 | 0; - HEAP32[22] = $220; - HEAP32[25] = $p_0; - HEAP32[$p_0 + 4 >> 2] = $220 | 1; - HEAP32[$189 + $220 >> 2] = $220; - HEAP32[sp + 656 >> 2] = 5; - break OL; - } - $227 = ($194 & -8) + $psize_0 | 0; - L726 : do { - if ($194 >>> 0 < 256) { - $233 = HEAP32[$mem + ($10 & -8) >> 2] | 0; - $236 = HEAP32[$mem + ($10 & -8 | 4) >> 2] | 0; - do { - if (($233 | 0) != (120 + ($194 >>> 3 << 1 << 2) | 0 | 0)) { - if ($233 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); - } - if ((HEAP32[$233 + 12 >> 2] | 0) == ($16 | 0)) { - break; - } + if ($194 >>> 0 < 256) { + $233 = HEAP32[$mem + ($10 & -8) >> 2] | 0; + $236 = HEAP32[$mem + ($10 & -8 | 4) >> 2] | 0; + do { + if (($233 | 0) != (120 + ($194 >>> 3 << 1 << 2) | 0 | 0)) { + if ($233 >>> 0 < (HEAP32[24] | 0) >>> 0) { _abort(); } - } while (0); - if (($236 | 0) == ($233 | 0)) { - HEAP32[20] = HEAP32[20] & (1 << ($194 >>> 3) ^ -1); - break; + if ((HEAP32[$233 + 12 >> 2] | 0) == ($16 | 0)) { + break; + } + _abort(); } - do { - if (($236 | 0) == (120 + ($194 >>> 3 << 1 << 2) | 0 | 0)) { - $_pre_phi305 = $236 + 8 | 0; - } else { - if ($236 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); - } - if ((HEAP32[($236 + 8 | 0) >> 2] | 0) == ($16 | 0)) { - $_pre_phi305 = $236 + 8 | 0; - break; - } + } while (0); + if (($236 | 0) == ($233 | 0)) { + HEAP32[20] = HEAP32[20] & (1 << ($194 >>> 3) ^ -1); + HEAP32[sp + 640 >> 2] = 1; + break OL; + } + do { + if (($236 | 0) == (120 + ($194 >>> 3 << 1 << 2) | 0 | 0)) { + $_pre_phi305 = $236 + 8 | 0; + } else { + if ($236 >>> 0 < (HEAP32[24] | 0) >>> 0) { _abort(); } - } while (0); - HEAP32[$233 + 12 >> 2] = $236; - HEAP32[$_pre_phi305 >> 2] = $233; - } else { - $267 = $mem + (($10 & -8) - 8) | 0; - $270 = HEAP32[$mem + (($10 & -8) + 16) >> 2] | 0; - $273 = HEAP32[$mem + ($10 & -8 | 4) >> 2] | 0; - do { - if (($273 | 0) == ($267 | 0)) { - $294 = HEAP32[($mem + (($10 & -8) + 12) | 0) >> 2] | 0; - if (($294 | 0) == 0) { - $299 = HEAP32[($mem + (($10 & -8) + 8) | 0) >> 2] | 0; - if (($299 | 0) == 0) { - $R7_1 = 0; - break; - } else { - $R7_0 = $299; - $RP9_0 = $mem + (($10 & -8) + 8) | 0; - } - } else { - $R7_0 = $294; - $RP9_0 = $mem + (($10 & -8) + 12) | 0; - } - while (1) { - $301 = $R7_0 + 20 | 0; - $302 = HEAP32[$301 >> 2] | 0; - if (($302 | 0) != 0) { - $R7_0 = $302; - $RP9_0 = $301; - continue; - } - $305 = $R7_0 + 16 | 0; - $306 = HEAP32[$305 >> 2] | 0; - if (($306 | 0) == 0) { - break; - } else { - $R7_0 = $306; - $RP9_0 = $305; - } - } - if ($RP9_0 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); - } else { - HEAP32[$RP9_0 >> 2] = 0; - $R7_1 = $R7_0; + if ((HEAP32[($236 + 8 | 0) >> 2] | 0) == ($16 | 0)) { + $_pre_phi305 = $236 + 8 | 0; + break; + } + _abort(); + } + } while (0); + HEAP32[$233 + 12 >> 2] = $236; + HEAP32[$_pre_phi305 >> 2] = $233; + } else { + $267 = $mem + (($10 & -8) - 8) | 0; + $270 = HEAP32[$mem + (($10 & -8) + 16) >> 2] | 0; + $273 = HEAP32[$mem + ($10 & -8 | 4) >> 2] | 0; + do { + if (($273 | 0) == ($267 | 0)) { + $294 = HEAP32[($mem + (($10 & -8) + 12) | 0) >> 2] | 0; + if (($294 | 0) == 0) { + $299 = HEAP32[($mem + (($10 & -8) + 8) | 0) >> 2] | 0; + if (($299 | 0) == 0) { + $R7_1 = 0; break; + } else { + $R7_0 = $299; + $RP9_0 = $mem + (($10 & -8) + 8) | 0; } } else { - $278 = HEAP32[$mem + ($10 & -8) >> 2] | 0; - if ($278 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); - } - if ((HEAP32[($278 + 12 | 0) >> 2] | 0) != ($267 | 0)) { - _abort(); + $R7_0 = $294; + $RP9_0 = $mem + (($10 & -8) + 12) | 0; + } + while (1) { + $301 = $R7_0 + 20 | 0; + $302 = HEAP32[$301 >> 2] | 0; + if (($302 | 0) != 0) { + $R7_0 = $302; + $RP9_0 = $301; + continue; } - if ((HEAP32[($273 + 8 | 0) >> 2] | 0) == ($267 | 0)) { - HEAP32[($278 + 12 | 0) >> 2] = $273; - HEAP32[($273 + 8 | 0) >> 2] = $278; - $R7_1 = $273; + $305 = $R7_0 + 16 | 0; + $306 = HEAP32[$305 >> 2] | 0; + if (($306 | 0) == 0) { break; } else { - _abort(); + $R7_0 = $306; + $RP9_0 = $305; } } - } while (0); - if (($270 | 0) == 0) { - break; - } - $320 = 384 + (HEAP32[($mem + (($10 & -8) + 20) | 0) >> 2] << 2) | 0; - do { - if (($267 | 0) == (HEAP32[$320 >> 2] | 0)) { - HEAP32[$320 >> 2] = $R7_1; - if (($R7_1 | 0) != 0) { - break; - } - HEAP32[21] = HEAP32[21] & (1 << HEAP32[($mem + (($10 & -8) + 20) | 0) >> 2] ^ -1); - break L726; + if ($RP9_0 >>> 0 < (HEAP32[24] | 0) >>> 0) { + _abort(); } else { - if ($270 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); - } - if ((HEAP32[($270 + 16 | 0) >> 2] | 0) == ($267 | 0)) { - HEAP32[($270 + 16 | 0) >> 2] = $R7_1; - } else { - HEAP32[$270 + 20 >> 2] = $R7_1; - } - if (($R7_1 | 0) == 0) { - break L726; - } + HEAP32[$RP9_0 >> 2] = 0; + $R7_1 = $R7_0; + break; } - } while (0); - if ($R7_1 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); - } - HEAP32[$R7_1 + 24 >> 2] = $270; - $351 = HEAP32[$mem + (($10 & -8) + 8) >> 2] | 0; - do { - if (($351 | 0) != 0) { - if ($351 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); - } else { - HEAP32[$R7_1 + 16 >> 2] = $351; - HEAP32[$351 + 24 >> 2] = $R7_1; - break; - } + } else { + $278 = HEAP32[$mem + ($10 & -8) >> 2] | 0; + if ($278 >>> 0 < (HEAP32[24] | 0) >>> 0) { + _abort(); + } + if ((HEAP32[($278 + 12 | 0) >> 2] | 0) != ($267 | 0)) { + _abort(); + } + if ((HEAP32[($273 + 8 | 0) >> 2] | 0) == ($267 | 0)) { + HEAP32[($278 + 12 | 0) >> 2] = $273; + HEAP32[($273 + 8 | 0) >> 2] = $278; + $R7_1 = $273; + break; + } else { + _abort(); } - } while (0); - $364 = HEAP32[$mem + (($10 & -8) + 12) >> 2] | 0; - if (($364 | 0) == 0) { - break; } - if ($364 >>> 0 < (HEAP32[24] | 0) >>> 0) { - _abort(); + } while (0); |