diff --git a/tests/optimizer/asm-eliminator-test-output.js b/tests/optimizer/asm-eliminator-test-output.js deleted file mode 100644 index 428cdd749c6a3..0000000000000 --- a/tests/optimizer/asm-eliminator-test-output.js +++ /dev/null @@ -1,1043 +0,0 @@ -function asm(x, y) { - x = +x; - y = y | 0; - var a = 0; - a = cheez(y + ~~x | 0) | 0; - fleefl(a * a | 0, a | 0); -} -function __Z11printResultPiS_j($needle, $haystack, $len) { - $needle = $needle | 0; - $haystack = $haystack | 0; - $len = $len | 0; - var $3 = 0, __stackBase__ = 0; - __stackBase__ = STACKTOP; - $3 = _bsearch($needle, $haystack, $len, 4, 2); - if (($3 | 0) == 0) { - _puts(_str | 0); - STACKTOP = __stackBase__; - return; - } else { - _printf(__str1 | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 4 | 0, HEAP32[(tempInt & 16777215) >> 2] = HEAP32[($3 & 16777215) >> 2] | 0, tempInt)); - STACKTOP = __stackBase__; - return; - } -} -function _segment_holding($addr) { - $addr = $addr | 0; - var $sp_0 = 0, $3 = 0, $_0 = 0, label = 0; - $sp_0 = __gm_ + 444 | 0; - while (1) { - $3 = HEAP32[(($sp_0 | 0) & 16777215) >> 2] | 0; - if (!($3 >>> 0 > $addr >>> 0)) { - if (($3 + (HEAP32[(($sp_0 + 4 | 0) & 16777215) >> 2] | 0) | 0) >>> 0 > $addr >>> 0) { - $_0 = $sp_0; - label = 1658; - break; - } - } - $sp_0 = HEAP32[(($sp_0 + 8 | 0) & 16777215) >> 2] | 0; - if (($sp_0 | 0) == 0) { - $_0 = 0; - label = 1659; - break; - } - } - if (label == 1659) { - return $_0; - } else if (label == 1658) { - return $_0; - } -} -function __ZN5identC2EiPKcPci($this, $n, $a) { - $this = $this | 0; - $n = $n | 0; - $a = $a | 0; - HEAP32[($this & 16777215) >> 2] = __ZTV5ident + 8 | 0; - HEAP32[($this + 4 & 16777215) >> 2] = 5; - HEAP32[($this + 8 & 16777215) >> 2] = $n; - HEAP32[($this + 20 & 16777215) >> 2] = 2147483647; - HEAP32[($this + 24 & 16777215) >> 2] = 0; - HEAP32[($this + 28 & 16777215) >> 2] = $a; - HEAP32[($this + 32 & 16777215) >> 2] = 0; - HEAP32[($this + 40 & 16777215) >> 2] = 1; - return; -} -function _vec2Length($this) { - $this = $this | 0; - var __stackBase__ = 0; - __stackBase__ = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - STACKTOP = __stackBase__; - return 0; -} -function exc($this) { - $this = $this | 0; - var $1 = 0, $5 = 0; - if (!__THREW__) { - $5 = HEAP32[(($1 | 0) & 16777215) >> 2] | 0; - HEAP32[(($this | 0) & 16777215) >> 2] = $5; - __ZNSt3__114__shared_count12__add_sharedEv($5 | 0); - return; - } else { - $8$0 = ___cxa_find_matching_catch(HEAP32[(_llvm_eh_exception_buf & 16777215) >> 2] | 0, HEAP32[(_llvm_eh_exception_buf + 4 & 16777215) >> 2] | 0); - $8$1 = tempRet0; - ___cxa_call_unexpected($8$0); - } -} -function label() { - if (f()) { - g(); - } - L100 : if (h()) { - i(); - } -} -function switchy() { - var yes = 0; - while (1) switch (label | 0) { - case 1: - break; - case 2: - yes = 111; - yes = yes * 2; - print(yes); - yes = yes + 1; - print(yes / 2); - continue; - case 3: - break; - } -} -function switchy2($inFormat) { - $inFormat = $inFormat | 0; - var label = 0; - switch ($inFormat | 0) { - case 14: - { - return 5; - } - case 10: - case 11: - case 12: - case 22: - { - label = 4; - break; - } - default: - {} - } - if ((label | 0) == 4) { - return 8; - } - return 1; -} -function tempDouble(a) { - a = +a; - f(a * a); -} -function __ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_($this, $manifold, $xfA, $xfB) { - $this = $this | 0; - $manifold = $manifold | 0; - $xfA = $xfA | 0; - $xfB = $xfB | 0; - var __stackBase__ = 0; - __stackBase__ = STACKTOP; - STACKTOP = STACKTOP + 256 | 0; - __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS7_(__stackBase__ | 0, $manifold, HEAP32[((HEAP32[($this + 48 | 0) >> 2] | 0) + 12 | 0) >> 2] | 0, $xfA, HEAP32[((HEAP32[($this + 52 | 0) >> 2] | 0) + 12 | 0) >> 2] | 0, $xfB); - STACKTOP = __stackBase__; - return; -} -function looop2() { - var i = 0; - while (1) { - do_it(); - i = i + 1 | 0; - if (condition(i)) { - break; - } - } -} -function looop3() { - var i = 0; - while (1) { - do_it(); - i = i + 1 | 0; - if (!condition(i)) { - break; - } - } -} -function looop4() { - var i = 0, i$looptemp = 0; - while (1) { - do_it(); - i$looptemp = i; - i = i + 1 | 0; - f(i$looptemp, i); - if (!condition()) { - break; - } - } -} -function looop4b() { - var i = 0, i$looptemp = 0; - while (1) { - do_it(); - i$looptemp = i; - i = i + 1 | 0; - g(i); - if (!condition(i$looptemp)) { - break; - } - } -} -function looop5() { - var i = 0, helper = 0; - while (1) { - do_it(); - helper = i + 1 | 0; - if (condition(helper)) { - i = helper; - } else { - break; - } - } - moar(i); -} -function looop6() { - var i = 0; - while (1) { - do_it(); - i = i + 1 | 0; - if (!condition(i)) { - break; - } - } - moar(i); -} -function looop7() { - var $old_0_i107_i = 0, $current_0_i108_i = 0, $696 = 0; - $old_0_i107_i = $draw_left_i; - while (1) { - $current_0_i108_i = HEAP32[$old_0_i107_i >> 2] | 0; - if (($current_0_i108_i | 0) == 0) { - break; - } - $696 = $current_0_i108_i + 4 | 0; - if (($current_0_i108_i | 0) == ($P_3207_i | 0)) { - break; - } else { - $old_0_i107_i = $696; - } - } - HEAP32[$old_0_i107_i >> 2] = HEAP32[$696 >> 2] | 0; - while (1) {} -} -function looop8() { - var i = 0, j = 0, a = 0; - while (1) { - do_it(i, j); - a = i + j | 0; - if (condition(helper)) { - break; - } else { - i = a; - j = a; - } - } -} -function multiloop($n_0, $35) { - $n_0 = $n_0 | 0; - $35 = $35 | 0; - var $p_0 = 0, $41 = 0; - $n_0 = $35; - $p_0 = (HEAP32[$15 >> 2] | 0) + ($35 << 1) | 0; - while (1) { - $p_0 = $p_0 - 2 | 0; - $41 = HEAPU16[$p_0 >> 1] | 0; - if ($41 >>> 0 < $2 >>> 0) { - $_off0 = 0; - } else { - $_off0 = $41 - $2 & 65535; - } - HEAP16[$p_0 >> 1] = $_off0; - $n_0 = $n_0 - 1 | 0; - if (($n_0 | 0) == 0) { - break; - } - } -} -function multiloop2($n_0, $35) { - $n_0 = $n_0 | 0; - $35 = $35 | 0; - var $p_0 = 0, $41 = 0, $p_0$looptemp = 0; - $n_0 = $35; - $p_0 = (HEAP32[$15 >> 2] | 0) + ($35 << 1) | 0; - while (1) { - $p_0$looptemp = $p_0; - $p_0 = $p_0 - 2 | 0; - $41 = HEAPU16[$p_0 >> 1] | 0; - if ($41 >>> 0 < $2 >>> 0) { - $_off0 = 0; - } else { - $_off0 = $41 - $2 & 65535; - } - HEAP16[$p_0 >> 1] = $p_0$looptemp; - $n_0 = $n_0 - 1 | 0; - if (($n_0 | 0) == 0) { - break; - } - } -} -function tempDouble2($46, $14, $28, $42, $20, $32, $45) { - $46 = $46 | 0; - $14 = $14 | 0; - $28 = $28 | 0; - $42 = $42 | 0; - $20 = $20 | 0; - $32 = $32 | 0; - $45 = $45 | 0; - var $_sroa_06_0_insert_insert$1 = 0; - $46 = (HEAPF32[tempDoublePtr >> 2] = ($14 < $28 ? $14 : $28) - $42, HEAP32[tempDoublePtr >> 2] | 0); - $_sroa_06_0_insert_insert$1 = (HEAPF32[tempDoublePtr >> 2] = ($20 < $32 ? $20 : $32) - $42, HEAP32[tempDoublePtr >> 2] | 0) | 0; - HEAP32[$45 >> 2] = 0 | $46; - HEAP32[$45 + 4 >> 2] = $_sroa_06_0_insert_insert$1; - HEAP32[$45 + 8 >> 2] = $_sroa_06_0_insert_insert$1; -} -function watIf() { - while (1) { - if ($cmp38) {} else {} - } -} -function select2($foundBase_0_off0) { - $foundBase_0_off0 = $foundBase_0_off0 | 0; - var $call24 = 0; - $call24 = MUST_RUN() | 0; - STACKTOP = sp; - return ($foundBase_0_off0 ? 0 : $call24) | 0; -} -function binary(x) { - x = x | 0; - memset(f(x)) | 0; - +dmemset(f(x)); -} -function cute($this, $outImage) { - $this = $this | 0; - $outImage = $outImage | 0; - var $retval = 0, $outImage_addr = 0, $width = 0, $height = 0, $bit_depth = 0, $color_type = 0, $data = 0, $bpl = 0, $y = 0, $i = 0, $y76 = 0, $p = 0, $end = 0, $this1 = 0, $call = 0, $call7 = 0, $call8 = 0, $3 = 0, $call17 = 0, $10 = 0, $call32 = 0, $call33 = 0, $17$0 = 0, $call34 = 0, $add_ptr = 0, $32 = 0, $call42 = 0, $35 = 0, $call45 = 0, $41 = 0, $call51 = 0, $43 = 0, $call55 = 0, $call57 = 0, $49 = 0, $call72 = 0, $call75 = 0, label = 0, setjmpLabel = 0, setjmpTable = 0, sp = 0; - sp = STACKTOP; - STACKTOP = STACKTOP + 32 | 0; - label = 1; - setjmpLabel = 0; - setjmpTable = STACKTOP; - STACKTOP = STACKTOP + 168 | 0; - HEAP32[setjmpTable >> 2] = 0; - while (1) switch (label | 0) { - case 1: - $width = sp | 0; - $height = sp + 8 | 0; - $bit_depth = sp + 16 | 0; - $color_type = sp + 24 | 0; - $outImage_addr = $outImage; - $this1 = $this; - if ((HEAP32[($this1 + 32 | 0) >> 2] | 0 | 0) == 3) { - label = 2; - break; - } else { - label = 3; - break; - } - case 2: - $retval = 0; - label = 37; - break; - case 3: - if ((HEAP32[($this1 + 32 | 0) >> 2] | 0 | 0) == 0) { - label = 4; - break; - } else { - label = 6; - break; - } - case 4: - $call = invoke_ii(900, $this1 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - if ($call) { - label = 6; - break; - } else { - label = 5; - break; - } - case 5: - HEAP32[($this1 + 32 | 0) >> 2] = 3; - $retval = 0; - label = 37; - break; - case 6: - HEAP32[($this1 + 28 | 0) >> 2] = 0; - $call7 = invoke_iiii(30, HEAP32[($this1 + 16 | 0) >> 2] | 0 | 0, 2638 | 0, 156 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $call8 = _saveSetjmp($call7 | 0 | 0, label, setjmpTable) | 0; - label = 38; - break; - case 38: - if (($call8 | 0) != 0) { - label = 7; - break; - } else { - label = 10; - break; - } - case 7: - invoke_viii(640, $this1 + 16 | 0 | 0, $this1 + 20 | 0 | 0, $this1 + 24 | 0 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $3 = HEAP32[($this1 + 28 | 0) >> 2] | 0; - if (($3 | 0) == 0) { - label = 9; - break; - } else { - label = 8; - break; - } - case 8: - invoke_vi(926, $3 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - label = 9; - break; - case 9: - HEAP32[($this1 + 16 | 0) >> 2] = 0; - HEAP32[($this1 + 32 | 0) >> 2] = 3; - $retval = 0; - label = 37; - break; - case 10: - invoke_viiif(2, $outImage_addr | 0, HEAP32[($this1 + 16 | 0) >> 2] | 0 | 0, HEAP32[($this1 + 20 | 0) >> 2] | 0 | 0, +(+HEAPF32[($this1 | 0) >> 2])); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $call17 = invoke_ii(832, $outImage_addr | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - if ($call17) { - label = 11; - break; - } else { - label = 14; - break; - } - case 11: - invoke_viii(640, $this1 + 16 | 0 | 0, $this1 + 20 | 0 | 0, $this1 + 24 | 0 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $10 = HEAP32[($this1 + 28 | 0) >> 2] | 0; - if (($10 | 0) == 0) { - label = 13; - break; - } else { - label = 12; - break; - } - case 12: - invoke_vi(926, $10 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - label = 13; - break; - case 13: - HEAP32[($this1 + 16 | 0) >> 2] = 0; - HEAP32[($this1 + 32 | 0) >> 2] = 3; - $retval = 0; - label = 37; - break; - case 14: - invoke_iiiiiiiiii(2, HEAP32[($this1 + 16 | 0) >> 2] | 0 | 0, HEAP32[($this1 + 20 | 0) >> 2] | 0 | 0, $width | 0, $height | 0, $bit_depth | 0, $color_type | 0, 0 | 0, 0 | 0, 0 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $call32 = invoke_ii(850, $outImage_addr | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $data = $call32; - $call33 = invoke_ii(284, $outImage_addr | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $bpl = $call33; - $17$0 = invoke_iii(860, HEAP32[$height >> 2] | 0 | 0, 4 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $call34 = invoke_ii(550, (tempRet0 ? -1 : $17$0) | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - HEAP32[($this1 + 28 | 0) >> 2] = $call34; - $y = 0; - label = 15; - break; - case 15: - if ($y >>> 0 < (HEAP32[$height >> 2] | 0) >>> 0) { - label = 16; - break; - } else { - label = 18; - break; - } - case 16: - $add_ptr = $data + (Math_imul($y, $bpl) | 0) | 0; - HEAP32[((HEAP32[($this1 + 28 | 0) >> 2] | 0) + ($y << 2) | 0) >> 2] = $add_ptr; - label = 17; - break; - case 17: - $y = $y + 1 | 0; - label = 15; - break; - case 18: - invoke_vii(858, HEAP32[($this1 + 16 | 0) >> 2] | 0 | 0, HEAP32[($this1 + 28 | 0) >> 2] | 0 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $32 = $outImage_addr; - $call42 = invoke_iii(690, HEAP32[($this1 + 16 | 0) >> 2] | 0 | 0, HEAP32[($this1 + 20 | 0) >> 2] | 0 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - invoke_vii(1890, $32 | 0, $call42 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $35 = $outImage_addr; - $call45 = invoke_iii(256, HEAP32[($this1 + 16 | 0) >> 2] | 0 | 0, HEAP32[($this1 + 20 | 0) >> 2] | 0 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - invoke_vii(2126, $35 | 0, $call45 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - HEAP32[($this1 + 32 | 0) >> 2] = 2; - invoke_vii(36, HEAP32[($this1 + 16 | 0) >> 2] | 0 | 0, HEAP32[($this1 + 24 | 0) >> 2] | 0 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - invoke_vii(2752, $this1 | 0, HEAP32[($this1 + 24 | 0) >> 2] | 0 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $i = 0; - label = 19; - break; - case 19: - $41 = $i; - $call51 = invoke_ii(618, $this1 + 12 | 0 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - if (($41 | 0) < ($call51 - 1 | 0 | 0)) { - label = 20; - break; - } else { - label = 22; - break; - } - case 20: - $43 = $outImage_addr; - $call55 = invoke_iii(502, $this1 + 12 | 0 | 0, $i | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $call57 = invoke_iii(502, $this1 + 12 | 0 | 0, $i + 1 | 0 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - invoke_viii(550, $43 | 0, $call55 | 0, $call57 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - label = 21; - break; - case 21: - $i = $i + 2 | 0; - label = 19; - break; - case 22: - invoke_viii(640, $this1 + 16 | 0 | 0, $this1 + 20 | 0 | 0, $this1 + 24 | 0 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $49 = HEAP32[($this1 + 28 | 0) >> 2] | 0; - if (($49 | 0) == 0) { - label = 24; - break; - } else { - label = 23; - break; - } - case 23: - invoke_vi(926, $49 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - label = 24; - break; - case 24: - HEAP32[($this1 + 16 | 0) >> 2] = 0; - HEAP32[($this1 + 32 | 0) >> 2] = 0; - if ((HEAP32[$color_type >> 2] | 0 | 0) == 3) { - label = 25; - break; - } else { - label = 36; - break; - } - case 25: - $call72 = invoke_ii(926, $outImage_addr | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - if (($call72 | 0) == 3) { - label = 26; - break; - } else { - label = 36; - break; - } - case 26: - $call75 = invoke_ii(860, $outImage_addr | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $y76 = 0; - label = 27; - break; - case 27: - if (($y76 | 0) < (HEAP32[$height >> 2] | 0 | 0)) { - label = 28; - break; - } else { - label = 35; - break; - } - case 28: - $p = $data + (Math_imul($y76, $bpl) | 0) | 0; - $end = $p + (HEAP32[$width >> 2] | 0) | 0; - label = 29; - break; - case 29: - if ($p >>> 0 < $end >>> 0) { - label = 30; - break; - } else { - label = 33; - break; - } - case 30: - if (((HEAP8[$p] | 0) & 255 | 0) >= ($call75 | 0)) { - label = 31; - break; - } else { - label = 32; - break; - } - case 31: - HEAP8[$p] = 0; - label = 32; - break; - case 32: - $p = $p + 1 | 0; - label = 29; - break; - case 33: - label = 34; - break; - case 34: - $y76 = $y76 + 1 | 0; - label = 27; - break; - case 35: - label = 36; - break; - case 36: - $retval = 1; - label = 37; - break; - case 37: - STACKTOP = sp; - return $retval | 0; - case -1: - if ((setjmpLabel | 0) == 6) { - $call8 = threwValue; - label = 38; - } - __THREW__ = threwValue = 0; - break; - } - return 0; -} -function selfAssign() { - var i1 = 0; - i1 = HEAP32[2] | 0; - HEAP32[2] = i1 + 1; - if (waka) { - return 0; - } - return i1 & 16384 | 0; -} -function elimOneLoopVar($argc, $argv) { - $argc = $argc | 0; - $argv = $argv | 0; - var $arg$0 = 0, $call10 = Math_fround(0), $curri$012 = 0, $j$010 = 0, $ok$0 = 0, $primes$011 = 0, $retval$0 = 0, $vararg_buffer1 = 0; - $curri$012 = 2; - $primes$011 = 0; - while (1) { - $call10 = Math_fround(Math_sqrt(Math_fround(Math_fround($curri$012 | 0)))); - L15 : do { - if ($call10 > Math_fround(+2)) { - $j$010 = 2; - while (1) { - if ((($curri$012 | 0) % ($j$010 | 0) & -1 | 0) == 0) { - $ok$0 = 0; - break L15; - } - $j$010 = $j$010 + 1 | 0; - if (!(Math_fround($j$010 | 0) < $call10)) { - $ok$0 = 1; - break; - } - } - } else { - $ok$0 = 1; - } - } while (0); - $primes$011 = $ok$0 + $primes$011 | 0; - if (($primes$011 | 0) >= ($arg$0 | 0)) { - break; - } else { - $curri$012 = $curri$012 + 1 | 0; - } - } - HEAP32[$vararg_buffer1 >> 2] = $curri$012; - return $retval$0 | 0; -} -function elimOneLoopVar2() { - var $storemerge3$neg9 = 0, $18 = 0, $25 = 0, $26 = 0, $30 = 0, $jp = 0; - $storemerge3$neg9 = -1; - while (1) { - $25 = $jp + ($26 << 2) | 0; - HEAP32[$25 >> 2] = ($18 + $storemerge3$neg9 | 0) + (HEAP32[$25 >> 2] | 0) | 0; - $30 = $26 + 1 | 0; - if (($30 | 0) == 63) { - break; - } else { - $storemerge3$neg9 = $26 ^ -1; - $26 = $30; - } - } -} -function elimOneLoopVar3() { - var $storemerge3$neg9 = 0, $18 = 0, $25 = 0, $26 = 0, $30 = 0, $jp = 0; - $storemerge3$neg9 = -1; - while (1) { - $25 = $jp + ($26 << 2) | 0; - HEAP32[$25 >> 2] = ($18 + $storemerge3$neg9 | 0) + (HEAP32[$25 >> 2] | 0) | 0; - $30 = $26 + 1 | 0; - if (($30 | 0) == 63) { - break; - } else { - $storemerge3$neg9 = $30 ^ -1; - $26 = $30; - } - } -} -function elimOneLoopVar4() { - var $storemerge3$neg9 = 0, $18 = 0, $25 = 0, $26 = 0, $jp = 0; - $storemerge3$neg9 = -1; - while (1) { - $25 = $jp + ($26 << 2) | 0; - HEAP32[$25 >> 2] = ($18 + $storemerge3$neg9 | 0) + (HEAP32[$25 >> 2] | 0) | 0; - $26 = $26 + 1 | 0; - if (($26 | 0) == 63) { - break; - } else { - $storemerge3$neg9 = $18 ^ -1; - } - } -} -function elimOneLoopVarStillUsed() { - var $call10 = Math_fround(0), $curri$012 = 0, $j$010 = 0, $retval$0 = 0; - while (1) { - if ((($curri$012 | 0) % ($j$010 | 0) & -1 | 0) == 0) { - break; - } - $j$010 = $j$010 + 1 | 0; - if (!(Math_fround($j$010 | 0) < $call10)) { - break; - } - } - return $retval$0 | 0; -} -function elimOneLoopVarStillUsedSE() { - var $call10 = Math_fround(0), $curri$012 = 0, $j$010 = 0, $retval$0 = 0, $j$010$looptemp = 0; - while (1) { - $j$010$looptemp = $j$010; - $j$010 = $j$010 + sideeffect() | 0; - if ((($curri$012 | 0) % ($j$010$looptemp | 0) & -1 | 0) == 0) { - break; - } - if (!(Math_fround($j$010 | 0) < $call10)) { - break; - } - } - return $retval$0 | 0; -} -function elimOneLoopVar5() { - var $storemerge3$neg9 = 0, $18 = 0, $25 = 0, $26 = 0, $30 = 0, $jp = 0; - $storemerge3$neg9 = -1; - while (1) { - $25 = $jp + ($26 << 2) | 0; - HEAP32[$25 >> 2] = ($18 + $storemerge3$neg9 | 0) + (HEAP32[$25 >> 2] | 0) | 0; - $30 = $26 + 1 | 0; - if (($30 | 0) == 63) { - f($30); - break; - } else { - $storemerge3$neg9 = $18 ^ -1; - $26 = $30; - } - } -} -function loopVarWithContinue() { - var i = 0, i$looptemp = 0; - i = 0; - while (1) { - i$looptemp = i; - i = i + 1; - if (check()) { - i = i$looptemp + 1; - continue; - } - work(i); - work(i$looptemp); - work(i); - if (check()) { - break; - } - } -} -function helperExtraUse() { - var i = 0, i$looptemp = 0; - i = 0; - while (1) { - i$looptemp = i; - i = i + 1; - work(i$looptemp); - work(i); - if (check()) { - break; - } - } - return i; -} -function mixed_up_loop_helpers() { - var $iterations$0 = 0, $iterations$0$ph = 0, $p$sroa$0$0$ph = +0, $p$sroa$1$0$ph = +0, $p$sroa$1$0$ph$phi = +0, $vararg_buffer = 0, $vararg_ptr1 = 0, sp = 0, $iterations$0$looptemp = 0, $p$sroa$0$0$ph$looptemp = +0; - sp = STACKTOP; - STACKTOP = STACKTOP + 16 | 0; - $vararg_buffer = sp; - $iterations$0$ph = 0; - $p$sroa$0$0$ph = +0; - $p$sroa$1$0$ph = +1; - L1 : while (1) { - $iterations$0 = $iterations$0$ph; - while (1) { - $iterations$0$looptemp = $iterations$0; - $iterations$0 = $iterations$0 + 1 | 0; - if (!(($iterations$0 | 0) < 10)) { - break L1; - } - HEAPF64[tempDoublePtr >> 3] = $p$sroa$0$0$ph; - HEAP32[$vararg_buffer >> 2] = HEAP32[tempDoublePtr >> 2]; - HEAP32[$vararg_buffer + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2]; - $vararg_ptr1 = $vararg_buffer + 8 | 0; - HEAPF64[tempDoublePtr >> 3] = $p$sroa$1$0$ph; - HEAP32[$vararg_ptr1 >> 2] = HEAP32[tempDoublePtr >> 2]; - HEAP32[$vararg_ptr1 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2]; - _printf(8 | 0, $vararg_buffer | 0) | 0; - if (($iterations$0$looptemp | 0) > 0) { - break; - } - } - if (!((($iterations$0 | 0) % 3 & -1 | 0) == 0)) { - $p$sroa$1$0$ph$phi = $p$sroa$0$0$ph; - $iterations$0$ph = $iterations$0; - $p$sroa$0$0$ph = -$p$sroa$1$0$ph; - $p$sroa$1$0$ph = $p$sroa$1$0$ph$phi; - continue; - } - $p$sroa$0$0$ph$looptemp = $p$sroa$0$0$ph; - $p$sroa$0$0$ph = $p$sroa$1$0$ph * +-.5; - $p$sroa$1$0$ph = $p$sroa$0$0$ph$looptemp * +.5; - if ($p$sroa$0$0$ph == +0 & $p$sroa$1$0$ph == +0) { - break; - } else { - $iterations$0$ph = $iterations$0; - } - } -} -function _postProcess() { - cheez(); -} - diff --git a/tests/optimizer/asm-eliminator-test.js b/tests/optimizer/asm-eliminator-test.js deleted file mode 100644 index a80f613594508..0000000000000 --- a/tests/optimizer/asm-eliminator-test.js +++ /dev/null @@ -1,1314 +0,0 @@ -function asm(x, y) { - x = +x; - y = y|0; - var a = 0, b = +0, c = 0; - var label = 0; - a = cheez((y+~~x)|0)|0; - b = a*a; - fleefl(b|0, a|0); -} -function __Z11printResultPiS_j($needle, $haystack, $len) { - $needle = $needle | 0; - $haystack = $haystack | 0; - $len = $len | 0; - var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $puts = 0, $7 = 0, $8 = 0, $9 = 0; - var label = 0; - var __stackBase__ = 0; - __stackBase__ = STACKTOP; - $1 = $needle; - $2 = $haystack; - $3 = _bsearch($1, $2, $len, 4, 2); - $4 = ($3 | 0) == 0; - if ($4) { - $puts = _puts(_str | 0); - STACKTOP = __stackBase__; - return; - } else { - $7 = $3; - $8 = HEAP32[($7 & 16777215) >> 2] | 0; - $9 = _printf(__str1 | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 4 | 0, HEAP32[(tempInt & 16777215) >> 2] = $8, tempInt)); - STACKTOP = __stackBase__; - return; - } -} -function _segment_holding($addr) { - $addr = $addr | 0; - var $sp_0 = 0, $2 = 0, $3 = 0, $4 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; - var $11 = 0, $12 = 0, $13 = 0, $_0 = 0; - var label = 0; - $sp_0 = __gm_ + 444 | 0; - while (1) { - $2 = $sp_0 | 0; - $3 = HEAP32[($2 & 16777215) >> 2] | 0; - $4 = $3 >>> 0 > $addr >>> 0; - if (!$4) { - $6 = $sp_0 + 4 | 0; - $7 = HEAP32[($6 & 16777215) >> 2] | 0; - $8 = $3 + $7 | 0; - $9 = $8 >>> 0 > $addr >>> 0; - if ($9) { - $_0 = $sp_0; - label = 1658; - break; - } - } - $11 = $sp_0 + 8 | 0; - $12 = HEAP32[($11 & 16777215) >> 2] | 0; - $13 = ($12 | 0) == 0; - if ($13) { - $_0 = 0; - label = 1659; - break; - } else { - $sp_0 = $12; - } - } - if (label == 1659) { - return $_0; - } else if (label == 1658) { - return $_0; - } -} -function __ZN5identC2EiPKcPci($this, $n, $a) { - $this = $this | 0; - $n = $n | 0; - $a = $a | 0; - HEAP32[($this & 16777215) >> 2] = __ZTV5ident + 8 | 0; - HEAP32[($this + 4 & 16777215) >> 2] = 5; - HEAP32[($this + 8 & 16777215) >> 2] = $n; - HEAP32[($this + 20 & 16777215) >> 2] = 2147483647; - HEAP32[($this + 24 & 16777215) >> 2] = 0; - HEAP32[($this + 28 & 16777215) >> 2] = $a; - HEAP32[($this + 32 & 16777215) >> 2] = 0; - HEAP32[($this + 40 & 16777215) >> 2] = 1; - return; -} -function _vec2Length($this) { - $this = $this | 0; - var $__first_addr_i = 0, $__last_addr_i = 0, $__comp_addr_i = 0, $a13 = 0, $a14 = 0, $a18 = 0, $a19 = 0; - var label = 0; - var __stackBase__ = 0; - __stackBase__ = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - $__first_addr_i = __stackBase__; - $__last_addr_i = __stackBase__ + 4; - $a13 = $__first_addr_i; - $a14 = $__last_addr_i; - $a18 = $__first_addr_i; - $a19 = $__last_addr_i; - STACKTOP = __stackBase__; - return 0; -} -function exc($this) { - $this = $this | 0; - var $1 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $8 = +0, $9 = 0; - var label = 0; - if (!__THREW__) { - $3 = $this | 0; - $4 = $1 | 0; - $5 = HEAP32[($4 & 16777215) >> 2] | 0; - HEAP32[($3 & 16777215) >> 2] = $5; - $6 = $5 | 0; - __ZNSt3__114__shared_count12__add_sharedEv($6); - return; - } else { - $8$0 = ___cxa_find_matching_catch(HEAP32[(_llvm_eh_exception_buf & 16777215) >> 2] | 0, HEAP32[(_llvm_eh_exception_buf + 4 & 16777215) >> 2] | 0); - $8$1 = tempRet0; - $9 = $8$0; - ___cxa_call_unexpected($9); - } -} -function label() { - var $1 = 0, $2 = 0; - $1 = f(); - if ($1) { - g(); - } - $2 = h(); - L100: if ($2) { - i(); - } -} -function switchy() { - var yes1 = 0, yes = 0; - var a = 0, b = 0; - while (1) switch (label | 0) { - case 1: - yes1 = 100; - break; - case 2: - yes = 111; - yes = yes*2; - print(yes); - yes = yes + 1; - print(yes/2); - continue; - case 3: - a = 5; - b = a; - break; - } -} -function switchy2($inFormat) { - $inFormat = $inFormat | 0; - var label = 0; - switch ($inFormat | 0) { - case 14: - { - return 5; - break; - } - case 10: - case 11: - case 12: - case 22: - { - label = 4; - break; - } - default: - {} - } - if ((label | 0) == 4) { - return 8; - } - return 1; -} -function tempDouble(a) { - a = +a; - var x = +0, y = +0; - // CastAway can leave things like this as variables no longer needed. We need to identify that x's value has no side effects so it can be completely cleaned up - x = (HEAP32[((tempDoublePtr)>>2)]=((HEAP32[(($_sroa_0_0__idx1)>>2)])|0),HEAP32[(((tempDoublePtr)+(4))>>2)]=((HEAP32[((($_sroa_0_0__idx1)+(4))>>2)])|0),(+(HEAPF64[(tempDoublePtr)>>3]))); - y = a*a; - f(y); -} -function __ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_($this, $manifold, $xfA, $xfB) { - $this = $this | 0; - $manifold = $manifold | 0; - $xfA = $xfA | 0; - $xfB = $xfB | 0; - var $collider_i = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0; - var $8 = 0, $9 = 0, $10 = 0, $11 = 0; - var label = 0; - var __stackBase__ = 0; - __stackBase__ = STACKTOP; - STACKTOP = STACKTOP + 256 | 0; - $collider_i = __stackBase__ | 0; - $1 = $this + 48 | 0; - $2 = HEAP32[$1 >> 2] | 0; - $3 = $2 + 12 | 0; - $4 = HEAP32[$3 >> 2] | 0; - $5 = $4; - $6 = $this + 52 | 0; - $7 = HEAP32[$6 >> 2] | 0; - $8 = $7 + 12 | 0; - $9 = HEAP32[$8 >> 2] | 0; - $10 = $9; - $11 = $collider_i; - __ZN12b2EPCollider7CollideEP10b2ManifoldPK11b2EdgeShapeRK11b2TransformPK14b2PolygonShapeS7_($collider_i, $manifold, $5, $xfA, $10, $xfB); - STACKTOP = __stackBase__; - return; -} -function looop2() { - var i = 0, helper = 0; - while (1) { - do_it(); - helper = (i + 1)|0; - if (condition(helper)) { - break; - } else { - i = helper; - } - } -} -function looop3() { - var i = 0, helper = 0; - while (1) { - do_it(); - helper = (i + 1)|0; - if (condition(helper)) { - i = helper; - } else { - break; - } - } -} -function looop4() { - var i = 0, helper = 0; - while (1) { - do_it(); - helper = (i + 1)|0; - f(i, helper); // i is used, cannot optimize! - if (condition()) { - i = helper; - } else { - break; - } - } -} -function looop4b() { - var i = 0, helper = 0; - while (1) { - do_it(); - helper = (i + 1)|0; - g(helper); - if (condition(i)) { // i is used, cannot optimize! - i = helper; - } else { - break; - } - } -} -function looop5() { - var i = 0, helper = 0; - while (1) { - do_it(); - helper = (i + 1)|0; - if (condition(helper)) { - i = helper; - } else { - break; - } - } - moar(i); // i is still needed, cannot optimize! -} -function looop6() { - var i = 0, helper = 0; - while (1) { - do_it(); - helper = (i + 1)|0; - if (condition(helper)) { - i = helper; - } else { - break; - } - } - moar(helper); // this is cool -} -function looop7() { - var $old_0_i107_i = 0, $current_0_i108_i = 0, $696 = 0; - $old_0_i107_i = $draw_left_i; - while (1) { - $current_0_i108_i = HEAP32[$old_0_i107_i >> 2] | 0; - if (($current_0_i108_i | 0) == 0) { - break; - } - $696 = $current_0_i108_i + 4 | 0; - if (($current_0_i108_i | 0) == ($P_3207_i | 0)) { - break; - } else { - $old_0_i107_i = $696; - } - } - HEAP32[$old_0_i107_i >> 2] = HEAP32[$696 >> 2] | 0; - // empty loop - while (1) { - } -} -function looop8() { - var i = 0, j = 0, a = 0; - while (1) { - do_it(i, j); - a = (i + j)|0; - if (condition(helper)) { - break; - } else { - i = a; // helper used twice! - j = a; - } - } -} -function multiloop($n_0, $35) { - $n_0 = $n_0 | 0; - $35 = $35 | 0; - var $p_0 = 0, $39 = 0, $41 = 0, $46 = 0; - $n_0 = $35; - $p_0 = (HEAP32[$15 >> 2] | 0) + ($35 << 1) | 0; - while (1) { - $39 = $p_0 - 2 | 0; - $41 = HEAPU16[$39 >> 1] | 0; - if ($41 >>> 0 < $2 >>> 0) { - $_off0 = 0; - } else { - $_off0 = $41 - $2 & 65535; - } - HEAP16[$39 >> 1] = $_off0; - $46 = $n_0 - 1 | 0; - if (($46 | 0) == 0) { - break; - } else { - $n_0 = $46; - $p_0 = $39; - } - } -} -function multiloop2($n_0, $35) { - $n_0 = $n_0 | 0; - $35 = $35 | 0; - var $p_0 = 0, $39 = 0, $41 = 0, $46 = 0; - $n_0 = $35; - $p_0 = (HEAP32[$15 >> 2] | 0) + ($35 << 1) | 0; - while (1) { - $39 = $p_0 - 2 | 0; - $41 = HEAPU16[$39 >> 1] | 0; - if ($41 >>> 0 < $2 >>> 0) { - $_off0 = 0; - } else { - $_off0 = $41 - $2 & 65535; - } - HEAP16[$39 >> 1] = $p_0; // cannot optimize one, so none - $46 = $n_0 - 1 | 0; - if (($46 | 0) == 0) { - break; - } else { - $n_0 = $46; - $p_0 = $39; - } - } -} -function tempDouble2($46, $14, $28, $42, $20, $32, $45) { - $46 = $46 | 0; - $14 = $14 | 0; - $28 = $28 | 0; - $42 = $42 | 0; - $20 = $20 | 0; - $32 = $32 | 0; - $45 = $45 | 0; - var $_sroa_06_0_insert_insert$1 = 0; - $46 = (HEAPF32[tempDoublePtr >> 2] = ($14 < $28 ? $14 : $28) - $42, HEAP32[tempDoublePtr >> 2] | 0); - $_sroa_06_0_insert_insert$1 = (HEAPF32[tempDoublePtr >> 2] = ($20 < $32 ? $20 : $32) - $42, HEAP32[tempDoublePtr >> 2] | 0) | 0; - HEAP32[$45 >> 2] = 0 | $46; - HEAP32[$45 + 4 >> 2] = $_sroa_06_0_insert_insert$1; - HEAP32[$45 + 8 >> 2] = $_sroa_06_0_insert_insert$1; -} -function watIf() { - while (1) { - if ($cmp38) {} else { - } - } -} -function select2($foundBase_0_off0) { - $foundBase_0_off0 = $foundBase_0_off0 | 0; - var $call24 = 0, $retval_0 = 0; - $call24 = MUST_RUN() | 0; - $retval_0 = $foundBase_0_off0 ? 0 : $call24; - STACKTOP = sp; - return $retval_0 | 0; -} -function binary(x) { - x = x | 0; - var y = 0, z = 0; - y = f(x); - memset(y) | 0; - z = f(x); - +dmemset(z); -} -function cute($this, $outImage) { - $this = $this | 0; - $outImage = $outImage | 0; - var $retval = 0, $this_addr = 0, $outImage_addr = 0, $width = 0, $height = 0, $bit_depth = 0, $color_type = 0, $data = 0, $bpl = 0, $y = 0, $i = 0, $color_table_size = 0, $y76 = 0, $p = 0, $end = 0, $this1 = 0, $state = 0, $0 = 0, $cmp = 0, $state2 = 0; - var $1 = 0, $cmp3 = 0, $call = 0, $state5 = 0, $row_pointers = 0, $png_ptr = 0, $2 = 0, $call7 = 0, $arraydecay = 0, $call8 = 0, $tobool = 0, $png_ptr10 = 0, $info_ptr = 0, $end_info = 0, $row_pointers11 = 0, $3 = 0, $isnull = 0, $4 = 0, $png_ptr12 = 0, $state13 = 0; - var $5 = 0, $png_ptr15 = 0, $6 = 0, $info_ptr16 = 0, $7 = 0, $gamma = 0, $8 = +0, $9 = 0, $call17 = 0, $png_ptr19 = 0, $info_ptr20 = 0, $end_info21 = 0, $row_pointers22 = 0, $10 = 0, $isnull23 = 0, $11 = 0, $png_ptr26 = 0, $state27 = 0, $png_ptr29 = 0, $12 = 0; - var $info_ptr30 = 0, $13 = 0, $call31 = 0, $14 = 0, $call32 = 0, $15 = 0, $call33 = 0, $16 = 0, $17$0 = 0, $17$1 = 0, $18 = 0, $19 = 0, $20 = 0, $call34 = 0, $21 = 0, $row_pointers35 = 0, $22 = 0, $23 = 0, $cmp36 = 0, $24 = 0; - var $25 = 0, $26 = 0, $mul = 0, $add_ptr = 0, $27 = 0, $row_pointers37 = 0, $28 = 0, $arrayidx = 0, $29 = 0, $inc = 0, $png_ptr38 = 0, $30 = 0, $row_pointers39 = 0, $31 = 0, $32 = 0, $png_ptr40 = 0, $33 = 0, $info_ptr41 = 0, $34 = 0, $call42 = 0; - var $35 = 0, $png_ptr43 = 0, $36 = 0, $info_ptr44 = 0, $37 = 0, $call45 = 0, $state46 = 0, $png_ptr47 = 0, $38 = 0, $end_info48 = 0, $39 = 0, $end_info49 = 0, $40 = 0, $41 = 0, $readTexts = 0, $42 = 0, $call51 = 0, $sub = 0, $cmp52 = 0, $43 = 0; - var $readTexts54 = 0, $44 = 0, $45 = 0, $call55 = 0, $readTexts56 = 0, $46 = 0, $47 = 0, $add = 0, $call57 = 0, $48 = 0, $add59 = 0, $png_ptr61 = 0, $info_ptr62 = 0, $end_info63 = 0, $row_pointers64 = 0, $49 = 0, $isnull65 = 0, $50 = 0, $png_ptr68 = 0, $state69 = 0; - var $51 = 0, $cmp70 = 0, $52 = 0, $call72 = 0, $cmp73 = 0, $53 = 0, $call75 = 0, $54 = 0, $55 = 0, $cmp78 = 0, $56 = 0, $57 = 0, $58 = 0, $mul80 = 0, $add_ptr81 = 0, $59 = 0, $60 = 0, $add_ptr82 = 0, $61 = 0, $62 = 0; - var $cmp83 = 0, $63 = 0, $64 = 0, $conv = 0, $65 = 0, $cmp84 = 0, $66 = 0, $67 = 0, $incdec_ptr = 0, $68 = 0, $inc88 = 0, $69 = 0, label = 0, setjmpLabel = 0, setjmpTable = 0; - var sp = 0; - sp = STACKTOP; - STACKTOP = STACKTOP + 32 | 0; - label = 1; - setjmpLabel = 0; - setjmpTable = STACKTOP; - STACKTOP = STACKTOP + 168 | 0; - HEAP32[setjmpTable >> 2] = 0; - while (1) switch (label | 0) { - case 1: - $width = sp | 0; - $height = sp + 8 | 0; - $bit_depth = sp + 16 | 0; - $color_type = sp + 24 | 0; - $this_addr = $this; - $outImage_addr = $outImage; - $this1 = $this_addr; - $state = $this1 + 32 | 0; - $0 = HEAP32[$state >> 2] | 0; - $cmp = ($0 | 0) == 3; - if ($cmp) { - label = 2; - break; - } else { - label = 3; - break; - } - case 2: - $retval = 0; - label = 37; - break; - case 3: - $state2 = $this1 + 32 | 0; - $1 = HEAP32[$state2 >> 2] | 0; - $cmp3 = ($1 | 0) == 0; - if ($cmp3) { - label = 4; - break; - } else { - label = 6; - break; - } - case 4: - $call = invoke_ii(900, $this1 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - if ($call) { - label = 6; - break; - } else { - label = 5; - break; - } - case 5: - $state5 = $this1 + 32 | 0; - HEAP32[$state5 >> 2] = 3; - $retval = 0; - label = 37; - break; - case 6: - $row_pointers = $this1 + 28 | 0; - HEAP32[$row_pointers >> 2] = 0; - $png_ptr = $this1 + 16 | 0; - $2 = HEAP32[$png_ptr >> 2] | 0; - $call7 = invoke_iiii(30, $2 | 0, 2638 | 0, 156 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $arraydecay = $call7 | 0; - $call8 = _saveSetjmp($arraydecay | 0, label, setjmpTable) | 0; - label = 38; - break; - case 38: - $tobool = ($call8 | 0) != 0; - if ($tobool) { - label = 7; - break; - } else { - label = 10; - break; - } - case 7: - $png_ptr10 = $this1 + 16 | 0; - $info_ptr = $this1 + 20 | 0; - $end_info = $this1 + 24 | 0; - invoke_viii(640, $png_ptr10 | 0, $info_ptr | 0, $end_info | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $row_pointers11 = $this1 + 28 | 0; - $3 = HEAP32[$row_pointers11 >> 2] | 0; - $isnull = ($3 | 0) == 0; - if ($isnull) { - label = 9; - break; - } else { - label = 8; - break; - } - case 8: - $4 = $3; - invoke_vi(926, $4 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - label = 9; - break; - case 9: - $png_ptr12 = $this1 + 16 | 0; - HEAP32[$png_ptr12 >> 2] = 0; - $state13 = $this1 + 32 | 0; - HEAP32[$state13 >> 2] = 3; - $retval = 0; - label = 37; - break; - case 10: - $5 = $outImage_addr; - $png_ptr15 = $this1 + 16 | 0; - $6 = HEAP32[$png_ptr15 >> 2] | 0; - $info_ptr16 = $this1 + 20 | 0; - $7 = HEAP32[$info_ptr16 >> 2] | 0; - $gamma = $this1 | 0; - $8 = +HEAPF32[$gamma >> 2]; - invoke_viiif(2, $5 | 0, $6 | 0, $7 | 0, +$8); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $9 = $outImage_addr; - $call17 = invoke_ii(832, $9 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - if ($call17) { - label = 11; - break; - } else { - label = 14; - break; - } - case 11: - $png_ptr19 = $this1 + 16 | 0; - $info_ptr20 = $this1 + 20 | 0; - $end_info21 = $this1 + 24 | 0; - invoke_viii(640, $png_ptr19 | 0, $info_ptr20 | 0, $end_info21 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $row_pointers22 = $this1 + 28 | 0; - $10 = HEAP32[$row_pointers22 >> 2] | 0; - $isnull23 = ($10 | 0) == 0; - if ($isnull23) { - label = 13; - break; - } else { - label = 12; - break; - } - case 12: - $11 = $10; - invoke_vi(926, $11 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - label = 13; - break; - case 13: - $png_ptr26 = $this1 + 16 | 0; - HEAP32[$png_ptr26 >> 2] = 0; - $state27 = $this1 + 32 | 0; - HEAP32[$state27 >> 2] = 3; - $retval = 0; - label = 37; - break; - case 14: - $png_ptr29 = $this1 + 16 | 0; - $12 = HEAP32[$png_ptr29 >> 2] | 0; - $info_ptr30 = $this1 + 20 | 0; - $13 = HEAP32[$info_ptr30 >> 2] | 0; - $call31 = invoke_iiiiiiiiii(2, $12 | 0, $13 | 0, $width | 0, $height | 0, $bit_depth | 0, $color_type | 0, 0 | 0, 0 | 0, 0 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $14 = $outImage_addr; - $call32 = invoke_ii(850, $14 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $data = $call32; - $15 = $outImage_addr; - $call33 = invoke_ii(284, $15 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $bpl = $call33; - $16 = HEAP32[$height >> 2] | 0; - $17$0 = invoke_iii(860, $16 | 0, 4 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $17$1 = tempRet0; - $18 = $17$1; - $19 = $17$0; - $20 = $18 ? -1 : $19; - $call34 = invoke_ii(550, $20 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $21 = $call34; - $row_pointers35 = $this1 + 28 | 0; - HEAP32[$row_pointers35 >> 2] = $21; - $y = 0; - label = 15; - break; - case 15: - $22 = $y; - $23 = HEAP32[$height >> 2] | 0; - $cmp36 = $22 >>> 0 < $23 >>> 0; - if ($cmp36) { - label = 16; - break; - } else { - label = 18; - break; - } - case 16: - $24 = $data; - $25 = $y; - $26 = $bpl; - $mul = Math_imul($25, $26) | 0; - $add_ptr = $24 + $mul | 0; - $27 = $y; - $row_pointers37 = $this1 + 28 | 0; - $28 = HEAP32[$row_pointers37 >> 2] | 0; - $arrayidx = $28 + ($27 << 2) | 0; - HEAP32[$arrayidx >> 2] = $add_ptr; - label = 17; - break; - case 17: - $29 = $y; - $inc = $29 + 1 | 0; - $y = $inc; - label = 15; - break; - case 18: - $png_ptr38 = $this1 + 16 | 0; - $30 = HEAP32[$png_ptr38 >> 2] | 0; - $row_pointers39 = $this1 + 28 | 0; - $31 = HEAP32[$row_pointers39 >> 2] | 0; - invoke_vii(858, $30 | 0, $31 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $32 = $outImage_addr; - $png_ptr40 = $this1 + 16 | 0; - $33 = HEAP32[$png_ptr40 >> 2] | 0; - $info_ptr41 = $this1 + 20 | 0; - $34 = HEAP32[$info_ptr41 >> 2] | 0; - $call42 = invoke_iii(690, $33 | 0, $34 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - invoke_vii(1890, $32 | 0, $call42 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $35 = $outImage_addr; - $png_ptr43 = $this1 + 16 | 0; - $36 = HEAP32[$png_ptr43 >> 2] | 0; - $info_ptr44 = $this1 + 20 | 0; - $37 = HEAP32[$info_ptr44 >> 2] | 0; - $call45 = invoke_iii(256, $36 | 0, $37 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - invoke_vii(2126, $35 | 0, $call45 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $state46 = $this1 + 32 | 0; - HEAP32[$state46 >> 2] = 2; - $png_ptr47 = $this1 + 16 | 0; - $38 = HEAP32[$png_ptr47 >> 2] | 0; - $end_info48 = $this1 + 24 | 0; - $39 = HEAP32[$end_info48 >> 2] | 0; - invoke_vii(36, $38 | 0, $39 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $end_info49 = $this1 + 24 | 0; - $40 = HEAP32[$end_info49 >> 2] | 0; - invoke_vii(2752, $this1 | 0, $40 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $i = 0; - label = 19; - break; - case 19: - $41 = $i; - $readTexts = $this1 + 12 | 0; - $42 = $readTexts; - $call51 = invoke_ii(618, $42 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $sub = $call51 - 1 | 0; - $cmp52 = ($41 | 0) < ($sub | 0); - if ($cmp52) { - label = 20; - break; - } else { - label = 22; - break; - } - case 20: - $43 = $outImage_addr; - $readTexts54 = $this1 + 12 | 0; - $44 = $readTexts54; - $45 = $i; - $call55 = invoke_iii(502, $44 | 0, $45 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $readTexts56 = $this1 + 12 | 0; - $46 = $readTexts56; - $47 = $i; - $add = $47 + 1 | 0; - $call57 = invoke_iii(502, $46 | 0, $add | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - invoke_viii(550, $43 | 0, $call55 | 0, $call57 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - label = 21; - break; - case 21: - $48 = $i; - $add59 = $48 + 2 | 0; - $i = $add59; - label = 19; - break; - case 22: - $png_ptr61 = $this1 + 16 | 0; - $info_ptr62 = $this1 + 20 | 0; - $end_info63 = $this1 + 24 | 0; - invoke_viii(640, $png_ptr61 | 0, $info_ptr62 | 0, $end_info63 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $row_pointers64 = $this1 + 28 | 0; - $49 = HEAP32[$row_pointers64 >> 2] | 0; - $isnull65 = ($49 | 0) == 0; - if ($isnull65) { - label = 24; - break; - } else { - label = 23; - break; - } - case 23: - $50 = $49; - invoke_vi(926, $50 | 0); - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - label = 24; - break; - case 24: - $png_ptr68 = $this1 + 16 | 0; - HEAP32[$png_ptr68 >> 2] = 0; - $state69 = $this1 + 32 | 0; - HEAP32[$state69 >> 2] = 0; - $51 = HEAP32[$color_type >> 2] | 0; - $cmp70 = ($51 | 0) == 3; - if ($cmp70) { - label = 25; - break; - } else { - label = 36; - break; - } - case 25: - $52 = $outImage_addr; - $call72 = invoke_ii(926, $52 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $cmp73 = ($call72 | 0) == 3; - if ($cmp73) { - label = 26; - break; - } else { - label = 36; - break; - } - case 26: - $53 = $outImage_addr; - $call75 = invoke_ii(860, $53 | 0) | 0; - if ((__THREW__ | 0) != 0 & (threwValue | 0) != 0) { - setjmpLabel = _testSetjmp(HEAP32[__THREW__ >> 2] | 0, setjmpTable) | 0; - if ((setjmpLabel | 0) > 0) { - label = -1; - break; - } else return 0 | 0; - } - __THREW__ = threwValue = 0; - $color_table_size = $call75; - $y76 = 0; - label = 27; - break; - case 27: - $54 = $y76; - $55 = HEAP32[$height >> 2] | 0; - $cmp78 = ($54 | 0) < ($55 | 0); - if ($cmp78) { - label = 28; - break; - } else { - label = 35; - break; - } - case 28: - $56 = $data; - $57 = $y76; - $58 = $bpl; - $mul80 = Math_imul($57, $58) | 0; - $add_ptr81 = $56 + $mul80 | 0; - $p = $add_ptr81; - $59 = $p; - $60 = HEAP32[$width >> 2] | 0; - $add_ptr82 = $59 + $60 | 0; - $end = $add_ptr82; - label = 29; - break; - case 29: - $61 = $p; - $62 = $end; - $cmp83 = $61 >>> 0 < $62 >>> 0; - if ($cmp83) { - label = 30; - break; - } else { - label = 33; - break; - } - case 30: - $63 = $p; - $64 = HEAP8[$63] | 0; - $conv = $64 & 255; - $65 = $color_table_size; - $cmp84 = ($conv | 0) >= ($65 | 0); - if ($cmp84) { - label = 31; - break; - } else { - label = 32; - break; - } - case 31: - $66 = $p; - HEAP8[$66] = 0; - label = 32; - break; - case 32: - $67 = $p; - $incdec_ptr = $67 + 1 | 0; - $p = $incdec_ptr; - label = 29; - break; - case 33: - label = 34; - break; - case 34: - $68 = $y76; - $inc88 = $68 + 1 | 0; - $y76 = $inc88; - label = 27; - break; - case 35: - label = 36; - break; - case 36: - $retval = 1; - label = 37; - break; - case 37: - $69 = $retval; - STACKTOP = sp; - return $69 | 0; - case -1: - if ((setjmpLabel | 0) == 6) { - $call8 = threwValue; - label = 38; - } - __THREW__ = threwValue = 0; - break; - } - return 0; -} -function selfAssign() { - var i1 = 0; - i1 = HEAP32[2] | 0; - HEAP32[2] = i1 + 1; - if (waka) { - return (STACKTOP = STACKTOP, 0); - } - STACKTOP = STACKTOP; - return i1 & 16384 | 0; -} -function elimOneLoopVar($argc, $argv) { - $argc = $argc | 0; - $argv = $argv | 0; - var $0 = 0, $1 = 0, $arg$0 = 0, $arrayidx = 0, $call10 = Math_fround(0), $cmp = 0, $cmp11 = 0, $cmp119 = 0, $cmp12 = 0, $cmp7 = 0, $conv = 0, $conv8 = Math_fround(0), $conv9 = Math_fround(0), $curri$012 = 0, $inc = 0, $inc14$primes$0 = 0, $inc16 = 0, $j$010 = 0, $j$010$phi = 0, $ok$0 = 0; - var $primes$011 = 0, $rem = 0, $retval$0 = 0, $sub = 0, $vararg_buffer1 = 0, label = 0, sp = 0; - $curri$012 = 2; - $primes$011 = 0; - while (1) { - $conv9 = Math_fround($curri$012 | 0); - $call10 = Math_fround(Math_sqrt(Math_fround($conv9))); - $cmp119 = $call10 > Math_fround(+2); - L15 : do { - if ($cmp119) { - $j$010 = 2; - while (1) { - $rem = ($curri$012 | 0) % ($j$010 | 0) & -1; - $cmp12 = ($rem | 0) == 0; - $inc = $j$010 + 1 | 0; - if ($cmp12) { - $ok$0 = 0; - break L15; - } - $conv8 = Math_fround($inc | 0); - $cmp11 = $conv8 < $call10; - if ($cmp11) { - $j$010$phi = $inc; - $j$010 = $j$010$phi; - } else { - $ok$0 = 1; - break; - } - } - } else { - $ok$0 = 1; - } - } while (0); - $inc14$primes$0 = $ok$0 + $primes$011 | 0; - $inc16 = $curri$012 + 1 | 0; - $cmp7 = ($inc14$primes$0 | 0) < ($arg$0 | 0); - if ($cmp7) { - $curri$012 = $inc16; - $primes$011 = $inc14$primes$0; - } else { - break; - } - } - HEAP32[$vararg_buffer1 >> 2] = $curri$012; - return $retval$0 | 0; -} -function elimOneLoopVar2() { - var $storemerge3$neg9 = 0, $18 = 0, $25 = 0, $26 = 0, $30 = 0, $jp = 0; - $storemerge3$neg9 = -1; - while (1) { - $25 = $jp + ($26 << 2) | 0; - HEAP32[$25 >> 2] = ($18 + $storemerge3$neg9 | 0) + (HEAP32[$25 >> 2] | 0) | 0; - $30 = $26 + 1 | 0; - if (($30 | 0) == 63) { - break; - } else { - $storemerge3$neg9 = $26 ^ -1; // $26 is a loopvar, use here is dangerous - $26 = $30; - } - } -} -function elimOneLoopVar3() { - var $storemerge3$neg9 = 0, $18 = 0, $25 = 0, $26 = 0, $30 = 0, $jp = 0; - $storemerge3$neg9 = -1; - while (1) { - $25 = $jp + ($26 << 2) | 0; - HEAP32[$25 >> 2] = ($18 + $storemerge3$neg9 | 0) + (HEAP32[$25 >> 2] | 0) | 0; - $30 = $26 + 1 | 0; - if (($30 | 0) == 63) { - break; - } else { - $storemerge3$neg9 = $30 ^ -1; // $26 is a helper, use here is dangerous - $26 = $30; - } - } -} -function elimOneLoopVar4() { - var $storemerge3$neg9 = 0, $18 = 0, $25 = 0, $26 = 0, $30 = 0, $jp = 0; - $storemerge3$neg9 = -1; - while (1) { - $25 = $jp + ($26 << 2) | 0; - HEAP32[$25 >> 2] = ($18 + $storemerge3$neg9 | 0) + (HEAP32[$25 >> 2] | 0) | 0; - $30 = $26 + 1 | 0; - if (($30 | 0) == 63) { - break; - } else { - $storemerge3$neg9 = $18 ^ -1; - $26 = $30; - } - } -} -function elimOneLoopVarStillUsed() { - var $0 = 0, $1 = 0, $arg$0 = 0, $arrayidx = 0, $call10 = Math_fround(0), $cmp = 0, $cmp11 = 0, $cmp119 = 0, $cmp12 = 0, $cmp7 = 0, $conv = 0, $conv8 = Math_fround(0), $conv9 = Math_fround(0), $curri$012 = 0, $inc = 0, $inc14$primes$0 = 0, $inc16 = 0, $j$010 = 0, $ok$0 = 0; - var $primes$011 = 0, $rem = 0, $retval$0 = 0, $sub = 0, $vararg_buffer1 = 0, label = 0, sp = 0; - while (1) { - $rem = ($curri$012 | 0) % ($j$010 | 0) & -1; - $cmp12 = ($rem | 0) == 0; - $inc = $j$010 + 1 | 0; - if ($cmp12) { - $ok$0 = 0; - break; - } - $conv8 = Math_fround($inc | 0); - $cmp11 = $conv8 < $call10; - if ($cmp11) { - $j$010 = $inc; - } else { - break; - } - } - return $retval$0 | 0; -} -function elimOneLoopVarStillUsedSE() { - var $0 = 0, $1 = 0, $arg$0 = 0, $arrayidx = 0, $call10 = Math_fround(0), $cmp = 0, $cmp11 = 0, $cmp119 = 0, $cmp12 = 0, $cmp7 = 0, $conv = 0, $conv8 = Math_fround(0), $conv9 = Math_fround(0), $curri$012 = 0, $inc = 0, $inc14$primes$0 = 0, $inc16 = 0, $j$010 = 0, $ok$0 = 0; - var $primes$011 = 0, $rem = 0, $retval$0 = 0, $sub = 0, $vararg_buffer1 = 0, label = 0, sp = 0; - while (1) { - $rem = ($curri$012 | 0) % ($j$010 | 0) & -1; - $cmp12 = ($rem | 0) == 0; - $inc = $j$010 + sideeffect() | 0; // side effect! - if ($cmp12) { - $ok$0 = 0; - break; - } - $conv8 = Math_fround($inc | 0); - $cmp11 = $conv8 < $call10; - if ($cmp11) { - $j$010 = $inc; - } else { - break; - } - } - return $retval$0 | 0; -} -function elimOneLoopVar5() { - var $storemerge3$neg9 = 0, $18 = 0, $25 = 0, $26 = 0, $30 = 0, $jp = 0; - $storemerge3$neg9 = -1; - while (1) { - $25 = $jp + ($26 << 2) | 0; - HEAP32[$25 >> 2] = ($18 + $storemerge3$neg9 | 0) + (HEAP32[$25 >> 2] | 0) | 0; - $30 = $26 + 1 | 0; - if (($30 | 0) == 63) { - f($30); // loop var used here, so cannot be easily optimized - break; - } else { - $storemerge3$neg9 = $18 ^ -1; - $26 = $30; - } - } -} -function loopVarWithContinue() { - var i = 0, inc = 0; - i = 0; - while (1) { - inc = i + 1; - if (check()) { - i = i + 1; - continue; - } - work(inc); - work(i); - work(inc); - if (check()) { - break; - } else { - i = inc; - } - } -} -function helperExtraUse() { - var i = 0, inc = 0; - i = 0; - while (1) { - inc = i + 1; - work(i); - work(inc); - if (check()) { - break; - } else { - i = inc; - } - } - return inc; -} -function mixed_up_loop_helpers() { - var $cmp = 0, $cmp13 = 0, $cmp15 = 0, $cmp2 = 0, $cmp7 = 0, $div = +0, $div11 = +0, $inc = 0, $iterations$0 = 0, $iterations$0$ph = 0, $or$cond = 0, $p$sroa$0$0$ph = +0, $p$sroa$1$0$ph = +0, $p$sroa$1$0$ph$phi = +0, $rem = 0, $sub = +0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; - sp = STACKTOP; - STACKTOP = STACKTOP + 16 | 0; - $vararg_buffer = sp; - $iterations$0$ph = 0; - $p$sroa$0$0$ph = +0; - $p$sroa$1$0$ph = +1; - L1 : while (1) { - $iterations$0 = $iterations$0$ph; - while (1) { - $inc = $iterations$0 + 1 | 0; - $cmp = ($inc | 0) < 10; - if (!$cmp) { - label = 8; - break L1; - } - HEAPF64[tempDoublePtr >> 3] = $p$sroa$0$0$ph; - HEAP32[$vararg_buffer >> 2] = HEAP32[tempDoublePtr >> 2]; - HEAP32[$vararg_buffer + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2]; - $vararg_ptr1 = $vararg_buffer + 8 | 0; - HEAPF64[tempDoublePtr >> 3] = $p$sroa$1$0$ph; - HEAP32[$vararg_ptr1 >> 2] = HEAP32[tempDoublePtr >> 2]; - HEAP32[$vararg_ptr1 + 4 >> 2] = HEAP32[tempDoublePtr + 4 >> 2]; - _printf(8 | 0, $vararg_buffer | 0) | 0; - $cmp2 = ($iterations$0 | 0) > 0; - if ($cmp2) { - break; - } else { - $iterations$0 = $inc; - } - } - $sub = -$p$sroa$1$0$ph; - $rem = ($inc | 0) % 3 & -1; - $cmp7 = ($rem | 0) == 0; - if (!$cmp7) { - $p$sroa$1$0$ph$phi = $p$sroa$0$0$ph; - $iterations$0$ph = $inc; - $p$sroa$0$0$ph = $sub; - $p$sroa$1$0$ph = $p$sroa$1$0$ph$phi; - continue; - } - $div = $p$sroa$1$0$ph * +-.5; - $div11 = $p$sroa$0$0$ph * +.5; - $cmp13 = $div == +0; - $cmp15 = $div11 == +0; - $or$cond = $cmp13 & $cmp15; - if ($or$cond) { - break; - } else { - $iterations$0$ph = $inc; - $p$sroa$0$0$ph = $div; - $p$sroa$1$0$ph = $div11; - } - } -} -function _postProcess() { - var $w = 0, $z = 0; - $w = Math_abs($global); - $z = $w; - cheez(); -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "__Z11printResultPiS_j", "_segment_holding", "__ZN5identC2EiPKcPci", "_vec2Length", "exc", "label", "confuusion", "tempDouble", "_org_apache_harmony_luni_util_NumberConverter_freeFormat__", "__ZN23b2EdgeAndPolygonContact8EvaluateEP10b2ManifoldRK11b2TransformS4_", "_java_nio_charset_Charset_forNameInternal___java_lang_String", "looop2", "looop3", "looop4", "looop5", "looop6", "looop7", "looop8", "multiloop", "multiloop2", "tempDouble2", "watIf", "select2", "binary", "cute", "selfAssign", "elimOneLoopVar", "elimOneLoopVar2", "elimOneLoopVar3", "elimOneLoopVar4", "elimOneLoopVarStillUsed", "elimOneLoopVarStillUsedSE", "elimOneLoopVar5", "helperExtraUse", "mixed_up_loop_helpers", "_postProcess"] - diff --git a/tests/optimizer/asmLastOpts-output.js b/tests/optimizer/asmLastOpts-output.js deleted file mode 100644 index 8b4af60358b68..0000000000000 --- a/tests/optimizer/asmLastOpts-output.js +++ /dev/null @@ -1,68 +0,0 @@ -function test() { - if (HEAP32[i5 >> 2] | 0) { - if ((_fread(i4 | 0, 1, 257, HEAP32[i5 >> 2] | 0) | 0) != 257) i31 = 9; else if ((HEAPU8[i4 >> 0] | 0 | 0) != (HEAP32[84328] | 0)) i31 = 9; else if (_memcmp(i4 + 1 | 0, HEAP32[i20 >> 2] | 0, 256) | 0) i31 = 9; else if ((_fread(HEAP32[i16 >> 2] | 0, 256, 256, HEAP32[i5 >> 2] | 0) | 0) != 256) i31 = 9; - } else i31 = 9; - barrier(); - if (HEAP32[i5 >> 2] | 0) { - if ((_fread(i4 | 0, 1, 257, HEAP32[i5 >> 2] | 0) | 0) != 257) if ((HEAPU8[i4 >> 0] | 0 | 0) != (HEAP32[84328] | 0)) if (_memcmp(i4 + 1 | 0, HEAP32[i20 >> 2] | 0, 256) | 0) if ((_fread(HEAP32[i16 >> 2] | 0, 256, 256, HEAP32[i5 >> 2] | 0) | 0) != 256) i31 = 9; - } else i31 = 9; - moar(); - if ((c[21902] | 0) != 0 & (Vb | 0) == 29) { - if ((Ib | 0) == 60) if (!(cq(39080, 448, c[F >> 2] | 0, c[M >> 2] | 0, 0, 0) | 0)) x = 373; else { - Mb = 52; - Nb = 0; - Ob = 0; - return; - } - } else x = 373; - yet(); - if (a) if (b) { - if (c) d(); - } else e(); else f(); -} -function moar() { - L : do print(5); while (0); - L : { - print(5); - print(5); - } - L : do print(5); while (x | 0); - L : do { - print(5); - print(5); - } while (x | 0); - later(); - L : { - print(5); - break L; - print(5); - } - L : do { - print(5); - continue L; - print(5); - } while (0); - moar(); - L : do { - print(5); - break; - print(5); - } while (0); - L : { - print(5); - while (1) break; - print(5); - } - moar2(); - L : do { - print(5); - continue; - print(5); - } while (0); - L : { - print(5); - while (1) continue; - print(5); - } -} - diff --git a/tests/optimizer/asmLastOpts.js b/tests/optimizer/asmLastOpts.js deleted file mode 100644 index b565ffc9aa8b4..0000000000000 --- a/tests/optimizer/asmLastOpts.js +++ /dev/null @@ -1,115 +0,0 @@ -function test() { - if ((HEAP32[i5 >> 2] | 0) != 0) { - if ((_fread(i4 | 0, 1, 257, HEAP32[i5 >> 2] | 0) | 0) != 257) { - i31 = 9; - } else { - if ((HEAPU8[i4 >> 0] | 0 | 0) != (HEAP32[84328] | 0)) { - i31 = 9; - } else { - if ((_memcmp(i4 + 1 | 0, HEAP32[i20 >> 2] | 0, 256) | 0) != 0) { - i31 = 9; - } else { - if ((_fread(HEAP32[i16 >> 2] | 0, 256, 256, HEAP32[i5 >> 2] | 0) | 0) != 256) { - i31 = 9; - } - } - } - } - } else { - i31 = 9; - } - barrier(); - if ((HEAP32[i5 >> 2] | 0) != 0) { - if ((_fread(i4 | 0, 1, 257, HEAP32[i5 >> 2] | 0) | 0) != 257) { - if ((HEAPU8[i4 >> 0] | 0 | 0) != (HEAP32[84328] | 0)) { - if ((_memcmp(i4 + 1 | 0, HEAP32[i20 >> 2] | 0, 256) | 0) != 0) { - if ((_fread(HEAP32[i16 >> 2] | 0, 256, 256, HEAP32[i5 >> 2] | 0) | 0) != 256) { - i31 = 9; - } - } - } - } - } else { - i31 = 9; - } - moar(); - if ((c[21902] | 0) != 0 & (Vb | 0) == 29) { - if ((Ib | 0) == 60) { - if (!(cq(39080, 448, c[F >> 2] | 0, c[M >> 2] | 0, 0, 0) | 0)) { - x = 373; - } else { - Mb = 52; - Nb = 0; - Ob = 0; - return; - } - } - } else x = 373; - yet(); - if (a) { - if (b) { - if (c) { - d(); - } - } else { - e(); - } - } else { - f(); - } -} -function moar() { - L: do { - print(5); - } while(0); - L: do { - print(5); - print(5); - } while(0); - L: do { - print(5); - } while(x | 0); - L: do { - print(5); - print(5); - } while(x | 0); - later(); - L: do { - print(5); - break L; - print(5); - } while(0); - L: do { - print(5); - continue L; - print(5); - } while(0); - moar(); - L: do { - print(5); - break; - print(5); - } while(0); - L: do { - print(5); - while (1) { - break; - } - print(5); - } while(0); - moar2(); - L: do { - print(5); - continue; - print(5); - } while(0); - L: do { - print(5); - while (1) { - continue; - } - print(5); - } while(0); -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["test", "moar"] - diff --git a/tests/optimizer/eliminator-test-output.js b/tests/optimizer/eliminator-test-output.js deleted file mode 100644 index 1b5f6976b0e97..0000000000000 --- a/tests/optimizer/eliminator-test-output.js +++ /dev/null @@ -1,6133 +0,0 @@ -function a($directory) { - chak($directory + _strlen($directory) | 0); - var $210 = HEAP32[100]; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $210; - chak(); - var $210a = HEAP32[100]; - something(); - HEAP32[90] = $210a; - chak(); - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $hack; - chak(); - var $b = HEAP32[11] + 7 | 0; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $b; - chak(); - var $bb2 = HEAP32[11]; - HEAP32[111] = 321; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $bb2 + 7 | 0; - chak(); - HEAP32[1e3] = HEAP32[100]; - chak(); - HEAP32[1e3] = func(); - chak(); - tor(func()); - chak(); - tor(HEAP[9]); - barrier(); - var $$210, $$210a, $$b, $$bb2; - $$210 = HEAP32[100]; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$210; - chak(); - $$210a = HEAP32[100]; - something(); - HEAP32[90] = $$210a; - chak(); - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$hack; - chak(); - $$b = HEAP32[11] + 7 | 0; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$b; - chak(); - $$bb2 = HEAP32[11]; - HEAP32[111] = 321; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$bb2 + 7 | 0; - chak(); - HEAP32[1e3] = HEAP32[100]; - chak(); - HEAP32[1e3] = func(); - chak(); - tor(func()); - chak(); - tor(HEAP[9]); - barrier(); - var $65, $image, $51$s2; - HEAP32[$65 >> 2] = _int_ceildivpow2(HEAP32[$65 >> 2] - _int_ceildiv(HEAP32[$image >> 2], HEAP32[$51$s2]) | 0, HEAP32[$51$s2 + 10]); - barr(); - var ONCE = sheep(); - while (ONCE) { - work(); - } - var ONCEb = 75; - while (ONCEb) { - work(); - } - var $26 = __ZL3minIiET_S0_S0_12(4096, 4096 - $16 | 0); - print(FUNCTION_TABLE[$22]($18, $16 + ($this + 27) | 0, $26)); - chak(); - do { - print(10); - } while (0); - var zzz1 = 10; - do { - print(zzz1); - } while (1); -} -function b() { - var $148 = _sqlite3Strlen30($147); - var $150 = HEAP32[$pExpr + 16 >> 2]; - if (($150 | 0) == 0) { - var $156 = 0; - } else { - var $156 = HEAP32[$150 >> 2]; - } - var $156; - HEAP32[$139 + ($136 << 4) + 4 >> 2] = _sqlite3FindFunction($145, $147, $148, $156, $135, 0); - farr(); - f3(f1() + f2()); - farr(); - return cheez(); -} -function c() { - var x = MEM[100], y = callMe(5); - zoom(glob); - hail(x * 2); - sunk(y); - barrier(); - var y2 = $callMe2; - var w2 = MEM[100] * 2; - zoom(glob); - hail(w2); - sunk(y2); - you(fools); - var two = three(); - fools(you); - var noneed2; - noneed2 += fools(you2); - return; -} -function f() { - HEAP[123] = (GLOB[1] + 1) / 2; -} -function g(a1, a2) { - var a = 1; - var c = a * 2 - 1; - a = c; - foo(c); - foo(2); - for (var i = 0; i < 5; i++) {} - for (var iterator in SOME_GLOBAL) { - quux(iterator); - } - var $0 = HEAP[5]; - MAYBE_HEAP[myglobal] = 123; - if ($0 < 0) { - __label__ = 1; - } else { - __label__ = 2; - } - new asd; - sadijn2 = "qwe%sert"; - this.Module || (this.Module = {}); - var obj = { - "quoted": 1, - "doublequoted": 2, - unquoted: 3, - 4: 5 - }; - obj(); -} -function h() { - var out; - bar(hello); - var hello = 5; - if (0) { - var sb1 = 21; - } - out = sb1; - if (0) { - var sb2 = 23; - } else { - out = sb2; - } - if (0) { - out = sb3; - } else { - var sb3 = 23; - } - for (var it = 0; it < 5; it++) { - x = y ? x + 1 : 7; - var x = -5; - } - if (1) { - otherGlob = glob; - breakMe(); - } - var oneUse2 = glob2; - while (1) { - otherGlob2 = oneUse2; - breakMe(); - } - return out; -} -function strtok_part(b, j, f) { - var a; - for (;;) { - h = a == 13 ? h : 0; - a = HEAP[d + h]; - if (a == g != 0) break; - var h = h + 1; - if (a != 0) a = 13; - } -} -function py() { - HEAP[HEAP[HEAP[__PyThreadState_Current] + 12] + 1 + 12] = 99; -} -var anon = (function(x) { - var $4 = HEAP[__PyThreadState_Current]; - var $5 = $4 + 12; - var $7 = HEAP[$5] + 1; - var $8 = $4 + 12; - HEAP[$8] = $7; -}); -function r($0) { - HEAP[$0 + 7] = 107; -} -function t() { - if ($10 < $11) { - __label__ = 3; - } - if (!($12 < $13)) { - __label__ = 4; - } -} -function f2() { - var $_pre = HEAPU32[($vla + ($storemerge312 << 2) | 0) >> 2]; - var $storemerge312 = $storemerge312 + 1 | 0; - c($_pre); -} -function f3($s, $tree, $k) { - var $0 = HEAPU32[($s + 2908 + ($k << 2) | 0) >> 2]; - while (1) { - HEAP32[($s + 2908 + ($storemerge_in << 2) | 0) >> 2] = $9; - } - HEAP32[($s + 2908 + ($storemerge_in << 2) | 0) >> 2] = $0; -} -function llvm3_1() { - while (check()) { - if ($curri_01 % $zj_0 == 0) { - break; - } - run(($aj_0 + 1) / 2); - } -} -function _inflate($strm, $flush) { - var __stackBase__ = STACKTOP; - STACKTOP += 4; - var __label__; - var $hbuf = __stackBase__; - $_$2 : do { - if (($strm | 0) == 0) { - var $retval_0 = -2; - } else { - var $0 = HEAPU32[($strm + 28 | 0) >> 2]; - if (($0 | 0) == 0) { - var $retval_0 = -2; - break; - } - var $next_out = $strm + 12 | 0; - var $1 = HEAP32[$next_out >> 2]; - if (($1 | 0) == 0) { - var $retval_0 = -2; - break; - } - var $next_in = $strm | 0; - var $2 = HEAP32[$next_in >> 2]; - if (($2 | 0) == 0) { - if (!((HEAP32[($strm + 4 | 0) >> 2] | 0) == 0)) { - var $retval_0 = -2; - break; - } - } - var $4 = $0; - var $mode = $0 | 0; - var $5 = HEAP32[$mode >> 2]; - if (($5 | 0) == 11) { - HEAP32[$mode >> 2] = 12; - var $8 = HEAP32[$next_out >> 2]; - var $7 = HEAP32[$next_in >> 2]; - var $6 = 12; - } else { - var $8 = $1; - var $7 = $2; - var $6 = $5; - } - var $6; - var $7; - var $8; - var $avail_out = $strm + 16 | 0; - var $9 = HEAP32[$avail_out >> 2]; - var $avail_in15 = $strm + 4 | 0; - var $10 = HEAPU32[$avail_in15 >> 2]; - var $11 = $0 + 56 | 0; - var $13 = $0 + 60 | 0; - var $15 = $0 + 8 | 0; - var $16 = $0 + 24 | 0; - var $arrayidx = $hbuf | 0; - var $arrayidx40 = $hbuf + 1 | 0; - var $17 = $0 + 16 | 0; - var $18 = $0 + 32 | 0; - var $msg = $strm + 24 | 0; - var $19 = $0 + 36 | 0; - var $20 = $0 + 20 | 0; - var $adler = $strm + 48 | 0; - var $21 = $0 + 64 | 0; - var $22 = $0 + 12 | 0; - var $23 = ($flush - 5 | 0) >>> 0 < 2; - var $24 = $0 + 4 | 0; - var $cmp660 = ($flush | 0) == 6; - var $25 = $0 + 7108 | 0; - var $26 = $0 + 84 | 0; - var $27 = $0 + 76 | 0; - var $28 = $0 + 72 | 0; - var $29 = $0 + 7112 | 0; - var $30 = $0 + 68 | 0; - var $31 = $0 + 44 | 0; - var $32 = $0 + 7104 | 0; - var $33 = $0 + 48 | 0; - var $34 = $0 + 52 | 0; - var $35 = $0 + 40 | 0; - var $total_out = $strm + 20 | 0; - var $36 = $0 + 28 | 0; - var $arrayidx199 = $hbuf + 2 | 0; - var $arrayidx202 = $hbuf + 3 | 0; - var $37 = $0 + 96 | 0; - var $38 = $0 + 100 | 0; - var $39 = $0 + 92 | 0; - var $40 = $0 + 104 | 0; - var $lens = $0 + 112 | 0; - var $41 = $lens; - var $next861 = $0 + 108 | 0; - var $42 = $next861; - var $43 = $next861 | 0; - var $arraydecay860_c = $0 + 1328 | 0; - var $44 = $0 + 76 | 0; - var $arraydecay864 = $lens; - var $arraydecay867 = $0 + 752 | 0; - var $45 = $0 + 624 | 0; - var $46 = $0 + 80 | 0; - var $47 = $0 + 88 | 0; - var $48 = $0 + 80 | 0; - var $ret_0 = 0; - var $next_0 = $7; - var $put_0 = $8; - var $have_0 = $10; - var $left_0 = $9; - var $hold_0 = HEAP32[$11 >> 2]; - var $bits_0 = HEAP32[$13 >> 2]; - var $out_0 = $9; - var $49 = $6; - $_$12 : while (1) { - var $49; - var $out_0; - var $bits_0; - var $hold_0; - var $left_0; - var $have_0; - var $put_0; - var $next_0; - var $ret_0; - $_$14 : do { - if (($49 | 0) == 0) { - var $50 = HEAPU32[$15 >> 2]; - if (($50 | 0) == 0) { - HEAP32[$mode >> 2] = 12; - var $ret_0_be = $ret_0; - var $next_0_be = $next_0; - var $put_0_be = $put_0; - var $have_0_be = $have_0; - var $left_0_be = $left_0; - var $hold_0_be = $hold_0; - var $bits_0_be = $bits_0; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $next_1 = $next_0; - var $have_1 = $have_0; - var $hold_1 = $hold_0; - var $bits_1 = $bits_0; - while (1) { - var $bits_1; - var $hold_1; - var $have_1; - var $next_1; - if (!($bits_1 >>> 0 < 16)) { - break; - } - if (($have_1 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_1; - var $have_58 = 0; - var $hold_54 = $hold_1; - var $bits_54 = $bits_1; - var $out_4 = $out_0; - break $_$12; - } - var $add = ((HEAPU8[$next_1] & 255) << $bits_1) + $hold_1 | 0; - var $next_1 = $next_1 + 1 | 0; - var $have_1 = $have_1 - 1 | 0; - var $hold_1 = $add; - var $bits_1 = $bits_1 + 8 | 0; - } - if (($50 & 2 | 0) != 0 & ($hold_1 | 0) == 35615) { - HEAP32[$16 >> 2] = _crc32(0, 0, 0); - HEAP8[$arrayidx] = 31; - HEAP8[$arrayidx40] = -117; - HEAP32[$16 >> 2] = _crc32(HEAP32[$16 >> 2], $arrayidx, 2); - HEAP32[$mode >> 2] = 1; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = 0; - var $bits_0_be = 0; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$17 >> 2] = 0; - var $53 = HEAP32[$18 >> 2]; - if (($53 | 0) == 0) { - var $54 = $50; - } else { - HEAP32[($53 + 48 | 0) >> 2] = -1; - var $54 = HEAP32[$15 >> 2]; - } - var $54; - do { - if (!(($54 & 1 | 0) == 0)) { - if (!((((($hold_1 << 8 & 65280) + ($hold_1 >>> 8) | 0) >>> 0) % 31 | 0) == 0)) { - break; - } - if (($hold_1 & 15 | 0) == 8) { - var $shr74 = $hold_1 >>> 4; - var $sub = $bits_1 - 4 | 0; - var $add77 = ($shr74 & 15) + 8 | 0; - var $55 = HEAPU32[$19 >> 2]; - do { - if (!(($55 | 0) == 0)) { - if (!($add77 >>> 0 > $55 >>> 0)) { - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str3100 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = $shr74; - var $bits_0_be = $sub; - var $out_0_be = $out_0; - __label__ = 268; - break $_$14; - } - HEAP32[$19 >> 2] = $add77; - } while (0); - HEAP32[$20 >> 2] = 1 << $add77; - var $call91 = _adler32(0, 0, 0); - HEAP32[$16 >> 2] = $call91; - HEAP32[$adler >> 2] = $call91; - HEAP32[$mode >> 2] = $hold_1 >>> 12 & 2 ^ 11; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = 0; - var $bits_0_be = 0; - var $out_0_be = $out_0; - __label__ = 268; - break $_$14; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str299 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = $hold_1; - var $bits_0_be = $bits_1; - var $out_0_be = $out_0; - __label__ = 268; - break $_$14; - } - } while (0); - HEAP32[$msg >> 2] = STRING_TABLE.__str198 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = $hold_1; - var $bits_0_be = $bits_1; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (($49 | 0) == 1) { - var $next_2 = $next_0; - var $have_2 = $have_0; - var $hold_2 = $hold_0; - var $bits_2 = $bits_0; - while (1) { - var $bits_2; - var $hold_2; - var $have_2; - var $next_2; - if (!($bits_2 >>> 0 < 16)) { - break; - } - if (($have_2 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_2; - var $have_58 = 0; - var $hold_54 = $hold_2; - var $bits_54 = $bits_2; - var $out_4 = $out_0; - break $_$12; - } - var $add113 = ((HEAPU8[$next_2] & 255) << $bits_2) + $hold_2 | 0; - var $next_2 = $next_2 + 1 | 0; - var $have_2 = $have_2 - 1 | 0; - var $hold_2 = $add113; - var $bits_2 = $bits_2 + 8 | 0; - } - HEAP32[$17 >> 2] = $hold_2; - if (!(($hold_2 & 255 | 0) == 8)) { - HEAP32[$msg >> 2] = STRING_TABLE.__str299 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_2; - var $put_0_be = $put_0; - var $have_0_be = $have_2; - var $left_0_be = $left_0; - var $hold_0_be = $hold_2; - var $bits_0_be = $bits_2; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - if (($hold_2 & 57344 | 0) == 0) { - var $59 = HEAPU32[$18 >> 2]; - if (($59 | 0) == 0) { - var $60 = $hold_2; - } else { - HEAP32[($59 | 0) >> 2] = $hold_2 >>> 8 & 1; - var $60 = HEAP32[$17 >> 2]; - } - var $60; - if (!(($60 & 512 | 0) == 0)) { - HEAP8[$arrayidx] = $hold_2 & 255; - HEAP8[$arrayidx40] = $hold_2 >>> 8 & 255; - HEAP32[$16 >> 2] = _crc32(HEAP32[$16 >> 2], $arrayidx, 2); - } - HEAP32[$mode >> 2] = 2; - var $next_3 = $next_2; - var $have_3 = $have_2; - var $hold_3 = 0; - var $bits_3 = 0; - __label__ = 44; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str4101 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_2; - var $put_0_be = $put_0; - var $have_0_be = $have_2; - var $left_0_be = $left_0; - var $hold_0_be = $hold_2; - var $bits_0_be = $bits_2; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (($49 | 0) == 2) { - var $next_3 = $next_0; - var $have_3 = $have_0; - var $hold_3 = $hold_0; - var $bits_3 = $bits_0; - __label__ = 44; - } else if (($49 | 0) == 3) { - var $next_4 = $next_0; - var $have_4 = $have_0; - var $hold_4 = $hold_0; - var $bits_4 = $bits_0; - __label__ = 52; - } else if (($49 | 0) == 4) { - var $next_5 = $next_0; - var $have_5 = $have_0; - var $hold_5 = $hold_0; - var $bits_5 = $bits_0; - __label__ = 60; - } else if (($49 | 0) == 5) { - var $next_8 = $next_0; - var $have_8 = $have_0; - var $hold_8 = $hold_0; - var $bits_8 = $bits_0; - __label__ = 71; - } else if (($49 | 0) == 6) { - var $next_11 = $next_0; - var $have_11 = $have_0; - var $hold_9 = $hold_0; - var $bits_9 = $bits_0; - var $89 = HEAP32[$17 >> 2]; - __label__ = 81; - break; - } else if (($49 | 0) == 7) { - var $next_13 = $next_0; - var $have_13 = $have_0; - var $hold_10 = $hold_0; - var $bits_10 = $bits_0; - __label__ = 94; - } else if (($49 | 0) == 8) { - var $next_15 = $next_0; - var $have_15 = $have_0; - var $hold_11 = $hold_0; - var $bits_11 = $bits_0; - __label__ = 107; - } else if (($49 | 0) == 9) { - var $next_18 = $next_0; - var $have_18 = $have_0; - var $hold_14 = $hold_0; - var $bits_14 = $bits_0; - while (1) { - var $bits_14; - var $hold_14; - var $have_18; - var $next_18; - if (!($bits_14 >>> 0 < 32)) { - break; - } - if (($have_18 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_18; - var $have_58 = 0; - var $hold_54 = $hold_14; - var $bits_54 = $bits_14; - var $out_4 = $out_0; - break $_$12; - } - var $add564 = ((HEAPU8[$next_18] & 255) << $bits_14) + $hold_14 | 0; - var $next_18 = $next_18 + 1 | 0; - var $have_18 = $have_18 - 1 | 0; - var $hold_14 = $add564; - var $bits_14 = $bits_14 + 8 | 0; - } - var $add581 = _llvm_bswap_i32($hold_14); - HEAP32[$16 >> 2] = $add581; - HEAP32[$adler >> 2] = $add581; - HEAP32[$mode >> 2] = 10; - var $next_19 = $next_18; - var $have_19 = $have_18; - var $hold_15 = 0; - var $bits_15 = 0; - __label__ = 120; - break; - } else if (($49 | 0) == 10) { - var $next_19 = $next_0; - var $have_19 = $have_0; - var $hold_15 = $hold_0; - var $bits_15 = $bits_0; - __label__ = 120; - } else if (($49 | 0) == 11) { - var $next_20 = $next_0; - var $have_20 = $have_0; - var $hold_16 = $hold_0; - var $bits_16 = $bits_0; - __label__ = 123; - } else if (($49 | 0) == 12) { - var $next_21 = $next_0; - var $have_21 = $have_0; - var $hold_17 = $hold_0; - var $bits_17 = $bits_0; - __label__ = 124; - } else if (($49 | 0) == 13) { - var $and681 = $bits_0 & 7; - var $next_23 = $next_0; - var $have_23 = $have_0; - var $hold_19 = $hold_0 >>> ($and681 >>> 0); - var $bits_19 = $bits_0 - $and681 | 0; - while (1) { - var $bits_19; - var $hold_19; - var $have_23; - var $next_23; - if (!($bits_19 >>> 0 < 32)) { - break; - } - if (($have_23 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_23; - var $have_58 = 0; - var $hold_54 = $hold_19; - var $bits_54 = $bits_19; - var $out_4 = $out_0; - break $_$12; - } - var $add701 = ((HEAPU8[$next_23] & 255) << $bits_19) + $hold_19 | 0; - var $next_23 = $next_23 + 1 | 0; - var $have_23 = $have_23 - 1 | 0; - var $hold_19 = $add701; - var $bits_19 = $bits_19 + 8 | 0; - } - var $and708 = $hold_19 & 65535; - if (!(($and708 | 0) == ($hold_19 >>> 16 ^ 65535 | 0))) { - HEAP32[$msg >> 2] = STRING_TABLE.__str7104 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_23; - var $put_0_be = $put_0; - var $have_0_be = $have_23; - var $left_0_be = $left_0; - var $hold_0_be = $hold_19; - var $bits_0_be = $bits_19; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$21 >> 2] = $and708; - HEAP32[$mode >> 2] = 14; - if ($cmp660) { - var $ret_8 = $ret_0; - var $next_58 = $next_23; - var $have_58 = $have_23; - var $hold_54 = 0; - var $bits_54 = 0; - var $out_4 = $out_0; - break $_$12; - } - var $next_24 = $next_23; - var $have_24 = $have_23; - var $hold_20 = 0; - var $bits_20 = 0; - __label__ = 143; - break; - } else if (($49 | 0) == 14) { - var $next_24 = $next_0; - var $have_24 = $have_0; - var $hold_20 = $hold_0; - var $bits_20 = $bits_0; - __label__ = 143; - } else if (($49 | 0) == 15) { - var $next_25 = $next_0; - var $have_25 = $have_0; - var $hold_21 = $hold_0; - var $bits_21 = $bits_0; - __label__ = 144; - } else if (($49 | 0) == 16) { - var $next_26 = $next_0; - var $have_26 = $have_0; - var $hold_22 = $hold_0; - var $bits_22 = $bits_0; - while (1) { - var $bits_22; - var $hold_22; - var $have_26; - var $next_26; - if (!($bits_22 >>> 0 < 14)) { - break; - } - if (($have_26 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_26; - var $have_58 = 0; - var $hold_54 = $hold_22; - var $bits_54 = $bits_22; - var $out_4 = $out_0; - break $_$12; - } - var $add767 = ((HEAPU8[$next_26] & 255) << $bits_22) + $hold_22 | 0; - var $next_26 = $next_26 + 1 | 0; - var $have_26 = $have_26 - 1 | 0; - var $hold_22 = $add767; - var $bits_22 = $bits_22 + 8 | 0; - } - var $add775 = ($hold_22 & 31) + 257 | 0; - HEAP32[$37 >> 2] = $add775; - var $add782 = ($hold_22 >>> 5 & 31) + 1 | 0; - HEAP32[$38 >> 2] = $add782; - HEAP32[$39 >> 2] = ($hold_22 >>> 10 & 15) + 4 | 0; - var $shr791 = $hold_22 >>> 14; - var $sub792 = $bits_22 - 14 | 0; - if ($add775 >>> 0 > 286 | $add782 >>> 0 > 30) { - HEAP32[$msg >> 2] = STRING_TABLE.__str8105 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_26; - var $put_0_be = $put_0; - var $have_0_be = $have_26; - var $left_0_be = $left_0; - var $hold_0_be = $shr791; - var $bits_0_be = $sub792; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$40 >> 2] = 0; - HEAP32[$mode >> 2] = 17; - var $next_27 = $next_26; - var $have_27 = $have_26; - var $hold_23 = $shr791; - var $bits_23 = $sub792; - __label__ = 154; - break; - } else if (($49 | 0) == 17) { - var $next_27 = $next_0; - var $have_27 = $have_0; - var $hold_23 = $hold_0; - var $bits_23 = $bits_0; - __label__ = 154; - } else if (($49 | 0) == 18) { - var $ret_1_ph = $ret_0; - var $next_29_ph = $next_0; - var $have_29_ph = $have_0; - var $hold_25_ph = $hold_0; - var $bits_25_ph = $bits_0; - __label__ = 164; - } else if (($49 | 0) == 19) { - var $ret_2 = $ret_0; - var $next_37 = $next_0; - var $have_37 = $have_0; - var $hold_33 = $hold_0; - var $bits_33 = $bits_0; - __label__ = 205; - } else if (($49 | 0) == 20) { - var $ret_3 = $ret_0; - var $next_38 = $next_0; - var $have_38 = $have_0; - var $hold_34 = $hold_0; - var $bits_34 = $bits_0; - __label__ = 206; - } else if (($49 | 0) == 21) { - var $ret_4 = $ret_0; - var $next_42 = $next_0; - var $have_42 = $have_0; - var $hold_38 = $hold_0; - var $bits_38 = $bits_0; - var $156 = HEAP32[$28 >> 2]; - __label__ = 227; - break; - } else if (($49 | 0) == 22) { - var $ret_5_ph = $ret_0; - var $next_45_ph = $next_0; - var $have_45_ph = $have_0; - var $hold_41_ph = $hold_0; - var $bits_41_ph = $bits_0; - __label__ = 234; - } else if (($49 | 0) == 23) { - var $ret_6 = $ret_0; - var $next_48 = $next_0; - var $have_48 = $have_0; - var $hold_44 = $hold_0; - var $bits_44 = $bits_0; - var $167 = HEAP32[$28 >> 2]; - __label__ = 248; - break; - } else if (($49 | 0) == 24) { - var $ret_7 = $ret_0; - var $next_51 = $next_0; - var $have_51 = $have_0; - var $hold_47 = $hold_0; - var $bits_47 = $bits_0; - __label__ = 254; - } else if (($49 | 0) == 25) { - if (($left_0 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_0; - var $have_58 = $have_0; - var $hold_54 = $hold_0; - var $bits_54 = $bits_0; - var $out_4 = $out_0; - break $_$12; - } - HEAP8[$put_0] = HEAP32[$21 >> 2] & 255; - HEAP32[$mode >> 2] = 20; - var $ret_0_be = $ret_0; - var $next_0_be = $next_0; - var $put_0_be = $put_0 + 1 | 0; - var $have_0_be = $have_0; - var $left_0_be = $left_0 - 1 | 0; - var $hold_0_be = $hold_0; - var $bits_0_be = $bits_0; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (($49 | 0) == 26) { - do { - if (!((HEAP32[$15 >> 2] | 0) == 0)) { - var $next_52 = $next_0; - var $have_52 = $have_0; - var $hold_48 = $hold_0; - var $bits_48 = $bits_0; - while (1) { - var $bits_48; - var $hold_48; - var $have_52; - var $next_52; - if (!($bits_48 >>> 0 < 32)) { - break; - } - if (($have_52 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_52; - var $have_58 = 0; - var $hold_54 = $hold_48; - var $bits_54 = $bits_48; - var $out_4 = $out_0; - break $_$12; - } - var $add1642 = ((HEAPU8[$next_52] & 255) << $bits_48) + $hold_48 | 0; - var $next_52 = $next_52 + 1 | 0; - var $have_52 = $have_52 - 1 | 0; - var $hold_48 = $add1642; - var $bits_48 = $bits_48 + 8 | 0; - } - var $sub1649 = $out_0 - $left_0 | 0; - HEAP32[$total_out >> 2] = HEAP32[$total_out >> 2] + $sub1649 | 0; - HEAP32[$36 >> 2] = HEAP32[$36 >> 2] + $sub1649 | 0; - if (!(($out_0 | 0) == ($left_0 | 0))) { - var $192 = HEAP32[$16 >> 2]; - var $add_ptr1659 = $put_0 + (-$sub1649 | 0) | 0; - if ((HEAP32[$17 >> 2] | 0) == 0) { - var $cond1667 = _adler32($192, $add_ptr1659, $sub1649); - } else { - var $cond1667 = _crc32($192, $add_ptr1659, $sub1649); - } - var $cond1667; - HEAP32[$16 >> 2] = $cond1667; - HEAP32[$adler >> 2] = $cond1667; - } - if ((HEAP32[$17 >> 2] | 0) == 0) { - var $cond1687 = _llvm_bswap_i32($hold_48); - } else { - var $cond1687 = $hold_48; - } - var $cond1687; - if (($cond1687 | 0) == (HEAP32[$16 >> 2] | 0)) { - var $next_53 = $next_52; - var $have_53 = $have_52; - var $hold_49 = 0; - var $bits_49 = 0; - var $out_1 = $left_0; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str17114 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_52; - var $put_0_be = $put_0; - var $have_0_be = $have_52; - var $left_0_be = $left_0; - var $hold_0_be = $hold_48; - var $bits_0_be = $bits_48; - var $out_0_be = $left_0; - __label__ = 268; - break $_$14; - } - var $next_53 = $next_0; - var $have_53 = $have_0; - var $hold_49 = $hold_0; - var $bits_49 = $bits_0; - var $out_1 = $out_0; - } while (0); - var $out_1; - var $bits_49; - var $hold_49; - var $have_53; - var $next_53; - HEAP32[$mode >> 2] = 27; - var $next_54 = $next_53; - var $have_54 = $have_53; - var $hold_50 = $hold_49; - var $bits_50 = $bits_49; - var $out_2 = $out_1; - __label__ = 286; - break; - } else if (($49 | 0) == 27) { - var $next_54 = $next_0; - var $have_54 = $have_0; - var $hold_50 = $hold_0; - var $bits_50 = $bits_0; - var $out_2 = $out_0; - __label__ = 286; - } else if (($49 | 0) == 28) { - var $ret_8 = 1; - var $next_58 = $next_0; - var $have_58 = $have_0; - var $hold_54 = $hold_0; - var $bits_54 = $bits_0; - var $out_4 = $out_0; - break $_$12; - } else if (($49 | 0) == 29) { - var $ret_8 = -3; - var $next_58 = $next_0; - var $have_58 = $have_0; - var $hold_54 = $hold_0; - var $bits_54 = $bits_0; - var $out_4 = $out_0; - break $_$12; - } else if (($49 | 0) == 30) { - var $retval_0 = -4; - break $_$2; - } else { - var $retval_0 = -2; - break $_$2; - } - } while (0); - $_$106 : do { - if (__label__ == 44) { - while (1) { - var $bits_3; - var $hold_3; - var $have_3; - var $next_3; - if (!($bits_3 >>> 0 < 32)) { - break; - } - if (($have_3 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_3; - var $have_58 = 0; - var $hold_54 = $hold_3; - var $bits_54 = $bits_3; - var $out_4 = $out_0; - break $_$12; - } - var $add176 = ((HEAPU8[$next_3] & 255) << $bits_3) + $hold_3 | 0; - var $next_3 = $next_3 + 1 | 0; - var $have_3 = $have_3 - 1 | 0; - var $hold_3 = $add176; - var $bits_3 = $bits_3 + 8 | 0; - } - var $63 = HEAP32[$18 >> 2]; - if (!(($63 | 0) == 0)) { - HEAP32[($63 + 4 | 0) >> 2] = $hold_3; - } - if (!((HEAP32[$17 >> 2] & 512 | 0) == 0)) { - HEAP8[$arrayidx] = $hold_3 & 255; - HEAP8[$arrayidx40] = $hold_3 >>> 8 & 255; - HEAP8[$arrayidx199] = $hold_3 >>> 16 & 255; - HEAP8[$arrayidx202] = $hold_3 >>> 24 & 255; - HEAP32[$16 >> 2] = _crc32(HEAP32[$16 >> 2], $arrayidx, 4); - } - HEAP32[$mode >> 2] = 3; - var $next_4 = $next_3; - var $have_4 = $have_3; - var $hold_4 = 0; - var $bits_4 = 0; - __label__ = 52; - break; - } else if (__label__ == 120) { - var $bits_15; - var $hold_15; - var $have_19; - var $next_19; - if ((HEAP32[$22 >> 2] | 0) == 0) { - HEAP32[$next_out >> 2] = $put_0; - HEAP32[$avail_out >> 2] = $left_0; - HEAP32[$next_in >> 2] = $next_19; - HEAP32[$avail_in15 >> 2] = $have_19; - HEAP32[$11 >> 2] = $hold_15; - HEAP32[$13 >> 2] = $bits_15; - var $retval_0 = 2; - break $_$2; - } - var $call602 = _adler32(0, 0, 0); - HEAP32[$16 >> 2] = $call602; - HEAP32[$adler >> 2] = $call602; - HEAP32[$mode >> 2] = 11; - var $next_20 = $next_19; - var $have_20 = $have_19; - var $hold_16 = $hold_15; - var $bits_16 = $bits_15; - __label__ = 123; - break; - } else if (__label__ == 143) { - var $bits_20; - var $hold_20; - var $have_24; - var $next_24; - HEAP32[$mode >> 2] = 15; - var $next_25 = $next_24; - var $have_25 = $have_24; - var $hold_21 = $hold_20; - var $bits_21 = $bits_20; - __label__ = 144; - break; - } else if (__label__ == 154) { - while (1) { - var $bits_23; - var $hold_23; - var $have_27; - var $next_27; - var $122 = HEAPU32[$40 >> 2]; - if (!($122 >>> 0 < HEAPU32[$39 >> 2] >>> 0)) { - break; - } - var $next_28 = $next_27; - var $have_28 = $have_27; - var $hold_24 = $hold_23; - var $bits_24 = $bits_23; - while (1) { - var $bits_24; - var $hold_24; - var $have_28; - var $next_28; - if (!($bits_24 >>> 0 < 3)) { - break; - } - if (($have_28 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_28; - var $have_58 = 0; - var $hold_54 = $hold_24; - var $bits_54 = $bits_24; - var $out_4 = $out_0; - break $_$12; - } - var $add829 = ((HEAPU8[$next_28] & 255) << $bits_24) + $hold_24 | 0; - var $next_28 = $next_28 + 1 | 0; - var $have_28 = $have_28 - 1 | 0; - var $hold_24 = $add829; - var $bits_24 = $bits_24 + 8 | 0; - } - HEAP32[$40 >> 2] = $122 + 1 | 0; - HEAP16[($41 + ((HEAPU16[(_inflate_order + ($122 << 1) | 0) >> 1] & 65535) << 1) | 0) >> 1] = $hold_24 & 65535 & 7; - var $next_27 = $next_28; - var $have_27 = $have_28; - var $hold_23 = $hold_24 >>> 3; - var $bits_23 = $bits_24 - 3 | 0; - } - $_$131 : do { - if ($122 >>> 0 < 19) { - var $126 = $122; - while (1) { - var $126; - HEAP32[$40 >> 2] = $126 + 1 | 0; - HEAP16[($41 + ((HEAPU16[(_inflate_order + ($126 << 1) | 0) >> 1] & 65535) << 1) | 0) >> 1] = 0; - var $_pr = HEAPU32[$40 >> 2]; - if (!($_pr >>> 0 < 19)) { - break $_$131; - } - var $126 = $_pr; - } - } - } while (0); - HEAP32[$43 >> 2] = $arraydecay860_c; - HEAP32[$44 >> 2] = $arraydecay860_c; - HEAP32[$26 >> 2] = 7; - var $call868 = _inflate_table(0, $arraydecay864, 19, $42, $26, $arraydecay867); - if (($call868 | 0) == 0) { - HEAP32[$40 >> 2] = 0; - HEAP32[$mode >> 2] = 18; - var $ret_1_ph = 0; - var $next_29_ph = $next_27; - var $have_29_ph = $have_27; - var $hold_25_ph = $hold_23; - var $bits_25_ph = $bits_23; - __label__ = 164; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str9106 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $call868; - var $next_0_be = $next_27; - var $put_0_be = $put_0; - var $have_0_be = $have_27; - var $left_0_be = $left_0; - var $hold_0_be = $hold_23; - var $bits_0_be = $bits_23; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (__label__ == 286) { - var $out_2; - var $bits_50; - var $hold_50; - var $have_54; - var $next_54; - do { - if (!((HEAP32[$15 >> 2] | 0) == 0)) { - if ((HEAP32[$17 >> 2] | 0) == 0) { - var $next_56 = $next_54; - var $have_56 = $have_54; - var $hold_52 = $hold_50; - var $bits_52 = $bits_50; - break; - } - var $next_55 = $next_54; - var $have_55 = $have_54; - var $hold_51 = $hold_50; - var $bits_51 = $bits_50; - while (1) { - var $bits_51; - var $hold_51; - var $have_55; - var $next_55; - if (!($bits_51 >>> 0 < 32)) { - break; - } - if (($have_55 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_55; - var $have_58 = 0; - var $hold_54 = $hold_51; - var $bits_54 = $bits_51; - var $out_4 = $out_2; - break $_$12; - } - var $add1721 = ((HEAPU8[$next_55] & 255) << $bits_51) + $hold_51 | 0; - var $next_55 = $next_55 + 1 | 0; - var $have_55 = $have_55 - 1 | 0; - var $hold_51 = $add1721; - var $bits_51 = $bits_51 + 8 | 0; - } - if (($hold_51 | 0) == (HEAP32[$36 >> 2] | 0)) { - var $next_56 = $next_55; - var $have_56 = $have_55; - var $hold_52 = 0; - var $bits_52 = 0; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str18115 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_55; - var $put_0_be = $put_0; - var $have_0_be = $have_55; - var $left_0_be = $left_0; - var $hold_0_be = $hold_51; - var $bits_0_be = $bits_51; - var $out_0_be = $out_2; - __label__ = 268; - break $_$106; - } - var $next_56 = $next_54; - var $have_56 = $have_54; - var $hold_52 = $hold_50; - var $bits_52 = $bits_50; - } while (0); - var $bits_52; - var $hold_52; - var $have_56; - var $next_56; - HEAP32[$mode >> 2] = 28; - var $ret_8 = 1; - var $next_58 = $next_56; - var $have_58 = $have_56; - var $hold_54 = $hold_52; - var $bits_54 = $bits_52; - var $out_4 = $out_2; - break $_$12; - } - } while (0); - $_$148 : do { - if (__label__ == 52) { - while (1) { - var $bits_4; - var $hold_4; - var $have_4; - var $next_4; - if (!($bits_4 >>> 0 < 16)) { - break; - } - if (($have_4 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_4; - var $have_58 = 0; - var $hold_54 = $hold_4; - var $bits_54 = $bits_4; - var $out_4 = $out_0; - break $_$12; - } - var $add227 = ((HEAPU8[$next_4] & 255) << $bits_4) + $hold_4 | 0; - var $next_4 = $next_4 + 1 | 0; - var $have_4 = $have_4 - 1 | 0; - var $hold_4 = $add227; - var $bits_4 = $bits_4 + 8 | 0; - } - var $67 = HEAP32[$18 >> 2]; - if (!(($67 | 0) == 0)) { - HEAP32[($67 + 8 | 0) >> 2] = $hold_4 & 255; - HEAP32[(HEAP32[$18 >> 2] + 12 | 0) >> 2] = $hold_4 >>> 8; - } - if (!((HEAP32[$17 >> 2] & 512 | 0) == 0)) { - HEAP8[$arrayidx] = $hold_4 & 255; - HEAP8[$arrayidx40] = $hold_4 >>> 8 & 255; - HEAP32[$16 >> 2] = _crc32(HEAP32[$16 >> 2], $arrayidx, 2); - } - HEAP32[$mode >> 2] = 4; - var $next_5 = $next_4; - var $have_5 = $have_4; - var $hold_5 = 0; - var $bits_5 = 0; - __label__ = 60; - break; - } else if (__label__ == 123) { - var $bits_16; - var $hold_16; - var $have_20; - var $next_20; - if ($23) { - var $ret_8 = $ret_0; - var $next_58 = $next_20; - var $have_58 = $have_20; - var $hold_54 = $hold_16; - var $bits_54 = $bits_16; - var $out_4 = $out_0; - break $_$12; - } - var $next_21 = $next_20; - var $have_21 = $have_20; - var $hold_17 = $hold_16; - var $bits_17 = $bits_16; - __label__ = 124; - break; - } else if (__label__ == 144) { - var $bits_21; - var $hold_21; - var $have_25; - var $next_25; - var $119 = HEAPU32[$21 >> 2]; - if (($119 | 0) == 0) { - HEAP32[$mode >> 2] = 11; - var $ret_0_be = $ret_0; - var $next_0_be = $next_25; - var $put_0_be = $put_0; - var $have_0_be = $have_25; - var $left_0_be = $left_0; - var $hold_0_be = $hold_21; - var $bits_0_be = $bits_21; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $copy_3 = $119 >>> 0 > $have_25 >>> 0 ? $have_25 : $119; - var $copy_4 = $copy_3 >>> 0 > $left_0 >>> 0 ? $left_0 : $copy_3; - if (($copy_4 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_25; - var $have_58 = $have_25; - var $hold_54 = $hold_21; - var $bits_54 = $bits_21; - var $out_4 = $out_0; - break $_$12; - } - _memcpy($put_0, $next_25, $copy_4, 1); - HEAP32[$21 >> 2] = HEAP32[$21 >> 2] - $copy_4 | 0; - var $ret_0_be = $ret_0; - var $next_0_be = $next_25 + $copy_4 | 0; - var $put_0_be = $put_0 + $copy_4 | 0; - var $have_0_be = $have_25 - $copy_4 | 0; - var $left_0_be = $left_0 - $copy_4 | 0; - var $hold_0_be = $hold_21; - var $bits_0_be = $bits_21; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (__label__ == 164) { - var $bits_25_ph; - var $hold_25_ph; - var $have_29_ph; - var $next_29_ph; - var $ret_1_ph; - var $next_29 = $next_29_ph; - var $have_29 = $have_29_ph; - var $hold_25 = $hold_25_ph; - var $bits_25 = $bits_25_ph; - $_$167 : while (1) { - var $bits_25; - var $hold_25; - var $have_29; - var $next_29; - var $128 = HEAPU32[$40 >> 2]; - var $129 = HEAPU32[$37 >> 2]; - var $add881 = HEAP32[$38 >> 2] + $129 | 0; - if ($128 >>> 0 < $add881 >>> 0) { - var $sub888 = (1 << HEAP32[$26 >> 2]) - 1 | 0; - var $132 = HEAPU32[$27 >> 2]; - var $next_30 = $next_29; - var $have_30 = $have_29; - var $hold_26 = $hold_25; - var $bits_26 = $bits_25; - while (1) { - var $bits_26; - var $hold_26; - var $have_30; - var $next_30; - var $and889 = $sub888 & $hold_26; - var $conv893 = HEAPU8[$132 + ($and889 << 2) + 1 | 0] & 255; - if (!($conv893 >>> 0 > $bits_26 >>> 0)) { - break; - } - if (($have_30 | 0) == 0) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_30; - var $have_58 = 0; - var $hold_54 = $hold_26; - var $bits_54 = $bits_26; - var $out_4 = $out_0; - break $_$12; - } - var $add907 = ((HEAPU8[$next_30] & 255) << $bits_26) + $hold_26 | 0; - var $next_30 = $next_30 + 1 | 0; - var $have_30 = $have_30 - 1 | 0; - var $hold_26 = $add907; - var $bits_26 = $bits_26 + 8 | 0; - } - var $tmp26 = HEAPU16[($132 + ($and889 << 2) + 2 | 0) >> 1]; - if (($tmp26 & 65535) < 16) { - var $next_31 = $next_30; - var $have_31 = $have_30; - var $hold_27 = $hold_26; - var $bits_27 = $bits_26; - while (1) { - var $bits_27; - var $hold_27; - var $have_31; - var $next_31; - if (!($bits_27 >>> 0 < $conv893 >>> 0)) { - break; - } - if (($have_31 | 0) == 0) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_31; - var $have_58 = 0; - var $hold_54 = $hold_27; - var $bits_54 = $bits_27; - var $out_4 = $out_0; - break $_$12; - } - var $add931 = ((HEAPU8[$next_31] & 255) << $bits_27) + $hold_27 | 0; - var $next_31 = $next_31 + 1 | 0; - var $have_31 = $have_31 - 1 | 0; - var $hold_27 = $add931; - var $bits_27 = $bits_27 + 8 | 0; - } - HEAP32[$40 >> 2] = $128 + 1 | 0; - HEAP16[($41 + ($128 << 1) | 0) >> 1] = $tmp26; - var $next_29 = $next_31; - var $have_29 = $have_31; - var $hold_25 = $hold_27 >>> ($conv893 >>> 0); - var $bits_25 = $bits_27 - $conv893 | 0; - } else { - if ($tmp26 << 16 >> 16 == 16) { - var $add962 = $conv893 + 2 | 0; - var $next_32 = $next_30; - var $have_32 = $have_30; - var $hold_28 = $hold_26; - var $bits_28 = $bits_26; - while (1) { - var $bits_28; - var $hold_28; - var $have_32; - var $next_32; - if (!($bits_28 >>> 0 < $add962 >>> 0)) { - break; - } - if (($have_32 | 0) == 0) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_32; - var $have_58 = 0; - var $hold_54 = $hold_28; - var $bits_54 = $bits_28; - var $out_4 = $out_0; - break $_$12; - } - var $add975 = ((HEAPU8[$next_32] & 255) << $bits_28) + $hold_28 | 0; - var $next_32 = $next_32 + 1 | 0; - var $have_32 = $have_32 - 1 | 0; - var $hold_28 = $add975; - var $bits_28 = $bits_28 + 8 | 0; - } - var $shr985 = $hold_28 >>> ($conv893 >>> 0); - var $sub988 = $bits_28 - $conv893 | 0; - if (($128 | 0) == 0) { - HEAP32[$msg >> 2] = STRING_TABLE.__str10107 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_1_ph; - var $next_0_be = $next_32; - var $put_0_be = $put_0; - var $have_0_be = $have_32; - var $left_0_be = $left_0; - var $hold_0_be = $shr985; - var $bits_0_be = $sub988; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - var $len_0 = HEAP16[($41 + (($128 - 1 | 0) << 1) | 0) >> 1]; - var $next_35 = $next_32; - var $have_35 = $have_32; - var $hold_31 = $shr985 >>> 2; - var $bits_31 = $sub988 - 2 | 0; - var $copy_5 = ($shr985 & 3) + 3 | 0; - } else if ($tmp26 << 16 >> 16 == 17) { - var $add1020 = $conv893 + 3 | 0; - var $next_33 = $next_30; - var $have_33 = $have_30; - var $hold_29 = $hold_26; - var $bits_29 = $bits_26; - while (1) { - var $bits_29; - var $hold_29; - var $have_33; - var $next_33; - if (!($bits_29 >>> 0 < $add1020 >>> 0)) { - break; - } - if (($have_33 | 0) == 0) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_33; - var $have_58 = 0; - var $hold_54 = $hold_29; - var $bits_54 = $bits_29; - var $out_4 = $out_0; - break $_$12; - } - var $add1033 = ((HEAPU8[$next_33] & 255) << $bits_29) + $hold_29 | 0; - var $next_33 = $next_33 + 1 | 0; - var $have_33 = $have_33 - 1 | 0; - var $hold_29 = $add1033; - var $bits_29 = $bits_29 + 8 | 0; - } - var $shr1043 = $hold_29 >>> ($conv893 >>> 0); - var $len_0 = 0; - var $next_35 = $next_33; - var $have_35 = $have_33; - var $hold_31 = $shr1043 >>> 3; - var $bits_31 = (-3 - $conv893 | 0) + $bits_29 | 0; - var $copy_5 = ($shr1043 & 7) + 3 | 0; - } else { - var $add1061 = $conv893 + 7 | 0; - var $next_34 = $next_30; - var $have_34 = $have_30; - var $hold_30 = $hold_26; - var $bits_30 = $bits_26; - while (1) { - var $bits_30; - var $hold_30; - var $have_34; - var $next_34; - if (!($bits_30 >>> 0 < $add1061 >>> 0)) { - break; - } - if (($have_34 | 0) == 0) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_34; - var $have_58 = 0; - var $hold_54 = $hold_30; - var $bits_54 = $bits_30; - var $out_4 = $out_0; - break $_$12; - } - var $add1074 = ((HEAPU8[$next_34] & 255) << $bits_30) + $hold_30 | 0; - var $next_34 = $next_34 + 1 | 0; - var $have_34 = $have_34 - 1 | 0; - var $hold_30 = $add1074; - var $bits_30 = $bits_30 + 8 | 0; - } - var $shr1084 = $hold_30 >>> ($conv893 >>> 0); - var $len_0 = 0; - var $next_35 = $next_34; - var $have_35 = $have_34; - var $hold_31 = $shr1084 >>> 7; - var $bits_31 = (-7 - $conv893 | 0) + $bits_30 | 0; - var $copy_5 = ($shr1084 & 127) + 11 | 0; - } - var $copy_5; - var $bits_31; - var $hold_31; - var $have_35; - var $next_35; - var $len_0; - if (($128 + $copy_5 | 0) >>> 0 > $add881 >>> 0) { - HEAP32[$msg >> 2] = STRING_TABLE.__str10107 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_1_ph; - var $next_0_be = $next_35; - var $put_0_be = $put_0; - var $have_0_be = $have_35; - var $left_0_be = $left_0; - var $hold_0_be = $hold_31; - var $bits_0_be = $bits_31; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - var $copy_6127 = $copy_5; - var $139 = $128; - while (1) { - var $139; - var $copy_6127; - var $dec1111 = $copy_6127 - 1 | 0; - HEAP32[$40 >> 2] = $139 + 1 | 0; - HEAP16[($41 + ($139 << 1) | 0) >> 1] = $len_0; - if (($dec1111 | 0) == 0) { - var $next_29 = $next_35; - var $have_29 = $have_35; - var $hold_25 = $hold_31; - var $bits_25 = $bits_31; - continue $_$167; - } - var $copy_6127 = $dec1111; - var $139 = HEAP32[$40 >> 2]; - } - } - } else { - if ((HEAP32[$mode >> 2] | 0) == 29) { - var $ret_0_be = $ret_1_ph; - var $next_0_be = $next_29; - var $put_0_be = $put_0; - var $have_0_be = $have_29; - var $left_0_be = $left_0; - var $hold_0_be = $hold_25; - var $bits_0_be = $bits_25; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - if (HEAP16[$45 >> 1] << 16 >> 16 == 0) { - HEAP32[$msg >> 2] = STRING_TABLE.__str11108 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_1_ph; - var $next_0_be = $next_29; - var $put_0_be = $put_0; - var $have_0_be = $have_29; - var $left_0_be = $left_0; - var $hold_0_be = $hold_25; - var $bits_0_be = $bits_25; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - HEAP32[$43 >> 2] = $arraydecay860_c; - HEAP32[$44 >> 2] = $arraydecay860_c; - HEAP32[$26 >> 2] = 9; - var $call1149 = _inflate_table(1, $arraydecay864, $129, $42, $26, $arraydecay867); - if (!(($call1149 | 0) == 0)) { - HEAP32[$msg >> 2] = STRING_TABLE.__str12109 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $call1149; - var $next_0_be = $next_29; - var $put_0_be = $put_0; - var $have_0_be = $have_29; - var $left_0_be = $left_0; - var $hold_0_be = $hold_25; - var $bits_0_be = $bits_25; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - HEAP32[$46 >> 2] = HEAP32[$42 >> 2]; - HEAP32[$47 >> 2] = 6; - var $call1165 = _inflate_table(2, $arraydecay864 + (HEAP32[$37 >> 2] << 1) | 0, HEAP32[$38 >> 2], $42, $47, $arraydecay867); - if (!(($call1165 | 0) == 0)) { - HEAP32[$msg >> 2] = STRING_TABLE.__str13110 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $call1165; - var $next_0_be = $next_29; - var $put_0_be = $put_0; - var $have_0_be = $have_29; - var $left_0_be = $left_0; - var $hold_0_be = $hold_25; - var $bits_0_be = $bits_25; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - HEAP32[$mode >> 2] = 19; - if ($cmp660) { - var $ret_8 = 0; - var $next_58 = $next_29; - var $have_58 = $have_29; - var $hold_54 = $hold_25; - var $bits_54 = $bits_25; - var $out_4 = $out_0; - break $_$12; - } - var $ret_2 = 0; - var $next_37 = $next_29; - var $have_37 = $have_29; - var $hold_33 = $hold_25; - var $bits_33 = $bits_25; - __label__ = 205; - break $_$148; - } - } - } - } while (0); - do { - if (__label__ == 60) { - var $bits_5; - var $hold_5; - var $have_5; - var $next_5; - var $71 = HEAPU32[$17 >> 2]; - do { - if (($71 & 1024 | 0) == 0) { - var $76 = HEAP32[$18 >> 2]; - if (($76 | 0) == 0) { - var $next_7 = $next_5; - var $have_7 = $have_5; - var $hold_7 = $hold_5; - var $bits_7 = $bits_5; - break; - } - HEAP32[($76 + 16 | 0) >> 2] = 0; - var $next_7 = $next_5; - var $have_7 = $have_5; - var $hold_7 = $hold_5; - var $bits_7 = $bits_5; - } else { - var $next_6 = $next_5; - var $have_6 = $have_5; - var $hold_6 = $hold_5; - var $bits_6 = $bits_5; - while (1) { - var $bits_6; - var $hold_6; - var $have_6; - var $next_6; - if (!($bits_6 >>> 0 < 16)) { - break; - } - if (($have_6 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_6; - var $have_58 = 0; - var $hold_54 = $hold_6; - var $bits_54 = $bits_6; - var $out_4 = $out_0; - break $_$12; - } - var $add279 = ((HEAPU8[$next_6] & 255) << $bits_6) + $hold_6 | 0; - var $next_6 = $next_6 + 1 | 0; - var $have_6 = $have_6 - 1 | 0; - var $hold_6 = $add279; - var $bits_6 = $bits_6 + 8 | 0; - } - HEAP32[$21 >> 2] = $hold_6; - var $73 = HEAP32[$18 >> 2]; - if (($73 | 0) == 0) { - var $74 = $71; - } else { - HEAP32[($73 + 20 | 0) >> 2] = $hold_6; - var $74 = HEAP32[$17 >> 2]; - } - var $74; - if (($74 & 512 | 0) == 0) { - var $next_7 = $next_6; - var $have_7 = $have_6; - var $hold_7 = 0; - var $bits_7 = 0; - break; - } - HEAP8[$arrayidx] = $hold_6 & 255; - HEAP8[$arrayidx40] = $hold_6 >>> 8 & 255; - HEAP32[$16 >> 2] = _crc32(HEAP32[$16 >> 2], $arrayidx, 2); - var $next_7 = $next_6; - var $have_7 = $have_6; - var $hold_7 = 0; - var $bits_7 = 0; - } - } while (0); - var $bits_7; - var $hold_7; - var $have_7; - var $next_7; - HEAP32[$mode >> 2] = 5; - var $next_8 = $next_7; - var $have_8 = $have_7; - var $hold_8 = $hold_7; - var $bits_8 = $bits_7; - __label__ = 71; - break; - } else if (__label__ == 124) { - var $bits_17; - var $hold_17; - var $have_21; - var $next_21; - if ((HEAP32[$24 >> 2] | 0) == 0) { - var $next_22 = $next_21; - var $have_22 = $have_21; - var $hold_18 = $hold_17; - var $bits_18 = $bits_17; - while (1) { - var $bits_18; - var $hold_18; - var $have_22; - var $next_22; - if (!($bits_18 >>> 0 < 3)) { - break; - } - if (($have_22 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_22; - var $have_58 = 0; - var $hold_54 = $hold_18; - var $bits_54 = $bits_18; - var $out_4 = $out_0; - break $_$12; - } - var $add641 = ((HEAPU8[$next_22] & 255) << $bits_18) + $hold_18 | 0; - var $next_22 = $next_22 + 1 | 0; - var $have_22 = $have_22 - 1 | 0; - var $hold_18 = $add641; - var $bits_18 = $bits_18 + 8 | 0; - } - HEAP32[$24 >> 2] = $hold_18 & 1; - var $and655 = $hold_18 >>> 1 & 3; - do { - if (($and655 | 0) == 0) { - HEAP32[$mode >> 2] = 13; - } else if (($and655 | 0) == 1) { - _fixedtables($4); - HEAP32[$mode >> 2] = 19; - if (!$cmp660) { - break; - } - var $ret_8 = $ret_0; - var $next_58 = $next_22; - var $have_58 = $have_22; - var $hold_54 = $hold_18 >>> 3; - var $bits_54 = $bits_18 - 3 | 0; - var $out_4 = $out_0; - break $_$12; - } else if (($and655 | 0) == 2) { - HEAP32[$mode >> 2] = 16; - } else if (($and655 | 0) == 3) { - HEAP32[$msg >> 2] = STRING_TABLE.__str6103 | 0; - HEAP32[$mode >> 2] = 29; - } - } while (0); - var $ret_0_be = $ret_0; - var $next_0_be = $next_22; - var $put_0_be = $put_0; - var $have_0_be = $have_22; - var $left_0_be = $left_0; - var $hold_0_be = $hold_18 >>> 3; - var $bits_0_be = $bits_18 - 3 | 0; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $and619 = $bits_17 & 7; - HEAP32[$mode >> 2] = 26; - var $ret_0_be = $ret_0; - var $next_0_be = $next_21; - var $put_0_be = $put_0; - var $have_0_be = $have_21; - var $left_0_be = $left_0; - var $hold_0_be = $hold_17 >>> ($and619 >>> 0); - var $bits_0_be = $bits_17 - $and619 | 0; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (__label__ == 205) { - var $bits_33; - var $hold_33; - var $have_37; - var $next_37; - var $ret_2; - HEAP32[$mode >> 2] = 20; - var $ret_3 = $ret_2; - var $next_38 = $next_37; - var $have_38 = $have_37; - var $hold_34 = $hold_33; - var $bits_34 = $bits_33; - __label__ = 206; - break; - } - } while (0); - do { - if (__label__ == 71) { - var $bits_8; - var $hold_8; - var $have_8; - var $next_8; - var $77 = HEAPU32[$17 >> 2]; - if (($77 & 1024 | 0) == 0) { - var $next_10 = $next_8; - var $have_10 = $have_8; - var $88 = $77; - } else { - var $78 = HEAPU32[$21 >> 2]; - var $copy_0 = $78 >>> 0 > $have_8 >>> 0 ? $have_8 : $78; - if (($copy_0 | 0) == 0) { - var $next_9 = $next_8; - var $have_9 = $have_8; - var $87 = $78; - var $86 = $77; - } else { - var $79 = HEAPU32[$18 >> 2]; - do { - if (($79 | 0) == 0) { - var $83 = $77; - } else { - var $80 = HEAP32[($79 + 16 | 0) >> 2]; - if (($80 | 0) == 0) { - var $83 = $77; - break; - } - var $sub341 = HEAP32[($79 + 20 | 0) >> 2] - $78 | 0; - var $82 = HEAPU32[($79 + 24 | 0) >> 2]; - _memcpy($80 + $sub341 | 0, $next_8, ($sub341 + $copy_0 | 0) >>> 0 > $82 >>> 0 ? $82 - $sub341 | 0 : $copy_0, 1); - var $83 = HEAP32[$17 >> 2]; - } - } while (0); - var $83; - if (!(($83 & 512 | 0) == 0)) { - HEAP32[$16 >> 2] = _crc32(HEAP32[$16 >> 2], $next_8, $copy_0); - } - var $sub364 = HEAP32[$21 >> 2] - $copy_0 | 0; - HEAP32[$21 >> 2] = $sub364; - var $next_9 = $next_8 + $copy_0 | 0; - var $have_9 = $have_8 - $copy_0 | 0; - var $87 = $sub364; - var $86 = $83; - } - var $86; - var $87; - var $have_9; - var $next_9; - if (!(($87 | 0) == 0)) { - var $ret_8 = $ret_0; - var $next_58 = $next_9; - var $have_58 = $have_9; - var $hold_54 = $hold_8; - var $bits_54 = $bits_8; - var $out_4 = $out_0; - break $_$12; - } - var $next_10 = $next_9; - var $have_10 = $have_9; - var $88 = $86; - } - var $88; - var $have_10; - var $next_10; - HEAP32[$21 >> 2] = 0; - HEAP32[$mode >> 2] = 6; - var $next_11 = $next_10; - var $have_11 = $have_10; - var $hold_9 = $hold_8; - var $bits_9 = $bits_8; - var $89 = $88; - __label__ = 81; - break; - } else if (__label__ == 206) { - var $bits_34; - var $hold_34; - var $have_38; - var $next_38; - var $ret_3; - if ($have_38 >>> 0 > 5 & $left_0 >>> 0 > 257) { - HEAP32[$next_out >> 2] = $put_0; - HEAP32[$avail_out >> 2] = $left_0; - HEAP32[$next_in >> 2] = $next_38; - HEAP32[$avail_in15 >> 2] = $have_38; - HEAP32[$11 >> 2] = $hold_34; - HEAP32[$13 >> 2] = $bits_34; - _inflate_fast($strm, $out_0); - var $144 = HEAP32[$next_out >> 2]; - var $145 = HEAP32[$avail_out >> 2]; - var $146 = HEAP32[$next_in >> 2]; - var $147 = HEAP32[$avail_in15 >> 2]; - var $148 = HEAP32[$11 >> 2]; - var $149 = HEAP32[$13 >> 2]; - if (!((HEAP32[$mode >> 2] | 0) == 11)) { - var $ret_0_be = $ret_3; - var $next_0_be = $146; - var $put_0_be = $144; - var $have_0_be = $147; - var $left_0_be = $145; - var $hold_0_be = $148; - var $bits_0_be = $149; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$25 >> 2] = -1; - var $ret_0_be = $ret_3; - var $next_0_be = $146; - var $put_0_be = $144; - var $have_0_be = $147; - var $left_0_be = $145; - var $hold_0_be = $148; - var $bits_0_be = $149; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$25 >> 2] = 0; - var $sub1213 = (1 << HEAP32[$26 >> 2]) - 1 | 0; - var $152 = HEAPU32[$27 >> 2]; - var $next_39 = $next_38; - var $have_39 = $have_38; - var $hold_35 = $hold_34; - var $bits_35 = $bits_34; - while (1) { - var $bits_35; - var $hold_35; - var $have_39; - var $next_39; - var $and1214 = $sub1213 & $hold_35; - var $tmp22 = HEAPU8[$152 + ($and1214 << 2) + 1 | 0]; - var $conv1218 = $tmp22 & 255; - if (!($conv1218 >>> 0 > $bits_35 >>> 0)) { - break; - } - if (($have_39 | 0) == 0) { - var $ret_8 = $ret_3; - var $next_58 = $next_39; - var $have_58 = 0; - var $hold_54 = $hold_35; - var $bits_54 = $bits_35; - var $out_4 = $out_0; - break $_$12; - } - var $add1232 = ((HEAPU8[$next_39] & 255) << $bits_35) + $hold_35 | 0; - var $next_39 = $next_39 + 1 | 0; - var $have_39 = $have_39 - 1 | 0; - var $hold_35 = $add1232; - var $bits_35 = $bits_35 + 8 | 0; - } - var $tmp21 = HEAPU8[$152 + ($and1214 << 2) | 0]; - var $tmp23 = HEAPU16[($152 + ($and1214 << 2) + 2 | 0) >> 1]; - var $conv1237 = $tmp21 & 255; - do { - if ($tmp21 << 24 >> 24 == 0) { - var $next_41 = $next_39; - var $have_41 = $have_39; - var $hold_37 = $hold_35; - var $bits_37 = $bits_35; - var $here_09_0 = 0; - var $here_110_0 = $tmp22; - var $here_211_0 = $tmp23; - var $155 = 0; - } else { - if (!(($conv1237 & 240 | 0) == 0)) { - var $next_41 = $next_39; - var $have_41 = $have_39; - var $hold_37 = $hold_35; - var $bits_37 = $bits_35; - var $here_09_0 = $tmp21; - var $here_110_0 = $tmp22; - var $here_211_0 = $tmp23; - var $155 = 0; - break; - } - var $conv1248 = $tmp23 & 65535; - var $sub1255 = (1 << ($conv1218 + $conv1237 | 0)) - 1 | 0; - var $next_40 = $next_39; - var $have_40 = $have_39; - var $hold_36 = $hold_35; - var $bits_36 = $bits_35; - while (1) { - var $bits_36; - var $hold_36; - var $have_40; - var $next_40; - var $add1260 = (($hold_36 & $sub1255) >>> ($conv1218 >>> 0)) + $conv1248 | 0; - var $tmp19 = HEAPU8[$152 + ($add1260 << 2) + 1 | 0]; - if (!((($tmp19 & 255) + $conv1218 | 0) >>> 0 > $bits_36 >>> 0)) { - break; - } - if (($have_40 | 0) == 0) { - var $ret_8 = $ret_3; - var $next_58 = $next_40; - var $have_58 = 0; - var $hold_54 = $hold_36; - var $bits_54 = $bits_36; - var $out_4 = $out_0; - break $_$12; - } - var $add1281 = ((HEAPU8[$next_40] & 255) << $bits_36) + $hold_36 | 0; - var $next_40 = $next_40 + 1 | 0; - var $have_40 = $have_40 - 1 | 0; - var $hold_36 = $add1281; - var $bits_36 = $bits_36 + 8 | 0; - } - var $tmp20 = HEAP16[($152 + ($add1260 << 2) + 2 | 0) >> 1]; - var $tmp18 = HEAP8[$152 + ($add1260 << 2) | 0]; - HEAP32[$25 >> 2] = $conv1218; - var $next_41 = $next_40; - var $have_41 = $have_40; - var $hold_37 = $hold_36 >>> ($conv1218 >>> 0); - var $bits_37 = $bits_36 - $conv1218 | 0; - var $here_09_0 = $tmp18; - var $here_110_0 = $tmp19; - var $here_211_0 = $tmp20; - var $155 = $conv1218; - } - } while (0); - var $155; - var $here_211_0; - var $here_110_0; - var $here_09_0; - var $bits_37; - var $hold_37; - var $have_41; - var $next_41; - var $conv1302 = $here_110_0 & 255; - var $shr1303 = $hold_37 >>> ($conv1302 >>> 0); - var $sub1306 = $bits_37 - $conv1302 | 0; - HEAP32[$25 >> 2] = $155 + $conv1302 | 0; - HEAP32[$21 >> 2] = $here_211_0 & 65535; - var $conv1317 = $here_09_0 & 255; - if ($here_09_0 << 24 >> 24 == 0) { - HEAP32[$mode >> 2] = 25; - var $ret_0_be = $ret_3; - var $next_0_be = $next_41; - var $put_0_be = $put_0; - var $have_0_be = $have_41; - var $left_0_be = $left_0; - var $hold_0_be = $shr1303; - var $bits_0_be = $sub1306; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - if (!(($conv1317 & 32 | 0) == 0)) { - HEAP32[$25 >> 2] = -1; - HEAP32[$mode >> 2] = 11; - var $ret_0_be = $ret_3; - var $next_0_be = $next_41; - var $put_0_be = $put_0; - var $have_0_be = $have_41; - var $left_0_be = $left_0; - var $hold_0_be = $shr1303; - var $bits_0_be = $sub1306; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - if (($conv1317 & 64 | 0) == 0) { - var $and1341 = $conv1317 & 15; - HEAP32[$28 >> 2] = $and1341; - HEAP32[$mode >> 2] = 21; - var $ret_4 = $ret_3; - var $next_42 = $next_41; - var $have_42 = $have_41; - var $hold_38 = $shr1303; - var $bits_38 = $sub1306; - var $156 = $and1341; - __label__ = 227; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str2171 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_3; - var $next_0_be = $next_41; - var $put_0_be = $put_0; - var $have_0_be = $have_41; - var $left_0_be = $left_0; - var $hold_0_be = $shr1303; - var $bits_0_be = $sub1306; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - } while (0); - do { - if (__label__ == 81) { - var $89; - var $bits_9; - var $hold_9; - var $have_11; - var $next_11; - do { - if (($89 & 2048 | 0) == 0) { - var $98 = HEAP32[$18 >> 2]; - if (($98 | 0) == 0) { - var $next_12 = $next_11; - var $have_12 = $have_11; - break; - } - HEAP32[($98 + 28 | 0) >> 2] = 0; - var $next_12 = $next_11; - var $have_12 = $have_11; - } else { - if (($have_11 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_11; - var $have_58 = 0; - var $hold_54 = $hold_9; - var $bits_54 = $bits_9; - var $out_4 = $out_0; - break $_$12; - } - var $copy_1 = 0; - while (1) { - var $copy_1; - var $inc = $copy_1 + 1 | 0; - var $90 = HEAP8[$next_11 + $copy_1 | 0]; - var $91 = HEAP32[$18 >> 2]; - do { - if (!(($91 | 0) == 0)) { - var $name = $91 + 28 | 0; - if ((HEAP32[$name >> 2] | 0) == 0) { - break; - } - var $93 = HEAPU32[$21 >> 2]; - if (!($93 >>> 0 < HEAPU32[($91 + 32 | 0) >> 2] >>> 0)) { - break; - } - HEAP32[$21 >> 2] = $93 + 1 | 0; - HEAP8[HEAP32[$name >> 2] + $93 | 0] = $90; - } - } while (0); - var $tobool405 = $90 << 24 >> 24 != 0; - if (!($tobool405 & $inc >>> 0 < $have_11 >>> 0)) { - break; - } - var $copy_1 = $inc; - } - if (!((HEAP32[$17 >> 2] & 512 | 0) == 0)) { - HEAP32[$16 >> 2] = _crc32(HEAP32[$16 >> 2], $next_11, $inc); - } - var $sub417 = $have_11 - $inc | 0; - var $add_ptr418 = $next_11 + $inc | 0; - if ($tobool405) { - var $ret_8 = $ret_0; - var $next_58 = $add_ptr418; - var $have_58 = $sub417; - var $hold_54 = $hold_9; - var $bits_54 = $bits_9; - var $out_4 = $out_0; - break $_$12; - } - var $next_12 = $add_ptr418; - var $have_12 = $sub417; - } - } while (0); - var $have_12; - var $next_12; - HEAP32[$21 >> 2] = 0; - HEAP32[$mode >> 2] = 7; - var $next_13 = $next_12; - var $have_13 = $have_12; - var $hold_10 = $hold_9; - var $bits_10 = $bits_9; - __label__ = 94; - break; - } else if (__label__ == 227) { - var $156; - var $bits_38; - var $hold_38; - var $have_42; - var $next_42; - var $ret_4; - if (($156 | 0) == 0) { - var $next_44 = $next_42; - var $have_44 = $have_42; - var $hold_40 = $hold_38; - var $bits_40 = $bits_38; - var $160 = HEAP32[$21 >> 2]; - } else { - var $next_43 = $next_42; - var $have_43 = $have_42; - var $hold_39 = $hold_38; - var $bits_39 = $bits_38; - while (1) { - var $bits_39; - var $hold_39; - var $have_43; - var $next_43; - if (!($bits_39 >>> 0 < $156 >>> 0)) { - break; - } - if (($have_43 | 0) == 0) { - var $ret_8 = $ret_4; - var $next_58 = $next_43; - var $have_58 = 0; - var $hold_54 = $hold_39; - var $bits_54 = $bits_39; - var $out_4 = $out_0; - break $_$12; - } - var $add1363 = ((HEAPU8[$next_43] & 255) << $bits_39) + $hold_39 | 0; - var $next_43 = $next_43 + 1 | 0; - var $have_43 = $have_43 - 1 | 0; - var $hold_39 = $add1363; - var $bits_39 = $bits_39 + 8 | 0; - } - var $add1375 = HEAP32[$21 >> 2] + (((1 << $156) - 1 | 0) & $hold_39) | 0; - HEAP32[$21 >> 2] = $add1375; - HEAP32[$25 >> 2] = HEAP32[$25 >> 2] + $156 | 0; - var $next_44 = $next_43; - var $have_44 = $have_43; - var $hold_40 = $hold_39 >>> ($156 >>> 0); - var $bits_40 = $bits_39 - $156 | 0; - var $160 = $add1375; - } - var $160; - var $bits_40; - var $hold_40; - var $have_44; - var $next_44; - HEAP32[$29 >> 2] = $160; - HEAP32[$mode >> 2] = 22; - var $ret_5_ph = $ret_4; - var $next_45_ph = $next_44; - var $have_45_ph = $have_44; - var $hold_41_ph = $hold_40; - var $bits_41_ph = $bits_40; - __label__ = 234; - break; - } - } while (0); - do { - if (__label__ == 94) { - var $bits_10; - var $hold_10; - var $have_13; - var $next_13; - do { - if ((HEAP32[$17 >> 2] & 4096 | 0) == 0) { - var $108 = HEAP32[$18 >> 2]; - if (($108 | 0) == 0) { - var $next_14 = $next_13; - var $have_14 = $have_13; - break; - } - HEAP32[($108 + 36 | 0) >> 2] = 0; - var $next_14 = $next_13; - var $have_14 = $have_13; - } else { - if (($have_13 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_13; - var $have_58 = 0; - var $hold_54 = $hold_10; - var $bits_54 = $bits_10; - var $out_4 = $out_0; - break $_$12; - } - var $copy_2 = 0; - while (1) { - var $copy_2; - var $inc443 = $copy_2 + 1 | 0; - var $100 = HEAP8[$next_13 + $copy_2 | 0]; - var $101 = HEAP32[$18 >> 2]; - do { - if (!(($101 | 0) == 0)) { - var $comment = $101 + 36 | 0; - if ((HEAP32[$comment >> 2] | 0) == 0) { - break; - } - var $103 = HEAPU32[$21 >> 2]; - if (!($103 >>> 0 < HEAPU32[($101 + 40 | 0) >> 2] >>> 0)) { - break; - } - HEAP32[$21 >> 2] = $103 + 1 | 0; - HEAP8[HEAP32[$comment >> 2] + $103 | 0] = $100; - } - } while (0); - var $tobool467 = $100 << 24 >> 24 != 0; - if (!($tobool467 & $inc443 >>> 0 < $have_13 >>> 0)) { - break; - } - var $copy_2 = $inc443; - } - if (!((HEAP32[$17 >> 2] & 512 | 0) == 0)) { - HEAP32[$16 >> 2] = _crc32(HEAP32[$16 >> 2], $next_13, $inc443); - } - var $sub481 = $have_13 - $inc443 | 0; - var $add_ptr482 = $next_13 + $inc443 | 0; - if ($tobool467) { - var $ret_8 = $ret_0; - var $next_58 = $add_ptr482; - var $have_58 = $sub481; - var $hold_54 = $hold_10; - var $bits_54 = $bits_10; - var $out_4 = $out_0; - break $_$12; - } - var $next_14 = $add_ptr482; - var $have_14 = $sub481; - } - } while (0); - var $have_14; - var $next_14; - HEAP32[$mode >> 2] = 8; - var $next_15 = $next_14; - var $have_15 = $have_14; - var $hold_11 = $hold_10; - var $bits_11 = $bits_10; - __label__ = 107; - break; - } else if (__label__ == 234) { - var $bits_41_ph; - var $hold_41_ph; - var $have_45_ph; - var $next_45_ph; - var $ret_5_ph; - var $sub1393 = (1 << HEAP32[$47 >> 2]) - 1 | 0; - var $162 = HEAPU32[$48 >> 2]; - var $next_45 = $next_45_ph; - var $have_45 = $have_45_ph; - var $hold_41 = $hold_41_ph; - var $bits_41 = $bits_41_ph; - while (1) { - var $bits_41; - var $hold_41; - var $have_45; - var $next_45; - var $and1394 = $sub1393 & $hold_41; - var $tmp16 = HEAPU8[$162 + ($and1394 << 2) + 1 | 0]; - var $conv1398 = $tmp16 & 255; - if (!($conv1398 >>> 0 > $bits_41 >>> 0)) { - break; - } - if (($have_45 | 0) == 0) { - var $ret_8 = $ret_5_ph; - var $next_58 = $next_45; - var $have_58 = 0; - var $hold_54 = $hold_41; - var $bits_54 = $bits_41; - var $out_4 = $out_0; - break $_$12; - } - var $add1412 = ((HEAPU8[$next_45] & 255) << $bits_41) + $hold_41 | 0; - var $next_45 = $next_45 + 1 | 0; - var $have_45 = $have_45 - 1 | 0; - var $hold_41 = $add1412; - var $bits_41 = $bits_41 + 8 | 0; - } - var $tmp15 = HEAPU8[$162 + ($and1394 << 2) | 0]; - var $tmp17 = HEAPU16[($162 + ($and1394 << 2) + 2 | 0) >> 1]; - var $conv1418 = $tmp15 & 255; - if (($conv1418 & 240 | 0) == 0) { - var $conv1425 = $tmp17 & 65535; - var $sub1432 = (1 << ($conv1398 + $conv1418 | 0)) - 1 | 0; - var $next_46 = $next_45; - var $have_46 = $have_45; - var $hold_42 = $hold_41; - var $bits_42 = $bits_41; - while (1) { - var $bits_42; - var $hold_42; - var $have_46; - var $next_46; - var $add1437 = (($hold_42 & $sub1432) >>> ($conv1398 >>> 0)) + $conv1425 | 0; - var $tmp13 = HEAPU8[$162 + ($add1437 << 2) + 1 | 0]; - if (!((($tmp13 & 255) + $conv1398 | 0) >>> 0 > $bits_42 >>> 0)) { - break; - } - if (($have_46 | 0) == 0) { - var $ret_8 = $ret_5_ph; - var $next_58 = $next_46; - var $have_58 = 0; - var $hold_54 = $hold_42; - var $bits_54 = $bits_42; - var $out_4 = $out_0; - break $_$12; - } - var $add1458 = ((HEAPU8[$next_46] & 255) << $bits_42) + $hold_42 | 0; - var $next_46 = $next_46 + 1 | 0; - var $have_46 = $have_46 - 1 | 0; - var $hold_42 = $add1458; - var $bits_42 = $bits_42 + 8 | 0; - } - var $tmp14 = HEAP16[($162 + ($add1437 << 2) + 2 | 0) >> 1]; - var $tmp12 = HEAP8[$162 + ($add1437 << 2) | 0]; - var $add1475 = HEAP32[$25 >> 2] + $conv1398 | 0; - HEAP32[$25 >> 2] = $add1475; - var $next_47 = $next_46; - var $have_47 = $have_46; - var $hold_43 = $hold_42 >>> ($conv1398 >>> 0); - var $bits_43 = $bits_42 - $conv1398 | 0; - var $here_09_1 = $tmp12; - var $here_110_1 = $tmp13; - var $here_211_1 = $tmp14; - var $166 = $add1475; - } else { - var $next_47 = $next_45; - var $have_47 = $have_45; - var $hold_43 = $hold_41; - var $bits_43 = $bits_41; - var $here_09_1 = $tmp15; - var $here_110_1 = $tmp16; - var $here_211_1 = $tmp17; - var $166 = HEAP32[$25 >> 2]; - } - var $166; - var $here_211_1; - var $here_110_1; - var $here_09_1; - var $bits_43; - var $hold_43; - var $have_47; - var $next_47; - var $conv1479 = $here_110_1 & 255; - var $shr1480 = $hold_43 >>> ($conv1479 >>> 0); - var $sub1483 = $bits_43 - $conv1479 | 0; - HEAP32[$25 >> 2] = $166 + $conv1479 | 0; - var $conv1491 = $here_09_1 & 255; - if (($conv1491 & 64 | 0) == 0) { - HEAP32[$30 >> 2] = $here_211_1 & 65535; - var $and1502 = $conv1491 & 15; - HEAP32[$28 >> 2] = $and1502; - HEAP32[$mode >> 2] = 23; - var $ret_6 = $ret_5_ph; - var $next_48 = $next_47; - var $have_48 = $have_47; - var $hold_44 = $shr1480; - var $bits_44 = $sub1483; - var $167 = $and1502; - __label__ = 248; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str1170 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_5_ph; - var $next_0_be = $next_47; - var $put_0_be = $put_0; - var $have_0_be = $have_47; - var $left_0_be = $left_0; - var $hold_0_be = $shr1480; - var $bits_0_be = $sub1483; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - } while (0); - $_$359 : do { - if (__label__ == 107) { - var $bits_11; - var $hold_11; - var $have_15; - var $next_15; - var $109 = HEAPU32[$17 >> 2]; - do { - if (!(($109 & 512 | 0) == 0)) { - var $next_16 = $next_15; - var $have_16 = $have_15; - var $hold_12 = $hold_11; - var $bits_12 = $bits_11; - while (1) { - var $bits_12; - var $hold_12; - var $have_16; - var $next_16; - if (!($bits_12 >>> 0 < 16)) { - break; - } - if (($have_16 | 0) == 0) { - var $ret_8 = $ret_0; - var $next_58 = $next_16; - var $have_58 = 0; - var $hold_54 = $hold_12; - var $bits_54 = $bits_12; - var $out_4 = $out_0; - break $_$12; - } - var $add515 = ((HEAPU8[$next_16] & 255) << $bits_12) + $hold_12 | 0; - var $next_16 = $next_16 + 1 | 0; - var $have_16 = $have_16 - 1 | 0; - var $hold_12 = $add515; - var $bits_12 = $bits_12 + 8 | 0; - } - if (($hold_12 | 0) == (HEAP32[$16 >> 2] & 65535 | 0)) { - var $next_17 = $next_16; - var $have_17 = $have_16; - var $hold_13 = 0; - var $bits_13 = 0; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str5102 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_16; - var $put_0_be = $put_0; - var $have_0_be = $have_16; - var $left_0_be = $left_0; - var $hold_0_be = $hold_12; - var $bits_0_be = $bits_12; - var $out_0_be = $out_0; - __label__ = 268; - break $_$359; - } - var $next_17 = $next_15; - var $have_17 = $have_15; - var $hold_13 = $hold_11; - var $bits_13 = $bits_11; - } while (0); - var $bits_13; - var $hold_13; - var $have_17; - var $next_17; - var $112 = HEAPU32[$18 >> 2]; - if (!(($112 | 0) == 0)) { - HEAP32[($112 + 44 | 0) >> 2] = $109 >>> 9 & 1; - HEAP32[(HEAP32[$18 >> 2] + 48 | 0) >> 2] = 1; - } - var $call545 = _crc32(0, 0, 0); - HEAP32[$16 >> 2] = $call545; - HEAP32[$adler >> 2] = $call545; - HEAP32[$mode >> 2] = 11; - var $ret_0_be = $ret_0; - var $next_0_be = $next_17; - var $put_0_be = $put_0; - var $have_0_be = $have_17; - var $left_0_be = $left_0; - var $hold_0_be = $hold_13; - var $bits_0_be = $bits_13; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (__label__ == 248) { - var $167; - var $bits_44; - var $hold_44; - var $have_48; - var $next_48; - var $ret_6; - if (($167 | 0) == 0) { - var $next_50 = $next_48; - var $have_50 = $have_48; - var $hold_46 = $hold_44; - var $bits_46 = $bits_44; - } else { - var $next_49 = $next_48; - var $have_49 = $have_48; - var $hold_45 = $hold_44; - var $bits_45 = $bits_44; - while (1) { - var $bits_45; - var $hold_45; - var $have_49; - var $next_49; - if (!($bits_45 >>> 0 < $167 >>> 0)) { - break; - } - if (($have_49 | 0) == 0) { - var $ret_8 = $ret_6; - var $next_58 = $next_49; - var $have_58 = 0; - var $hold_54 = $hold_45; - var $bits_54 = $bits_45; - var $out_4 = $out_0; - break $_$12; - } - var $add1524 = ((HEAPU8[$next_49] & 255) << $bits_45) + $hold_45 | 0; - var $next_49 = $next_49 + 1 | 0; - var $have_49 = $have_49 - 1 | 0; - var $hold_45 = $add1524; - var $bits_45 = $bits_45 + 8 | 0; - } - HEAP32[$30 >> 2] = HEAP32[$30 >> 2] + (((1 << $167) - 1 | 0) & $hold_45) | 0; - HEAP32[$25 >> 2] = HEAP32[$25 >> 2] + $167 | 0; - var $next_50 = $next_49; - var $have_50 = $have_49; - var $hold_46 = $hold_45 >>> ($167 >>> 0); - var $bits_46 = $bits_45 - $167 | 0; - } - var $bits_46; - var $hold_46; - var $have_50; - var $next_50; - HEAP32[$mode >> 2] = 24; - var $ret_7 = $ret_6; - var $next_51 = $next_50; - var $have_51 = $have_50; - var $hold_47 = $hold_46; - var $bits_47 = $bits_46; - __label__ = 254; - break; - } - } while (0); - $_$380 : do { - if (__label__ == 254) { - var $bits_47; - var $hold_47; - var $have_51; - var $next_51; - var $ret_7; - if (($left_0 | 0) == 0) { - var $ret_8 = $ret_7; - var $next_58 = $next_51; - var $have_58 = $have_51; - var $hold_54 = $hold_47; - var $bits_54 = $bits_47; - var $out_4 = $out_0; - break $_$12; - } - var $sub1554 = $out_0 - $left_0 | 0; - var $171 = HEAPU32[$30 >> 2]; - do { - if ($171 >>> 0 > $sub1554 >>> 0) { - var $sub1560 = $171 - $sub1554 | 0; - do { - if ($sub1560 >>> 0 > HEAPU32[$31 >> 2] >>> 0) { - if ((HEAP32[$32 >> 2] | 0) == 0) { - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str169 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_7; - var $next_0_be = $next_51; - var $put_0_be = $put_0; - var $have_0_be = $have_51; - var $left_0_be = $left_0; - var $hold_0_be = $hold_47; - var $bits_0_be = $bits_47; - var $out_0_be = $out_0; - break $_$380; - } - } while (0); - var $174 = HEAPU32[$33 >> 2]; - if ($sub1560 >>> 0 > $174 >>> 0) { - var $sub1574 = $sub1560 - $174 | 0; - var $from_0 = HEAP32[$34 >> 2] + (HEAP32[$35 >> 2] - $sub1574 | 0) | 0; - var $copy_7 = $sub1574; - } else { - var $from_0 = HEAP32[$34 >> 2] + ($174 - $sub1560 | 0) | 0; - var $copy_7 = $sub1560; - } - var $copy_7; - var $from_0; - var $178 = HEAPU32[$21 >> 2]; - if (!($copy_7 >>> 0 > $178 >>> 0)) { - var $from_1 = $from_0; - var $copy_8 = $copy_7; - var $180 = $178; - break; - } - var $from_1 = $from_0; - var $copy_8 = $178; - var $180 = $178; - } else { - var $179 = HEAP32[$21 >> 2]; - var $from_1 = $put_0 + (-$171 | 0) | 0; - var $copy_8 = $179; - var $180 = $179; - } - } while (0); - var $180; - var $copy_8; - var $from_1; - var $copy_9 = $copy_8 >>> 0 > $left_0 >>> 0 ? $left_0 : $copy_8; - HEAP32[$21 >> 2] = $180 - $copy_9 | 0; - var $181 = $copy_8 ^ -1; - var $182 = $left_0 ^ -1; - var $umax = $181 >>> 0 > $182 >>> 0 ? $181 : $182; - var $from_2 = $from_1; - var $put_1 = $put_0; - var $copy_10 = $copy_9; - while (1) { - var $copy_10; - var $put_1; - var $from_2; - HEAP8[$put_1] = HEAP8[$from_2]; - var $dec1605 = $copy_10 - 1 | 0; - if (($dec1605 | 0) == 0) { - break; - } - var $from_2 = $from_2 + 1 | 0; - var $put_1 = $put_1 + 1 | 0; - var $copy_10 = $dec1605; - } - var $sub1598 = $left_0 - $copy_9 | 0; - var $scevgep632 = $put_0 + ($umax ^ -1) | 0; - if (!((HEAP32[$21 >> 2] | 0) == 0)) { - var $ret_0_be = $ret_7; - var $next_0_be = $next_51; - var $put_0_be = $scevgep632; - var $have_0_be = $have_51; - var $left_0_be = $sub1598; - var $hold_0_be = $hold_47; - var $bits_0_be = $bits_47; - var $out_0_be = $out_0; - break; - } - HEAP32[$mode >> 2] = 20; - var $ret_0_be = $ret_7; - var $next_0_be = $next_51; - var $put_0_be = $scevgep632; - var $have_0_be = $have_51; - var $left_0_be = $sub1598; - var $hold_0_be = $hold_47; - var $bits_0_be = $bits_47; - var $out_0_be = $out_0; - } - } while (0); - var $out_0_be; - var $bits_0_be; - var $hold_0_be; - var $left_0_be; - var $have_0_be; - var $put_0_be; - var $next_0_be; - var $ret_0_be; - var $ret_0 = $ret_0_be; - var $next_0 = $next_0_be; - var $put_0 = $put_0_be; - var $have_0 = $have_0_be; - var $left_0 = $left_0_be; - var $hold_0 = $hold_0_be; - var $bits_0 = $bits_0_be; - var $out_0 = $out_0_be; - var $49 = HEAP32[$mode >> 2]; - } - var $out_4; - var $bits_54; - var $hold_54; - var $have_58; - var $next_58; - var $ret_8; - HEAP32[$next_out >> 2] = $put_0; - HEAP32[$avail_out >> 2] = $left_0; - HEAP32[$next_in >> 2] = $next_58; - HEAP32[$avail_in15 >> 2] = $have_58; - HEAP32[$11 >> 2] = $hold_54; - HEAP32[$13 >> 2] = $bits_54; - do { - if ((HEAP32[$35 >> 2] | 0) == 0) { - if (!(HEAPU32[$mode >> 2] >>> 0 < 26)) { - __label__ = 300; - break; - } - if (($out_4 | 0) == (HEAP32[$avail_out >> 2] | 0)) { - __label__ = 300; - break; - } - __label__ = 298; - break; - } else { - __label__ = 298; - } - } while (0); - do { - if (__label__ == 298) { - if ((_updatewindow($strm, $out_4) | 0) == 0) { - break; - } - HEAP32[$mode >> 2] = 30; - var $retval_0 = -4; - break $_$2; - } - } while (0); - var $202 = HEAPU32[$avail_in15 >> 2]; - var $203 = HEAPU32[$avail_out >> 2]; - var $sub1774 = $out_4 - $203 | 0; - var $total_in = $strm + 8 | 0; - HEAP32[$total_in >> 2] = ($10 - $202 | 0) + HEAP32[$total_in >> 2] | 0; - HEAP32[$total_out >> 2] = HEAP32[$total_out >> 2] + $sub1774 | 0; - HEAP32[$36 >> 2] = HEAP32[$36 >> 2] + $sub1774 | 0; - var $tobool1783 = ($out_4 | 0) == ($203 | 0); - if (!((HEAP32[$15 >> 2] | 0) == 0 | $tobool1783)) { - var $209 = HEAP32[$16 >> 2]; - var $add_ptr1791 = HEAP32[$next_out >> 2] + (-$sub1774 | 0) | 0; - if ((HEAP32[$17 >> 2] | 0) == 0) { - var $cond1800 = _adler32($209, $add_ptr1791, $sub1774); - } else { - var $cond1800 = _crc32($209, $add_ptr1791, $sub1774); - } - var $cond1800; - HEAP32[$16 >> 2] = $cond1800; - HEAP32[$adler >> 2] = $cond1800; - } - var $213 = HEAP32[$mode >> 2]; - if (($213 | 0) == 19) { - var $214 = 256; - } else { - var $214 = ($213 | 0) == 14 ? 256 : 0; - } - var $214; - HEAP32[($strm + 44 | 0) >> 2] = ((((HEAP32[$24 >> 2] | 0) != 0 ? 64 : 0) + HEAP32[$13 >> 2] | 0) + (($213 | 0) == 11 ? 128 : 0) | 0) + $214 | 0; - var $retval_0 = (($10 | 0) == ($202 | 0) & $tobool1783 | ($flush | 0) == 4) & ($ret_8 | 0) == 0 ? -5 : $ret_8; - } - } while (0); - var $retval_0; - STACKTOP = __stackBase__; - return $retval_0; -} -function _malloc($bytes) { - var __label__; - $_$2 : do { - if ($bytes >>> 0 < 245) { - if ($bytes >>> 0 < 11) { - var $8 = 16; - } else { - var $8 = ($bytes + 11 | 0) & -8; - } - var $8; - var $9 = $8 >>> 3; - var $10 = HEAPU32[(__gm_ | 0) >> 2]; - var $11 = $10 >>> ($9 >>> 0); - if (!(($11 & 3 | 0) == 0)) { - var $17 = ($11 & 1 ^ 1) + $9 | 0; - var $18 = $17 << 1; - var $20 = __gm_ + 40 + ($18 << 2) | 0; - var $21 = __gm_ + 40 + (($18 + 2 | 0) << 2) | 0; - var $22 = HEAPU32[$21 >> 2]; - var $23 = $22 + 8 | 0; - var $24 = HEAPU32[$23 >> 2]; - if (($20 | 0) == ($24 | 0)) { - HEAP32[(__gm_ | 0) >> 2] = $10 & (1 << $17 ^ -1); - } else { - if ($24 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[$21 >> 2] = $24; - HEAP32[($24 + 12 | 0) >> 2] = $20; - } - } - var $38 = $17 << 3; - HEAP32[($22 + 4 | 0) >> 2] = $38 | 3; - var $43 = $22 + ($38 | 4) | 0; - HEAP32[$43 >> 2] = HEAP32[$43 >> 2] | 1; - var $mem_0 = $23; - __label__ = 331; - break; - } - if (!($8 >>> 0 > HEAPU32[(__gm_ + 8 | 0) >> 2] >>> 0)) { - var $nb_0 = $8; - __label__ = 155; - break; - } - if (!(($11 | 0) == 0)) { - var $54 = 2 << $9; - var $57 = $11 << $9 & ($54 | (-$54 | 0)); - var $60 = ($57 & (-$57 | 0)) - 1 | 0; - var $62 = $60 >>> 12 & 16; - var $63 = $60 >>> ($62 >>> 0); - var $65 = $63 >>> 5 & 8; - var $66 = $63 >>> ($65 >>> 0); - var $68 = $66 >>> 2 & 4; - var $69 = $66 >>> ($68 >>> 0); - var $71 = $69 >>> 1 & 2; - var $72 = $69 >>> ($71 >>> 0); - var $74 = $72 >>> 1 & 1; - var $80 = ($65 | $62 | $68 | $71 | $74) + ($72 >>> ($74 >>> 0)) | 0; - var $81 = $80 << 1; - var $83 = __gm_ + 40 + ($81 << 2) | 0; - var $84 = __gm_ + 40 + (($81 + 2 | 0) << 2) | 0; - var $85 = HEAPU32[$84 >> 2]; - var $86 = $85 + 8 | 0; - var $87 = HEAPU32[$86 >> 2]; - if (($83 | 0) == ($87 | 0)) { - HEAP32[(__gm_ | 0) >> 2] = $10 & (1 << $80 ^ -1); - } else { - if ($87 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[$84 >> 2] = $87; - HEAP32[($87 + 12 | 0) >> 2] = $83; - } - } - var $101 = $80 << 3; - var $102 = $101 - $8 | 0; - HEAP32[($85 + 4 | 0) >> 2] = $8 | 3; - var $105 = $85; - var $107 = $105 + $8 | 0; - HEAP32[($105 + ($8 | 4) | 0) >> 2] = $102 | 1; - HEAP32[($105 + $101 | 0) >> 2] = $102; - var $113 = HEAPU32[(__gm_ + 8 | 0) >> 2]; - if (!(($113 | 0) == 0)) { - var $116 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $119 = $113 >>> 2 & 1073741822; - var $121 = __gm_ + 40 + ($119 << 2) | 0; - var $122 = HEAPU32[(__gm_ | 0) >> 2]; - var $123 = 1 << ($113 >>> 3); - do { - if (($122 & $123 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $122 | $123; - var $F4_0 = $121; - var $_pre_phi = __gm_ + 40 + (($119 + 2 | 0) << 2) | 0; - } else { - var $129 = __gm_ + 40 + (($119 + 2 | 0) << 2) | 0; - var $130 = HEAPU32[$129 >> 2]; - if (!($130 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F4_0 = $130; - var $_pre_phi = $129; - break; - } - _abort(); - } - } while (0); - var $_pre_phi; - var $F4_0; - HEAP32[$_pre_phi >> 2] = $116; - HEAP32[($F4_0 + 12 | 0) >> 2] = $116; - HEAP32[($116 + 8 | 0) >> 2] = $F4_0; - HEAP32[($116 + 12 | 0) >> 2] = $121; - } - HEAP32[(__gm_ + 8 | 0) >> 2] = $102; - HEAP32[(__gm_ + 20 | 0) >> 2] = $107; - var $mem_0 = $86; - __label__ = 331; - break; - } - var $142 = HEAP32[(__gm_ + 4 | 0) >> 2]; - if (($142 | 0) == 0) { - var $nb_0 = $8; - __label__ = 155; - break; - } - var $147 = ($142 & (-$142 | 0)) - 1 | 0; - var $149 = $147 >>> 12 & 16; - var $150 = $147 >>> ($149 >>> 0); - var $152 = $150 >>> 5 & 8; - var $153 = $150 >>> ($152 >>> 0); - var $155 = $153 >>> 2 & 4; - var $156 = $153 >>> ($155 >>> 0); - var $158 = $156 >>> 1 & 2; - var $159 = $156 >>> ($158 >>> 0); - var $161 = $159 >>> 1 & 1; - var $169 = HEAPU32[(__gm_ + 304 + ((($152 | $149 | $155 | $158 | $161) + ($159 >>> ($161 >>> 0)) | 0) << 2) | 0) >> 2]; - var $t_0_i = $169; - var $v_0_i = $169; - var $rsize_0_i = (HEAP32[($169 + 4 | 0) >> 2] & -8) - $8 | 0; - while (1) { - var $rsize_0_i; - var $v_0_i; - var $t_0_i; - var $176 = HEAP32[($t_0_i + 16 | 0) >> 2]; - if (($176 | 0) == 0) { - var $180 = HEAP32[($t_0_i + 20 | 0) >> 2]; - if (($180 | 0) == 0) { - break; - } - var $182 = $180; - } else { - var $182 = $176; - } - var $182; - var $186 = (HEAP32[($182 + 4 | 0) >> 2] & -8) - $8 | 0; - var $187 = $186 >>> 0 < $rsize_0_i >>> 0; - var $t_0_i = $182; - var $v_0_i = $187 ? $182 : $v_0_i; - var $rsize_0_i = $187 ? $186 : $rsize_0_i; - } - var $189 = $v_0_i; - var $190 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($189 >>> 0 < $190 >>> 0)) { - var $193 = $189 + $8 | 0; - var $194 = $193; - if (!($189 >>> 0 < $193 >>> 0)) { - break; - } - var $198 = HEAPU32[($v_0_i + 24 | 0) >> 2]; - var $200 = HEAPU32[($v_0_i + 12 | 0) >> 2]; - do { - if (($200 | 0) == ($v_0_i | 0)) { - var $212 = $v_0_i + 20 | 0; - var $213 = HEAP32[$212 >> 2]; - if (($213 | 0) == 0) { - var $216 = $v_0_i + 16 | 0; - var $217 = HEAP32[$216 >> 2]; - if (($217 | 0) == 0) { - var $R_1_i = 0; - break; - } - var $RP_0_i = $216; - var $R_0_i = $217; - } else { - var $RP_0_i = $212; - var $R_0_i = $213; - __label__ = 39; - } - while (1) { - var $R_0_i; - var $RP_0_i; - var $219 = $R_0_i + 20 | 0; - var $220 = HEAP32[$219 >> 2]; - if (!(($220 | 0) == 0)) { - var $RP_0_i = $219; - var $R_0_i = $220; - continue; - } - var $223 = $R_0_i + 16 | 0; - var $224 = HEAPU32[$223 >> 2]; - if (($224 | 0) == 0) { - break; - } - var $RP_0_i = $223; - var $R_0_i = $224; - } - if ($RP_0_i >>> 0 < $190 >>> 0) { - _abort(); - } else { - HEAP32[$RP_0_i >> 2] = 0; - var $R_1_i = $R_0_i; - } - } else { - var $204 = HEAPU32[($v_0_i + 8 | 0) >> 2]; - if ($204 >>> 0 < $190 >>> 0) { - _abort(); - } else { - HEAP32[($204 + 12 | 0) >> 2] = $200; - HEAP32[($200 + 8 | 0) >> 2] = $204; - var $R_1_i = $200; - } - } - } while (0); - var $R_1_i; - $_$62 : do { - if (!(($198 | 0) == 0)) { - var $234 = $v_0_i + 28 | 0; - var $236 = __gm_ + 304 + (HEAP32[$234 >> 2] << 2) | 0; - do { - if (($v_0_i | 0) == (HEAP32[$236 >> 2] | 0)) { - HEAP32[$236 >> 2] = $R_1_i; - if (!(($R_1_i | 0) == 0)) { - break; - } - HEAP32[(__gm_ + 4 | 0) >> 2] = HEAP32[(__gm_ + 4 | 0) >> 2] & (1 << HEAP32[$234 >> 2] ^ -1); - break $_$62; - } - if ($198 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - var $250 = $198 + 16 | 0; - if ((HEAP32[$250 >> 2] | 0) == ($v_0_i | 0)) { - HEAP32[$250 >> 2] = $R_1_i; - } else { - HEAP32[($198 + 20 | 0) >> 2] = $R_1_i; - } - if (($R_1_i | 0) == 0) { - break $_$62; - } - } - } while (0); - if ($R_1_i >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i + 24 | 0) >> 2] = $198; - var $266 = HEAPU32[($v_0_i + 16 | 0) >> 2]; - if (!(($266 | 0) == 0)) { - if ($266 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i + 16 | 0) >> 2] = $266; - HEAP32[($266 + 24 | 0) >> 2] = $R_1_i; - } - } - var $278 = HEAPU32[($v_0_i + 20 | 0) >> 2]; - if (($278 | 0) == 0) { - break; - } - if ($278 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i + 20 | 0) >> 2] = $278; - HEAP32[($278 + 24 | 0) >> 2] = $R_1_i; - } - } - } - } while (0); - if ($rsize_0_i >>> 0 < 16) { - var $292 = $rsize_0_i + $8 | 0; - HEAP32[($v_0_i + 4 | 0) >> 2] = $292 | 3; - var $296 = $189 + ($292 + 4 | 0) | 0; - HEAP32[$296 >> 2] = HEAP32[$296 >> 2] | 1; - } else { - HEAP32[($v_0_i + 4 | 0) >> 2] = $8 | 3; - HEAP32[($189 + ($8 | 4) | 0) >> 2] = $rsize_0_i | 1; - HEAP32[($189 + ($rsize_0_i + $8 | 0) | 0) >> 2] = $rsize_0_i; - var $307 = HEAPU32[(__gm_ + 8 | 0) >> 2]; - if (!(($307 | 0) == 0)) { - var $310 = HEAPU32[(__gm_ + 20 | 0) >> 2]; - var $313 = $307 >>> 2 & 1073741822; - var $315 = __gm_ + 40 + ($313 << 2) | 0; - var $316 = HEAPU32[(__gm_ | 0) >> 2]; - var $317 = 1 << ($307 >>> 3); - do { - if (($316 & $317 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $316 | $317; - var $F1_0_i = $315; - var $_pre_phi_i = __gm_ + 40 + (($313 + 2 | 0) << 2) | 0; - } else { - var $323 = __gm_ + 40 + (($313 + 2 | 0) << 2) | 0; - var $324 = HEAPU32[$323 >> 2]; - if (!($324 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F1_0_i = $324; - var $_pre_phi_i = $323; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i; - var $F1_0_i; - HEAP32[$_pre_phi_i >> 2] = $310; - HEAP32[($F1_0_i + 12 | 0) >> 2] = $310; - HEAP32[($310 + 8 | 0) >> 2] = $F1_0_i; - HEAP32[($310 + 12 | 0) >> 2] = $315; - } - HEAP32[(__gm_ + 8 | 0) >> 2] = $rsize_0_i; - HEAP32[(__gm_ + 20 | 0) >> 2] = $194; - } - var $335 = $v_0_i + 8 | 0; - if (($335 | 0) == 0) { - var $nb_0 = $8; - __label__ = 155; - break $_$2; - } - var $mem_0 = $335; - __label__ = 331; - break $_$2; - } - } while (0); - _abort(); - } else { - if ($bytes >>> 0 > 4294967231) { - var $nb_0 = -1; - __label__ = 155; - break; - } - var $341 = $bytes + 11 | 0; - var $342 = $341 & -8; - var $343 = HEAPU32[(__gm_ + 4 | 0) >> 2]; - if (($343 | 0) == 0) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $346 = -$342 | 0; - var $347 = $341 >>> 8; - do { - if (($347 | 0) == 0) { - var $idx_0_i = 0; - } else { - if ($342 >>> 0 > 16777215) { - var $idx_0_i = 31; - break; - } - var $354 = ($347 + 1048320 | 0) >>> 16 & 8; - var $355 = $347 << $354; - var $358 = ($355 + 520192 | 0) >>> 16 & 4; - var $359 = $355 << $358; - var $362 = ($359 + 245760 | 0) >>> 16 & 2; - var $368 = (14 - ($358 | $354 | $362) | 0) + ($359 << $362 >>> 15) | 0; - var $idx_0_i = $342 >>> (($368 + 7 | 0) >>> 0) & 1 | $368 << 1; - } - } while (0); - var $idx_0_i; - var $376 = HEAPU32[(__gm_ + 304 + ($idx_0_i << 2) | 0) >> 2]; - $_$110 : do { - if (($376 | 0) == 0) { - var $v_2_i = 0; - var $rsize_2_i = $346; - var $t_1_i = 0; - } else { - if (($idx_0_i | 0) == 31) { - var $384 = 0; - } else { - var $384 = 25 - ($idx_0_i >>> 1) | 0; - } - var $384; - var $v_0_i15 = 0; - var $rsize_0_i14 = $346; - var $t_0_i13 = $376; - var $sizebits_0_i = $342 << $384; - var $rst_0_i = 0; - while (1) { - var $rst_0_i; - var $sizebits_0_i; - var $t_0_i13; - var $rsize_0_i14; - var $v_0_i15; - var $389 = HEAP32[($t_0_i13 + 4 | 0) >> 2] & -8; - var $390 = $389 - $342 | 0; - if ($390 >>> 0 < $rsize_0_i14 >>> 0) { - if (($389 | 0) == ($342 | 0)) { - var $v_2_i = $t_0_i13; - var $rsize_2_i = $390; - var $t_1_i = $t_0_i13; - break $_$110; - } - var $v_1_i = $t_0_i13; - var $rsize_1_i = $390; - } else { - var $v_1_i = $v_0_i15; - var $rsize_1_i = $rsize_0_i14; - } - var $rsize_1_i; - var $v_1_i; - var $396 = HEAPU32[($t_0_i13 + 20 | 0) >> 2]; - var $399 = HEAPU32[($t_0_i13 + 16 + ($sizebits_0_i >>> 31 << 2) | 0) >> 2]; - var $rst_1_i = ($396 | 0) == 0 | ($396 | 0) == ($399 | 0) ? $rst_0_i : $396; - if (($399 | 0) == 0) { - var $v_2_i = $v_1_i; - var $rsize_2_i = $rsize_1_i; - var $t_1_i = $rst_1_i; - break $_$110; - } - var $v_0_i15 = $v_1_i; - var $rsize_0_i14 = $rsize_1_i; - var $t_0_i13 = $399; - var $sizebits_0_i = $sizebits_0_i << 1; - var $rst_0_i = $rst_1_i; - } - } - } while (0); - var $t_1_i; - var $rsize_2_i; - var $v_2_i; - if (($t_1_i | 0) == 0 & ($v_2_i | 0) == 0) { - var $407 = 2 << $idx_0_i; - var $410 = $343 & ($407 | (-$407 | 0)); - if (($410 | 0) == 0) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $415 = ($410 & (-$410 | 0)) - 1 | 0; - var $417 = $415 >>> 12 & 16; - var $418 = $415 >>> ($417 >>> 0); - var $420 = $418 >>> 5 & 8; - var $421 = $418 >>> ($420 >>> 0); - var $423 = $421 >>> 2 & 4; - var $424 = $421 >>> ($423 >>> 0); - var $426 = $424 >>> 1 & 2; - var $427 = $424 >>> ($426 >>> 0); - var $429 = $427 >>> 1 & 1; - var $t_2_ph_i = HEAP32[(__gm_ + 304 + ((($420 | $417 | $423 | $426 | $429) + ($427 >>> ($429 >>> 0)) | 0) << 2) | 0) >> 2]; - } else { - var $t_2_ph_i = $t_1_i; - } - var $t_2_ph_i; - $_$125 : do { - if (($t_2_ph_i | 0) == 0) { - var $rsize_3_lcssa_i = $rsize_2_i; - var $v_3_lcssa_i = $v_2_i; - } else { - var $t_224_i = $t_2_ph_i; - var $rsize_325_i = $rsize_2_i; - var $v_326_i = $v_2_i; - while (1) { - var $v_326_i; - var $rsize_325_i; - var $t_224_i; - var $442 = (HEAP32[($t_224_i + 4 | 0) >> 2] & -8) - $342 | 0; - var $443 = $442 >>> 0 < $rsize_325_i >>> 0; - var $_rsize_3_i = $443 ? $442 : $rsize_325_i; - var $t_2_v_3_i = $443 ? $t_224_i : $v_326_i; - var $445 = HEAPU32[($t_224_i + 16 | 0) >> 2]; - if (!(($445 | 0) == 0)) { - var $t_224_i = $445; - var $rsize_325_i = $_rsize_3_i; - var $v_326_i = $t_2_v_3_i; - continue; - } - var $448 = HEAPU32[($t_224_i + 20 | 0) >> 2]; - if (($448 | 0) == 0) { - var $rsize_3_lcssa_i = $_rsize_3_i; - var $v_3_lcssa_i = $t_2_v_3_i; - break $_$125; - } - var $t_224_i = $448; - var $rsize_325_i = $_rsize_3_i; - var $v_326_i = $t_2_v_3_i; - } - } - } while (0); - var $v_3_lcssa_i; - var $rsize_3_lcssa_i; - if (($v_3_lcssa_i | 0) == 0) { - var $nb_0 = $342; - __label__ = 155; - break; - } - if (!($rsize_3_lcssa_i >>> 0 < (HEAP32[(__gm_ + 8 | 0) >> 2] - $342 | 0) >>> 0)) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $456 = $v_3_lcssa_i; - var $457 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($456 >>> 0 < $457 >>> 0)) { - var $460 = $456 + $342 | 0; - var $461 = $460; - if (!($456 >>> 0 < $460 >>> 0)) { - break; - } - var $465 = HEAPU32[($v_3_lcssa_i + 24 | 0) >> 2]; - var $467 = HEAPU32[($v_3_lcssa_i + 12 | 0) >> 2]; - do { - if (($467 | 0) == ($v_3_lcssa_i | 0)) { - var $479 = $v_3_lcssa_i + 20 | 0; - var $480 = HEAP32[$479 >> 2]; - if (($480 | 0) == 0) { - var $483 = $v_3_lcssa_i + 16 | 0; - var $484 = HEAP32[$483 >> 2]; - if (($484 | 0) == 0) { - var $R_1_i19 = 0; - break; - } - var $RP_0_i17 = $483; - var $R_0_i16 = $484; - } else { - var $RP_0_i17 = $479; - var $R_0_i16 = $480; - __label__ = 103; - } - while (1) { - var $R_0_i16; - var $RP_0_i17; - var $486 = $R_0_i16 + 20 | 0; - var $487 = HEAP32[$486 >> 2]; - if (!(($487 | 0) == 0)) { - var $RP_0_i17 = $486; - var $R_0_i16 = $487; - continue; - } - var $490 = $R_0_i16 + 16 | 0; - var $491 = HEAPU32[$490 >> 2]; - if (($491 | 0) == 0) { - break; - } - var $RP_0_i17 = $490; - var $R_0_i16 = $491; - } - if ($RP_0_i17 >>> 0 < $457 >>> 0) { - _abort(); - } else { - HEAP32[$RP_0_i17 >> 2] = 0; - var $R_1_i19 = $R_0_i16; - } - } else { - var $471 = HEAPU32[($v_3_lcssa_i + 8 | 0) >> 2]; - if ($471 >>> 0 < $457 >>> 0) { - _abort(); - } else { - HEAP32[($471 + 12 | 0) >> 2] = $467; - HEAP32[($467 + 8 | 0) >> 2] = $471; - var $R_1_i19 = $467; - } - } - } while (0); - var $R_1_i19; - $_$151 : do { - if (!(($465 | 0) == 0)) { - var $501 = $v_3_lcssa_i + 28 | 0; - var $503 = __gm_ + 304 + (HEAP32[$501 >> 2] << 2) | 0; - do { - if (($v_3_lcssa_i | 0) == (HEAP32[$503 >> 2] | 0)) { - HEAP32[$503 >> 2] = $R_1_i19; - if (!(($R_1_i19 | 0) == 0)) { - break; - } - HEAP32[(__gm_ + 4 | 0) >> 2] = HEAP32[(__gm_ + 4 | 0) >> 2] & (1 << HEAP32[$501 >> 2] ^ -1); - break $_$151; - } - if ($465 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - var $517 = $465 + 16 | 0; - if ((HEAP32[$517 >> 2] | 0) == ($v_3_lcssa_i | 0)) { - HEAP32[$517 >> 2] = $R_1_i19; - } else { - HEAP32[($465 + 20 | 0) >> 2] = $R_1_i19; - } - if (($R_1_i19 | 0) == 0) { - break $_$151; - } - } - } while (0); - if ($R_1_i19 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i19 + 24 | 0) >> 2] = $465; - var $533 = HEAPU32[($v_3_lcssa_i + 16 | 0) >> 2]; - if (!(($533 | 0) == 0)) { - if ($533 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i19 + 16 | 0) >> 2] = $533; - HEAP32[($533 + 24 | 0) >> 2] = $R_1_i19; - } - } - var $545 = HEAPU32[($v_3_lcssa_i + 20 | 0) >> 2]; - if (($545 | 0) == 0) { - break; - } - if ($545 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i19 + 20 | 0) >> 2] = $545; - HEAP32[($545 + 24 | 0) >> 2] = $R_1_i19; - } - } - } - } while (0); - $_$179 : do { - if ($rsize_3_lcssa_i >>> 0 < 16) { - var $559 = $rsize_3_lcssa_i + $342 | 0; - HEAP32[($v_3_lcssa_i + 4 | 0) >> 2] = $559 | 3; - var $563 = $456 + ($559 + 4 | 0) | 0; - HEAP32[$563 >> 2] = HEAP32[$563 >> 2] | 1; - } else { - HEAP32[($v_3_lcssa_i + 4 | 0) >> 2] = $342 | 3; - HEAP32[($456 + ($342 | 4) | 0) >> 2] = $rsize_3_lcssa_i | 1; - HEAP32[($456 + ($rsize_3_lcssa_i + $342 | 0) | 0) >> 2] = $rsize_3_lcssa_i; - if ($rsize_3_lcssa_i >>> 0 < 256) { - var $578 = $rsize_3_lcssa_i >>> 2 & 1073741822; - var $580 = __gm_ + 40 + ($578 << 2) | 0; - var $581 = HEAPU32[(__gm_ | 0) >> 2]; - var $582 = 1 << ($rsize_3_lcssa_i >>> 3); - do { - if (($581 & $582 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $581 | $582; - var $F5_0_i = $580; - var $_pre_phi_i25 = __gm_ + 40 + (($578 + 2 | 0) << 2) | 0; - } else { - var $588 = __gm_ + 40 + (($578 + 2 | 0) << 2) | 0; - var $589 = HEAPU32[$588 >> 2]; - if (!($589 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F5_0_i = $589; - var $_pre_phi_i25 = $588; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i25; - var $F5_0_i; - HEAP32[$_pre_phi_i25 >> 2] = $461; - HEAP32[($F5_0_i + 12 | 0) >> 2] = $461; - HEAP32[($456 + ($342 + 8 | 0) | 0) >> 2] = $F5_0_i; - HEAP32[($456 + ($342 + 12 | 0) | 0) >> 2] = $580; - } else { - var $601 = $460; - var $602 = $rsize_3_lcssa_i >>> 8; - do { - if (($602 | 0) == 0) { - var $I7_0_i = 0; - } else { - if ($rsize_3_lcssa_i >>> 0 > 16777215) { - var $I7_0_i = 31; - break; - } - var $609 = ($602 + 1048320 | 0) >>> 16 & 8; - var $610 = $602 << $609; - var $613 = ($610 + 520192 | 0) >>> 16 & 4; - var $614 = $610 << $613; - var $617 = ($614 + 245760 | 0) >>> 16 & 2; - var $623 = (14 - ($613 | $609 | $617) | 0) + ($614 << $617 >>> 15) | 0; - var $I7_0_i = $rsize_3_lcssa_i >>> (($623 + 7 | 0) >>> 0) & 1 | $623 << 1; - } - } while (0); - var $I7_0_i; - var $630 = __gm_ + 304 + ($I7_0_i << 2) | 0; - HEAP32[($456 + ($342 + 28 | 0) | 0) >> 2] = $I7_0_i; - HEAP32[($456 + ($342 + 20 | 0) | 0) >> 2] = 0; - HEAP32[($456 + ($342 + 16 | 0) | 0) >> 2] = 0; - var $637 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $638 = 1 << $I7_0_i; - if (($637 & $638 | 0) == 0) { - HEAP32[(__gm_ + 4 | 0) >> 2] = $637 | $638; - HEAP32[$630 >> 2] = $601; - HEAP32[($456 + ($342 + 24 | 0) | 0) >> 2] = $630; - HEAP32[($456 + ($342 + 12 | 0) | 0) >> 2] = $601; - HEAP32[($456 + ($342 + 8 | 0) | 0) >> 2] = $601; - } else { - if (($I7_0_i | 0) == 31) { - var $657 = 0; - } else { - var $657 = 25 - ($I7_0_i >>> 1) | 0; - } - var $657; - var $K12_0_i = $rsize_3_lcssa_i << $657; - var $T_0_i = HEAP32[$630 >> 2]; - while (1) { - var $T_0_i; - var $K12_0_i; - if ((HEAP32[($T_0_i + 4 | 0) >> 2] & -8 | 0) == ($rsize_3_lcssa_i | 0)) { - var $683 = $T_0_i + 8 | 0; - var $684 = HEAPU32[$683 >> 2]; - var $686 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($T_0_i >>> 0 < $686 >>> 0)) { - if ($684 >>> 0 < $686 >>> 0) { - break; - } - HEAP32[($684 + 12 | 0) >> 2] = $601; - HEAP32[$683 >> 2] = $601; - HEAP32[($456 + ($342 + 8 | 0) | 0) >> 2] = $684; - HEAP32[($456 + ($342 + 12 | 0) | 0) >> 2] = $T_0_i; - HEAP32[($456 + ($342 + 24 | 0) | 0) >> 2] = 0; - break $_$179; - } - } while (0); - _abort(); - } else { - var $666 = $T_0_i + 16 + ($K12_0_i >>> 31 << 2) | 0; - var $667 = HEAPU32[$666 >> 2]; - if (!(($667 | 0) == 0)) { - var $K12_0_i = $K12_0_i << 1; - var $T_0_i = $667; - continue; - } - if (!($666 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - HEAP32[$666 >> 2] = $601; - HEAP32[($456 + ($342 + 24 | 0) | 0) >> 2] = $T_0_i; - HEAP32[($456 + ($342 + 12 | 0) | 0) >> 2] = $601; - HEAP32[($456 + ($342 + 8 | 0) | 0) >> 2] = $601; - break $_$179; - } - _abort(); - } - } - } - } - } - } while (0); - var $700 = $v_3_lcssa_i + 8 | 0; - if (($700 | 0) == 0) { - var $nb_0 = $342; - __label__ = 155; - break $_$2; - } - var $mem_0 = $700; - __label__ = 331; - break $_$2; - } - } while (0); - _abort(); - } - } while (0); - $_$215 : do { - if (__label__ == 155) { - var $nb_0; - var $703 = HEAPU32[(__gm_ + 8 | 0) >> 2]; - if ($nb_0 >>> 0 > $703 >>> 0) { - var $732 = HEAPU32[(__gm_ + 12 | 0) >> 2]; - if ($nb_0 >>> 0 < $732 >>> 0) { - var $735 = $732 - $nb_0 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $735; - var $736 = HEAPU32[(__gm_ + 24 | 0) >> 2]; - var $737 = $736; - HEAP32[(__gm_ + 24 | 0) >> 2] = $737 + $nb_0 | 0; - HEAP32[($737 + ($nb_0 + 4 | 0) | 0) >> 2] = $735 | 1; - HEAP32[($736 + 4 | 0) >> 2] = $nb_0 | 3; - var $mem_0 = $736 + 8 | 0; - } else { - do { - if ((HEAP32[(_mparams | 0) >> 2] | 0) == 0) { - if (!((HEAP32[(_mparams | 0) >> 2] | 0) == 0)) { - break; - } - var $754 = _sysconf(8); - if ((($754 - 1 | 0) & $754 | 0) == 0) { - HEAP32[(_mparams + 8 | 0) >> 2] = $754; - HEAP32[(_mparams + 4 | 0) >> 2] = $754; - HEAP32[(_mparams + 12 | 0) >> 2] = -1; - HEAP32[(_mparams + 16 | 0) >> 2] = 2097152; - HEAP32[(_mparams + 20 | 0) >> 2] = 0; - HEAP32[(__gm_ + 440 | 0) >> 2] = 0; - var $762 = _time(0) & -16 ^ 1431655768; - HEAP32[(_mparams | 0) >> 2] = $762; - } else { - _abort(); - } - } - } while (0); - $_$234 : do { - if ((HEAP32[(__gm_ + 440 | 0) >> 2] & 4 | 0) == 0) { - var $767 = HEAP32[(__gm_ + 24 | 0) >> 2]; - $_$236 : do { - if (!(($767 | 0) == 0)) { - var $770 = $767; - var $sp_0_i_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i_i; - var $772 = $sp_0_i_i | 0; - var $773 = HEAPU32[$772 >> 2]; - if (!($773 >>> 0 > $770 >>> 0)) { - var $776 = $sp_0_i_i + 4 | 0; - if (($773 + HEAP32[$776 >> 2] | 0) >>> 0 > $770 >>> 0) { - break; - } - } - var $782 = HEAPU32[($sp_0_i_i + 8 | 0) >> 2]; - if (($782 | 0) == 0) { - __label__ = 174; - break $_$236; - } - var $sp_0_i_i = $782; - } - if (($sp_0_i_i | 0) == 0) { - __label__ = 174; - break; - } - var $811 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $816 = ((($nb_0 + 47 | 0) - HEAP32[(__gm_ + 12 | 0) >> 2] | 0) + $811 | 0) & (-$811 | 0); - if (!($816 >>> 0 < 2147483647)) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $819 = _sbrk($816); - var $823 = ($819 | 0) == (HEAP32[$772 >> 2] + HEAP32[$776 >> 2] | 0 | 0); - var $tbase_0_i = $823 ? $819 : -1; - var $tsize_0_i = $823 ? $816 : 0; - var $asize_1_i = $816; - var $br_0_i = $819; - __label__ = 181; - break; - } - __label__ = 174; - } while (0); - do { - if (__label__ == 174) { - var $785 = _sbrk(0); - if (($785 | 0) == -1) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $788 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $792 = (($nb_0 + 47 | 0) + $788 | 0) & (-$788 | 0); - var $793 = $785; - var $794 = HEAP32[(_mparams + 4 | 0) >> 2]; - var $795 = $794 - 1 | 0; - if (($795 & $793 | 0) == 0) { - var $asize_0_i = $792; - } else { - var $asize_0_i = ($792 - $793 | 0) + (($795 + $793 | 0) & (-$794 | 0)) | 0; - } - var $asize_0_i; - if (!($asize_0_i >>> 0 < 2147483647)) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $807 = _sbrk($asize_0_i); - var $808 = ($807 | 0) == ($785 | 0); - var $tbase_0_i = $808 ? $785 : -1; - var $tsize_0_i = $808 ? $asize_0_i : 0; - var $asize_1_i = $asize_0_i; - var $br_0_i = $807; - __label__ = 181; - break; - } - } while (0); - $_$253 : do { - if (__label__ == 181) { - var $br_0_i; - var $asize_1_i; - var $tsize_0_i; - var $tbase_0_i; - var $825 = -$asize_1_i | 0; - if (!(($tbase_0_i | 0) == -1)) { - var $tsize_242_i = $tsize_0_i; - var $tbase_243_i = $tbase_0_i; - __label__ = 194; - break $_$234; - } - do { - if (($br_0_i | 0) != -1 & $asize_1_i >>> 0 < 2147483647) { - if (!($asize_1_i >>> 0 < ($nb_0 + 48 | 0) >>> 0)) { - var $asize_2_i = $asize_1_i; - break; - } - var $834 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $839 = ((($nb_0 + 47 | 0) - $asize_1_i | 0) + $834 | 0) & (-$834 | 0); - if (!($839 >>> 0 < 2147483647)) { - var $asize_2_i = $asize_1_i; - break; - } - if ((_sbrk($839) | 0) == -1) { - _sbrk($825); - var $tsize_0242932_ph_i = $tsize_0_i; - break $_$253; - } - var $asize_2_i = $839 + $asize_1_i | 0; - } else { - var $asize_2_i = $asize_1_i; - } - } while (0); - var $asize_2_i; - if (!(($br_0_i | 0) == -1)) { - var $tsize_242_i = $asize_2_i; - var $tbase_243_i = $br_0_i; - __label__ = 194; - break $_$234; - } - HEAP32[(__gm_ + 440 | 0) >> 2] = HEAP32[(__gm_ + 440 | 0) >> 2] | 4; - var $tsize_137_i = $tsize_0_i; - __label__ = 191; - break $_$234; - } - } while (0); - var $tsize_0242932_ph_i; - HEAP32[(__gm_ + 440 | 0) >> 2] = HEAP32[(__gm_ + 440 | 0) >> 2] | 4; - var $tsize_137_i = $tsize_0242932_ph_i; - __label__ = 191; - break; - } - var $tsize_137_i = 0; - __label__ = 191; - } while (0); - do { - if (__label__ == 191) { - var $tsize_137_i; - var $854 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $858 = (($nb_0 + 47 | 0) + $854 | 0) & (-$854 | 0); - if (!($858 >>> 0 < 2147483647)) { - __label__ = 330; - break; - } - var $861 = _sbrk($858); - var $862 = _sbrk(0); - if (!(($862 | 0) != -1 & ($861 | 0) != -1 & $861 >>> 0 < $862 >>> 0)) { - __label__ = 330; - break; - } - var $866 = $862 - $861 | 0; - var $868 = $866 >>> 0 > ($nb_0 + 40 | 0) >>> 0; - var $_tbase_1_i = $868 ? $861 : -1; - if (($_tbase_1_i | 0) == -1) { - __label__ = 330; - break; - } - var $tsize_242_i = $868 ? $866 : $tsize_137_i; - var $tbase_243_i = $_tbase_1_i; - __label__ = 194; - break; - } - } while (0); - do { - if (__label__ == 194) { - var $tbase_243_i; - var $tsize_242_i; - var $871 = HEAP32[(__gm_ + 432 | 0) >> 2] + $tsize_242_i | 0; - HEAP32[(__gm_ + 432 | 0) >> 2] = $871; - if ($871 >>> 0 > HEAPU32[(__gm_ + 436 | 0) >> 2] >>> 0) { - HEAP32[(__gm_ + 436 | 0) >> 2] = $871; - } - var $876 = HEAPU32[(__gm_ + 24 | 0) >> 2]; - $_$275 : do { - if (($876 | 0) == 0) { - var $879 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - if (($879 | 0) == 0 | $tbase_243_i >>> 0 < $879 >>> 0) { - HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i; - } - HEAP32[(__gm_ + 444 | 0) >> 2] = $tbase_243_i; - HEAP32[(__gm_ + 448 | 0) >> 2] = $tsize_242_i; - HEAP32[(__gm_ + 456 | 0) >> 2] = 0; - HEAP32[(__gm_ + 36 | 0) >> 2] = HEAP32[(_mparams | 0) >> 2]; - HEAP32[(__gm_ + 32 | 0) >> 2] = -1; - var $i_02_i_i = 0; - while (1) { - var $i_02_i_i; - var $886 = $i_02_i_i << 1; - var $888 = __gm_ + 40 + ($886 << 2) | 0; - HEAP32[(__gm_ + 40 + (($886 + 3 | 0) << 2) | 0) >> 2] = $888; - HEAP32[(__gm_ + 40 + (($886 + 2 | 0) << 2) | 0) >> 2] = $888; - var $891 = $i_02_i_i + 1 | 0; - if (($891 | 0) == 32) { - break; - } - var $i_02_i_i = $891; - } - var $893 = $tbase_243_i + 8 | 0; - if (($893 & 7 | 0) == 0) { - var $899 = 0; - } else { - var $899 = (-$893 | 0) & 7; - } - var $899; - var $903 = ($tsize_242_i - 40 | 0) - $899 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $tbase_243_i + $899 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $903; - HEAP32[($tbase_243_i + ($899 + 4 | 0) | 0) >> 2] = $903 | 1; - HEAP32[($tbase_243_i + ($tsize_242_i - 36 | 0) | 0) >> 2] = 40; - HEAP32[(__gm_ + 28 | 0) >> 2] = HEAP32[(_mparams + 16 | 0) >> 2]; - } else { - var $sp_0_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i; - if (($sp_0_i | 0) == 0) { - break; - } - var $913 = HEAPU32[($sp_0_i | 0) >> 2]; - var $914 = $sp_0_i + 4 | 0; - var $915 = HEAPU32[$914 >> 2]; - if (($tbase_243_i | 0) == ($913 + $915 | 0 | 0)) { - if (!((HEAP32[($sp_0_i + 12 | 0) >> 2] & 8 | 0) == 0)) { - break; - } - var $926 = $876; - if (!($926 >>> 0 >= $913 >>> 0 & $926 >>> 0 < $tbase_243_i >>> 0)) { - break; - } - HEAP32[$914 >> 2] = $915 + $tsize_242_i | 0; - var $931 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $933 = HEAP32[(__gm_ + 12 | 0) >> 2] + $tsize_242_i | 0; - var $934 = $931; - var $936 = $931 + 8 | 0; - if (($936 & 7 | 0) == 0) { - var $942 = 0; - } else { - var $942 = (-$936 | 0) & 7; - } - var $942; - var $945 = $933 - $942 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $934 + $942 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $945; - HEAP32[($934 + ($942 + 4 | 0) | 0) >> 2] = $945 | 1; - HEAP32[($934 + ($933 + 4 | 0) | 0) >> 2] = 40; - HEAP32[(__gm_ + 28 | 0) >> 2] = HEAP32[(_mparams + 16 | 0) >> 2]; - break $_$275; - } - var $sp_0_i = HEAP32[($sp_0_i + 8 | 0) >> 2]; - } - if ($tbase_243_i >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i; - } - var $955 = $tbase_243_i + $tsize_242_i | 0; - var $sp_1_i = __gm_ + 444 | 0; - while (1) { - var $sp_1_i; - if (($sp_1_i | 0) == 0) { - __label__ = 293; - break; - } - var $959 = $sp_1_i | 0; - if ((HEAP32[$959 >> 2] | 0) == ($955 | 0)) { - __label__ = 218; - break; - } - var $sp_1_i = HEAP32[($sp_1_i + 8 | 0) >> 2]; - } - do { - if (__label__ == 218) { - if (!((HEAP32[($sp_1_i + 12 | 0) >> 2] & 8 | 0) == 0)) { - break; - } - HEAP32[$959 >> 2] = $tbase_243_i; - var $970 = $sp_1_i + 4 | 0; - HEAP32[$970 >> 2] = HEAP32[$970 >> 2] + $tsize_242_i | 0; - var $974 = $tbase_243_i + 8 | 0; - if (($974 & 7 | 0) == 0) { - var $981 = 0; - } else { - var $981 = (-$974 | 0) & 7; - } - var $981; - var $984 = $tbase_243_i + ($tsize_242_i + 8 | 0) | 0; - if (($984 & 7 | 0) == 0) { - var $991 = 0; - } else { - var $991 = (-$984 | 0) & 7; - } - var $991; - var $992 = $tbase_243_i + ($991 + $tsize_242_i | 0) | 0; - var $993 = $992; - var $_sum_i16_i = $981 + $nb_0 | 0; - var $997 = $tbase_243_i + $_sum_i16_i | 0; - var $998 = $997; - var $999 = ($992 - ($tbase_243_i + $981 | 0) | 0) - $nb_0 | 0; - HEAP32[($tbase_243_i + ($981 + 4 | 0) | 0) >> 2] = $nb_0 | 3; - $_$314 : do { - if (($993 | 0) == (HEAP32[(__gm_ + 24 | 0) >> 2] | 0)) { - var $1007 = HEAP32[(__gm_ + 12 | 0) >> 2] + $999 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1007; - HEAP32[(__gm_ + 24 | 0) >> 2] = $998; - HEAP32[($tbase_243_i + ($_sum_i16_i + 4 | 0) | 0) >> 2] = $1007 | 1; - } else { - if (($993 | 0) == (HEAP32[(__gm_ + 20 | 0) >> 2] | 0)) { - var $1016 = HEAP32[(__gm_ + 8 | 0) >> 2] + $999 | 0; - HEAP32[(__gm_ + 8 | 0) >> 2] = $1016; - HEAP32[(__gm_ + 20 | 0) >> 2] = $998; - HEAP32[($tbase_243_i + ($_sum_i16_i + 4 | 0) | 0) >> 2] = $1016 | 1; - HEAP32[($tbase_243_i + ($1016 + $_sum_i16_i | 0) | 0) >> 2] = $1016; - } else { - var $_sum2_i18_i = $tsize_242_i + 4 | 0; - var $1025 = HEAPU32[($tbase_243_i + ($_sum2_i18_i + $991 | 0) | 0) >> 2]; - if (($1025 & 3 | 0) == 1) { - var $1029 = $1025 & -8; - var $1030 = $1025 >>> 3; - $_$322 : do { - if ($1025 >>> 0 < 256) { - var $1035 = HEAPU32[($tbase_243_i + (($991 | 8) + $tsize_242_i | 0) | 0) >> 2]; - var $1038 = HEAPU32[($tbase_243_i + (($tsize_242_i + 12 | 0) + $991 | 0) | 0) >> 2]; - if (($1035 | 0) == ($1038 | 0)) { - HEAP32[(__gm_ | 0) >> 2] = HEAP32[(__gm_ | 0) >> 2] & (1 << $1030 ^ -1); - } else { - var $1049 = __gm_ + 40 + (($1025 >>> 2 & 1073741822) << 2) | 0; - do { - if (($1035 | 0) == ($1049 | 0)) { - __label__ = 233; - } else { - if ($1035 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - __label__ = 236; - break; - } - __label__ = 233; - break; - } - } while (0); - do { - if (__label__ == 233) { - if (!(($1038 | 0) == ($1049 | 0))) { - if ($1038 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - break; - } - } - HEAP32[($1035 + 12 | 0) >> 2] = $1038; - HEAP32[($1038 + 8 | 0) >> 2] = $1035; - break $_$322; - } - } while (0); - _abort(); - } - } else { - var $1064 = $992; - var $1067 = HEAPU32[($tbase_243_i + (($991 | 24) + $tsize_242_i | 0) | 0) >> 2]; - var $1070 = HEAPU32[($tbase_243_i + (($tsize_242_i + 12 | 0) + $991 | 0) | 0) >> 2]; - do { - if (($1070 | 0) == ($1064 | 0)) { - var $_sum67_i_i = $991 | 16; - var $1085 = $tbase_243_i + ($_sum2_i18_i + $_sum67_i_i | 0) | 0; - var $1086 = HEAP32[$1085 >> 2]; - if (($1086 | 0) == 0) { - var $1090 = $tbase_243_i + ($_sum67_i_i + $tsize_242_i | 0) | 0; - var $1091 = HEAP32[$1090 >> 2]; - if (($1091 | 0) == 0) { - var $R_1_i_i = 0; - break; - } - var $RP_0_i_i = $1090; - var $R_0_i_i = $1091; - } else { - var $RP_0_i_i = $1085; - var $R_0_i_i = $1086; - __label__ = 243; - } - while (1) { - var $R_0_i_i; - var $RP_0_i_i; - var $1093 = $R_0_i_i + 20 | 0; - var $1094 = HEAP32[$1093 >> 2]; - if (!(($1094 | 0) == 0)) { - var $RP_0_i_i = $1093; - var $R_0_i_i = $1094; - continue; - } - var $1097 = $R_0_i_i + 16 | 0; - var $1098 = HEAPU32[$1097 >> 2]; - if (($1098 | 0) == 0) { - break; - } - var $RP_0_i_i = $1097; - var $R_0_i_i = $1098; - } - if ($RP_0_i_i >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[$RP_0_i_i >> 2] = 0; - var $R_1_i_i = $R_0_i_i; - } - } else { - var $1075 = HEAPU32[($tbase_243_i + (($991 | 8) + $tsize_242_i | 0) | 0) >> 2]; - if ($1075 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($1075 + 12 | 0) >> 2] = $1070; - HEAP32[($1070 + 8 | 0) >> 2] = $1075; - var $R_1_i_i = $1070; - } - } - } while (0); - var $R_1_i_i; - if (($1067 | 0) == 0) { - break; - } - var $1110 = $tbase_243_i + (($tsize_242_i + 28 | 0) + $991 | 0) | 0; - var $1112 = __gm_ + 304 + (HEAP32[$1110 >> 2] << 2) | 0; - do { - if (($1064 | 0) == (HEAP32[$1112 >> 2] | 0)) { - HEAP32[$1112 >> 2] = $R_1_i_i; - if (!(($R_1_i_i | 0) == 0)) { - break; - } - HEAP32[(__gm_ + 4 | 0) >> 2] = HEAP32[(__gm_ + 4 | 0) >> 2] & (1 << HEAP32[$1110 >> 2] ^ -1); - break $_$322; - } - if ($1067 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - var $1126 = $1067 + 16 | 0; - if ((HEAP32[$1126 >> 2] | 0) == ($1064 | 0)) { - HEAP32[$1126 >> 2] = $R_1_i_i; - } else { - HEAP32[($1067 + 20 | 0) >> 2] = $R_1_i_i; - } - if (($R_1_i_i | 0) == 0) { - break $_$322; - } - } - } while (0); - if ($R_1_i_i >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i_i + 24 | 0) >> 2] = $1067; - var $_sum3132_i_i = $991 | 16; - var $1143 = HEAPU32[($tbase_243_i + ($_sum3132_i_i + $tsize_242_i | 0) | 0) >> 2]; - if (!(($1143 | 0) == 0)) { - if ($1143 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i_i + 16 | 0) >> 2] = $1143; - HEAP32[($1143 + 24 | 0) >> 2] = $R_1_i_i; - } - } - var $1156 = HEAPU32[($tbase_243_i + ($_sum2_i18_i + $_sum3132_i_i | 0) | 0) >> 2]; - if (($1156 | 0) == 0) { - break; - } - if ($1156 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i_i + 20 | 0) >> 2] = $1156; - HEAP32[($1156 + 24 | 0) >> 2] = $R_1_i_i; - } - } - } - } while (0); - var $oldfirst_0_i_i = $tbase_243_i + (($1029 | $991) + $tsize_242_i | 0) | 0; - var $qsize_0_i_i = $1029 + $999 | 0; - } else { - var $oldfirst_0_i_i = $993; - var $qsize_0_i_i = $999; - } - var $qsize_0_i_i; - var $oldfirst_0_i_i; - var $1172 = $oldfirst_0_i_i + 4 | 0; - HEAP32[$1172 >> 2] = HEAP32[$1172 >> 2] & -2; - HEAP32[($tbase_243_i + ($_sum_i16_i + 4 | 0) | 0) >> 2] = $qsize_0_i_i | 1; - HEAP32[($tbase_243_i + ($qsize_0_i_i + $_sum_i16_i | 0) | 0) >> 2] = $qsize_0_i_i; - if ($qsize_0_i_i >>> 0 < 256) { - var $1184 = $qsize_0_i_i >>> 2 & 1073741822; - var $1186 = __gm_ + 40 + ($1184 << 2) | 0; - var $1187 = HEAPU32[(__gm_ | 0) >> 2]; - var $1188 = 1 << ($qsize_0_i_i >>> 3); - do { - if (($1187 & $1188 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $1187 | $1188; - var $F4_0_i_i = $1186; - var $_pre_phi_i20_i = __gm_ + 40 + (($1184 + 2 | 0) << 2) | 0; - } else { - var $1194 = __gm_ + 40 + (($1184 + 2 | 0) << 2) | 0; - var $1195 = HEAPU32[$1194 >> 2]; - if (!($1195 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F4_0_i_i = $1195; - var $_pre_phi_i20_i = $1194; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i20_i; - var $F4_0_i_i; - HEAP32[$_pre_phi_i20_i >> 2] = $998; - HEAP32[($F4_0_i_i + 12 | 0) >> 2] = $998; - HEAP32[($tbase_243_i + ($_sum_i16_i + 8 | 0) | 0) >> 2] = $F4_0_i_i; - HEAP32[($tbase_243_i + ($_sum_i16_i + 12 | 0) | 0) >> 2] = $1186; - } else { - var $1207 = $997; - var $1208 = $qsize_0_i_i >>> 8; - do { - if (($1208 | 0) == 0) { - var $I7_0_i_i = 0; - } else { - if ($qsize_0_i_i >>> 0 > 16777215) { - var $I7_0_i_i = 31; - break; - } - var $1215 = ($1208 + 1048320 | 0) >>> 16 & 8; - var $1216 = $1208 << $1215; - var $1219 = ($1216 + 520192 | 0) >>> 16 & 4; - var $1220 = $1216 << $1219; - var $1223 = ($1220 + 245760 | 0) >>> 16 & 2; - var $1229 = (14 - ($1219 | $1215 | $1223) | 0) + ($1220 << $1223 >>> 15) | 0; - var $I7_0_i_i = $qsize_0_i_i >>> (($1229 + 7 | 0) >>> 0) & 1 | $1229 << 1; - } - } while (0); - var $I7_0_i_i; - var $1236 = __gm_ + 304 + ($I7_0_i_i << 2) | 0; - HEAP32[($tbase_243_i + ($_sum_i16_i + 28 | 0) | 0) >> 2] = $I7_0_i_i; - HEAP32[($tbase_243_i + ($_sum_i16_i + 20 | 0) | 0) >> 2] = 0; - HEAP32[($tbase_243_i + ($_sum_i16_i + 16 | 0) | 0) >> 2] = 0; - var $1243 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1244 = 1 << $I7_0_i_i; - if (($1243 & $1244 | 0) == 0) { - HEAP32[(__gm_ + 4 | 0) >> 2] = $1243 | $1244; - HEAP32[$1236 >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 24 | 0) | 0) >> 2] = $1236; - HEAP32[($tbase_243_i + ($_sum_i16_i + 12 | 0) | 0) >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 8 | 0) | 0) >> 2] = $1207; - } else { - if (($I7_0_i_i | 0) == 31) { - var $1263 = 0; - } else { - var $1263 = 25 - ($I7_0_i_i >>> 1) | 0; - } - var $1263; - var $K8_0_i_i = $qsize_0_i_i << $1263; - var $T_0_i21_i = HEAP32[$1236 >> 2]; - while (1) { - var $T_0_i21_i; - var $K8_0_i_i; - if ((HEAP32[($T_0_i21_i + 4 | 0) >> 2] & -8 | 0) == ($qsize_0_i_i | 0)) { - var $1289 = $T_0_i21_i + 8 | 0; - var $1290 = HEAPU32[$1289 >> 2]; - var $1292 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($T_0_i21_i >>> 0 < $1292 >>> 0)) { - if ($1290 >>> 0 < $1292 >>> 0) { - break; - } - HEAP32[($1290 + 12 | 0) >> 2] = $1207; - HEAP32[$1289 >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 8 | 0) | 0) >> 2] = $1290; - HEAP32[($tbase_243_i + ($_sum_i16_i + 12 | 0) | 0) >> 2] = $T_0_i21_i; - HEAP32[($tbase_243_i + ($_sum_i16_i + 24 | 0) | 0) >> 2] = 0; - break $_$314; - } - } while (0); - _abort(); - } else { - var $1272 = $T_0_i21_i + 16 + ($K8_0_i_i >>> 31 << 2) | 0; - var $1273 = HEAPU32[$1272 >> 2]; - if (!(($1273 | 0) == 0)) { - var $K8_0_i_i = $K8_0_i_i << 1; - var $T_0_i21_i = $1273; - continue; - } - if (!($1272 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - HEAP32[$1272 >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 24 | 0) | 0) >> 2] = $T_0_i21_i; - HEAP32[($tbase_243_i + ($_sum_i16_i + 12 | 0) | 0) >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 8 | 0) | 0) >> 2] = $1207; - break $_$314; - } - _abort(); - } - } - } - } - } - } - } while (0); - var $mem_0 = $tbase_243_i + ($981 | 8) | 0; - break $_$215; - } - } while (0); - var $1306 = $876; - var $sp_0_i_i_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i_i_i; - var $1309 = HEAPU32[($sp_0_i_i_i | 0) >> 2]; - if (!($1309 >>> 0 > $1306 >>> 0)) { - var $1313 = HEAPU32[($sp_0_i_i_i + 4 | 0) >> 2]; - if (($1309 + $1313 | 0) >>> 0 > $1306 >>> 0) { - var $1321 = $1309; - var $1320 = $1313; - break; - } - } - var $1318 = HEAPU32[($sp_0_i_i_i + 8 | 0) >> 2]; - if (!(($1318 | 0) == 0)) { - var $sp_0_i_i_i = $1318; - continue; - } - var $1321 = 0; - var $1320 = 4; - break; - } - var $1320; - var $1321; - var $1322 = $1321 + $1320 | 0; - var $1324 = $1321 + ($1320 - 39 | 0) | 0; - if (($1324 & 7 | 0) == 0) { - var $1331 = 0; - } else { - var $1331 = (-$1324 | 0) & 7; - } - var $1331; - var $1332 = $1321 + (($1320 - 47 | 0) + $1331 | 0) | 0; - var $1336 = $1332 >>> 0 < ($876 + 16 | 0) >>> 0 ? $1306 : $1332; - var $1337 = $1336 + 8 | 0; - var $1340 = $tbase_243_i + 8 | 0; - if (($1340 & 7 | 0) == 0) { - var $1346 = 0; - } else { - var $1346 = (-$1340 | 0) & 7; - } - var $1346; - var $1350 = ($tsize_242_i - 40 | 0) - $1346 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $tbase_243_i + $1346 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1350; - HEAP32[($tbase_243_i + ($1346 + 4 | 0) | 0) >> 2] = $1350 | 1; - HEAP32[($tbase_243_i + ($tsize_242_i - 36 | 0) | 0) >> 2] = 40; - HEAP32[(__gm_ + 28 | 0) >> 2] = HEAP32[(_mparams + 16 | 0) >> 2]; - HEAP32[($1336 + 4 | 0) >> 2] = 27; - HEAP32[$1337 >> 2] = HEAP32[(__gm_ + 444 | 0) >> 2]; - HEAP32[$1337 + 4 >> 2] = HEAP32[(__gm_ + 444 | 0) + 4 >> 2]; - HEAP32[$1337 + 8 >> 2] = HEAP32[(__gm_ + 444 | 0) + 8 >> 2]; - HEAP32[$1337 + 12 >> 2] = HEAP32[(__gm_ + 444 | 0) + 12 >> 2]; - HEAP32[(__gm_ + 444 | 0) >> 2] = $tbase_243_i; - HEAP32[(__gm_ + 448 | 0) >> 2] = $tsize_242_i; - HEAP32[(__gm_ + 456 | 0) >> 2] = 0; - HEAP32[(__gm_ + 452 | 0) >> 2] = $1337; - var $1360 = $1336 + 28 | 0; - HEAP32[$1360 >> 2] = 7; - $_$426 : do { - if (($1336 + 32 | 0) >>> 0 < $1322 >>> 0) { - var $1363 = $1360; - while (1) { - var $1363; - var $1364 = $1363 + 4 | 0; - HEAP32[$1364 >> 2] = 7; - if (!(($1363 + 8 | 0) >>> 0 < $1322 >>> 0)) { - break $_$426; - } - var $1363 = $1364; - } - } - } while (0); - if (($1336 | 0) == ($1306 | 0)) { - break; - } - var $1372 = $1336 - $876 | 0; - var $1375 = $1306 + ($1372 + 4 | 0) | 0; - HEAP32[$1375 >> 2] = HEAP32[$1375 >> 2] & -2; - HEAP32[($876 + 4 | 0) >> 2] = $1372 | 1; - HEAP32[($1306 + $1372 | 0) >> 2] = $1372; - if ($1372 >>> 0 < 256) { - var $1385 = $1372 >>> 2 & 1073741822; - var $1387 = __gm_ + 40 + ($1385 << 2) | 0; - var $1388 = HEAPU32[(__gm_ | 0) >> 2]; - var $1389 = 1 << ($1372 >>> 3); - do { - if (($1388 & $1389 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $1388 | $1389; - var $F_0_i_i = $1387; - var $_pre_phi_i_i = __gm_ + 40 + (($1385 + 2 | 0) << 2) | 0; - } else { - var $1395 = __gm_ + 40 + (($1385 + 2 | 0) << 2) | 0; - var $1396 = HEAPU32[$1395 >> 2]; - if (!($1396 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F_0_i_i = $1396; - var $_pre_phi_i_i = $1395; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i_i; - var $F_0_i_i; - HEAP32[$_pre_phi_i_i >> 2] = $876; - HEAP32[($F_0_i_i + 12 | 0) >> 2] = $876; - HEAP32[($876 + 8 | 0) >> 2] = $F_0_i_i; - HEAP32[($876 + 12 | 0) >> 2] = $1387; - } else { - var $1406 = $876; - var $1407 = $1372 >>> 8; - do { - if (($1407 | 0) == 0) { - var $I1_0_i_i = 0; - } else { - if ($1372 >>> 0 > 16777215) { - var $I1_0_i_i = 31; - break; - } - var $1414 = ($1407 + 1048320 | 0) >>> 16 & 8; - var $1415 = $1407 << $1414; - var $1418 = ($1415 + 520192 | 0) >>> 16 & 4; - var $1419 = $1415 << $1418; - var $1422 = ($1419 + 245760 | 0) >>> 16 & 2; - var $1428 = (14 - ($1418 | $1414 | $1422) | 0) + ($1419 << $1422 >>> 15) | 0; - var $I1_0_i_i = $1372 >>> (($1428 + 7 | 0) >>> 0) & 1 | $1428 << 1; - } - } while (0); - var $I1_0_i_i; - var $1435 = __gm_ + 304 + ($I1_0_i_i << 2) | 0; - HEAP32[($876 + 28 | 0) >> 2] = $I1_0_i_i; - HEAP32[($876 + 20 | 0) >> 2] = 0; - HEAP32[($876 + 16 | 0) >> 2] = 0; - var $1439 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1440 = 1 << $I1_0_i_i; - if (($1439 & $1440 | 0) == 0) { - HEAP32[(__gm_ + 4 | 0) >> 2] = $1439 | $1440; - HEAP32[$1435 >> 2] = $1406; - HEAP32[($876 + 24 | 0) >> 2] = $1435; - HEAP32[($876 + 12 | 0) >> 2] = $876; - HEAP32[($876 + 8 | 0) >> 2] = $876; - } else { - if (($I1_0_i_i | 0) == 31) { - var $1455 = 0; - } else { - var $1455 = 25 - ($I1_0_i_i >>> 1) | 0; - } - var $1455; - var $K2_0_i_i = $1372 << $1455; - var $T_0_i_i = HEAP32[$1435 >> 2]; - while (1) { - var $T_0_i_i; - var $K2_0_i_i; - if ((HEAP32[($T_0_i_i + 4 | 0) >> 2] & -8 | 0) == ($1372 | 0)) { - var $1478 = $T_0_i_i + 8 | 0; - var $1479 = HEAPU32[$1478 >> 2]; - var $1481 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($T_0_i_i >>> 0 < $1481 >>> 0)) { - if ($1479 >>> 0 < $1481 >>> 0) { - break; - } - HEAP32[($1479 + 12 | 0) >> 2] = $1406; - HEAP32[$1478 >> 2] = $1406; - HEAP32[($876 + 8 | 0) >> 2] = $1479; - HEAP32[($876 + 12 | 0) >> 2] = $T_0_i_i; - HEAP32[($876 + 24 | 0) >> 2] = 0; - break $_$275; - } - } while (0); - _abort(); - } else { - var $1464 = $T_0_i_i + 16 + ($K2_0_i_i >>> 31 << 2) | 0; - var $1465 = HEAPU32[$1464 >> 2]; - if (!(($1465 | 0) == 0)) { - var $K2_0_i_i = $K2_0_i_i << 1; - var $T_0_i_i = $1465; - continue; - } - if (!($1464 >>> 0 < HEAPU32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - HEAP32[$1464 >> 2] = $1406; - HEAP32[($876 + 24 | 0) >> 2] = $T_0_i_i; - HEAP32[($876 + 12 | 0) >> 2] = $876; - HEAP32[($876 + 8 | 0) >> 2] = $876; - break $_$275; - } - _abort(); - } - } - } - } - } - } while (0); - var $1491 = HEAPU32[(__gm_ + 12 | 0) >> 2]; - if (!($1491 >>> 0 > $nb_0 >>> 0)) { - break; - } - var $1494 = $1491 - $nb_0 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1494; - var $1495 = HEAPU32[(__gm_ + 24 | 0) >> 2]; - var $1496 = $1495; - HEAP32[(__gm_ + 24 | 0) >> 2] = $1496 + $nb_0 | 0; - HEAP32[($1496 + ($nb_0 + 4 | 0) | 0) >> 2] = $1494 | 1; - HEAP32[($1495 + 4 | 0) >> 2] = $nb_0 | 3; - var $mem_0 = $1495 + 8 | 0; - break $_$215; - } - } while (0); - HEAP32[___errno() >> 2] = 12; - var $mem_0 = 0; - } - } else { - var $706 = $703 - $nb_0 | 0; - var $707 = HEAPU32[(__gm_ + 20 | 0) >> 2]; - if ($706 >>> 0 > 15) { - var $710 = $707; - HEAP32[(__gm_ + 20 | 0) >> 2] = $710 + $nb_0 | 0; - HEAP32[(__gm_ + 8 | 0) >> 2] = $706; - HEAP32[($710 + ($nb_0 + 4 | 0) | 0) >> 2] = $706 | 1; - HEAP32[($710 + $703 | 0) >> 2] = $706; - HEAP32[($707 + 4 | 0) >> 2] = $nb_0 | 3; - } else { - HEAP32[(__gm_ + 8 | 0) >> 2] = 0; - HEAP32[(__gm_ + 20 | 0) >> 2] = 0; - HEAP32[($707 + 4 | 0) >> 2] = $703 | 3; - var $725 = $707 + ($703 + 4 | 0) | 0; - HEAP32[$725 >> 2] = HEAP32[$725 >> 2] | 1; - } - var $mem_0 = $707 + 8 | 0; - } - } - } while (0); - var $mem_0; - return $mem_0; -} -function _mallocNoU($bytes) { - var __label__; - $_$2 : do { - if ($bytes >>> 0 < 245) { - if ($bytes >>> 0 < 11) { - var $8 = 16; - } else { - var $8 = ($bytes + 11 | 0) & -8; - } - var $8; - var $9 = $8 >>> 3; - var $10 = HEAP32[(__gm_ | 0) >> 2]; - var $11 = $10 >>> ($9 >>> 0); - if (!(($11 & 3 | 0) == 0)) { - var $17 = ($11 & 1 ^ 1) + $9 | 0; - var $18 = $17 << 1; - var $20 = __gm_ + 40 + ($18 << 2) | 0; - var $21 = __gm_ + 40 + (($18 + 2 | 0) << 2) | 0; - var $22 = HEAP32[$21 >> 2]; - var $23 = $22 + 8 | 0; - var $24 = HEAP32[$23 >> 2]; - if (($20 | 0) == ($24 | 0)) { - HEAP32[(__gm_ | 0) >> 2] = $10 & (1 << $17 ^ -1); - } else { - if ($24 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[$21 >> 2] = $24; - HEAP32[($24 + 12 | 0) >> 2] = $20; - } - } - var $38 = $17 << 3; - HEAP32[($22 + 4 | 0) >> 2] = $38 | 3; - var $43 = $22 + ($38 | 4) | 0; - HEAP32[$43 >> 2] = HEAP32[$43 >> 2] | 1; - var $mem_0 = $23; - __label__ = 331; - break; - } - if (!($8 >>> 0 > HEAP32[(__gm_ + 8 | 0) >> 2] >>> 0)) { - var $nb_0 = $8; - __label__ = 155; - break; - } - if (!(($11 | 0) == 0)) { - var $54 = 2 << $9; - var $57 = $11 << $9 & ($54 | (-$54 | 0)); - var $60 = ($57 & (-$57 | 0)) - 1 | 0; - var $62 = $60 >>> 12 & 16; - var $63 = $60 >>> ($62 >>> 0); - var $65 = $63 >>> 5 & 8; - var $66 = $63 >>> ($65 >>> 0); - var $68 = $66 >>> 2 & 4; - var $69 = $66 >>> ($68 >>> 0); - var $71 = $69 >>> 1 & 2; - var $72 = $69 >>> ($71 >>> 0); - var $74 = $72 >>> 1 & 1; - var $80 = ($65 | $62 | $68 | $71 | $74) + ($72 >>> ($74 >>> 0)) | 0; - var $81 = $80 << 1; - var $83 = __gm_ + 40 + ($81 << 2) | 0; - var $84 = __gm_ + 40 + (($81 + 2 | 0) << 2) | 0; - var $85 = HEAP32[$84 >> 2]; - var $86 = $85 + 8 | 0; - var $87 = HEAP32[$86 >> 2]; - if (($83 | 0) == ($87 | 0)) { - HEAP32[(__gm_ | 0) >> 2] = $10 & (1 << $80 ^ -1); - } else { - if ($87 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[$84 >> 2] = $87; - HEAP32[($87 + 12 | 0) >> 2] = $83; - } - } - var $101 = $80 << 3; - var $102 = $101 - $8 | 0; - HEAP32[($85 + 4 | 0) >> 2] = $8 | 3; - var $105 = $85; - var $107 = $105 + $8 | 0; - HEAP32[($105 + ($8 | 4) | 0) >> 2] = $102 | 1; - HEAP32[($105 + $101 | 0) >> 2] = $102; - var $113 = HEAP32[(__gm_ + 8 | 0) >> 2]; - if (!(($113 | 0) == 0)) { - var $116 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $119 = $113 >>> 2 & 1073741822; - var $121 = __gm_ + 40 + ($119 << 2) | 0; - var $122 = HEAP32[(__gm_ | 0) >> 2]; - var $123 = 1 << ($113 >>> 3); - do { - if (($122 & $123 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $122 | $123; - var $F4_0 = $121; - var $_pre_phi = __gm_ + 40 + (($119 + 2 | 0) << 2) | 0; - } else { - var $129 = __gm_ + 40 + (($119 + 2 | 0) << 2) | 0; - var $130 = HEAP32[$129 >> 2]; - if (!($130 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F4_0 = $130; - var $_pre_phi = $129; - break; - } - _abort(); - } - } while (0); - var $_pre_phi; - var $F4_0; - HEAP32[$_pre_phi >> 2] = $116; - HEAP32[($F4_0 + 12 | 0) >> 2] = $116; - HEAP32[($116 + 8 | 0) >> 2] = $F4_0; - HEAP32[($116 + 12 | 0) >> 2] = $121; - } - HEAP32[(__gm_ + 8 | 0) >> 2] = $102; - HEAP32[(__gm_ + 20 | 0) >> 2] = $107; - var $mem_0 = $86; - __label__ = 331; - break; - } - var $142 = HEAP32[(__gm_ + 4 | 0) >> 2]; - if (($142 | 0) == 0) { - var $nb_0 = $8; - __label__ = 155; - break; - } - var $147 = ($142 & (-$142 | 0)) - 1 | 0; - var $149 = $147 >>> 12 & 16; - var $150 = $147 >>> ($149 >>> 0); - var $152 = $150 >>> 5 & 8; - var $153 = $150 >>> ($152 >>> 0); - var $155 = $153 >>> 2 & 4; - var $156 = $153 >>> ($155 >>> 0); - var $158 = $156 >>> 1 & 2; - var $159 = $156 >>> ($158 >>> 0); - var $161 = $159 >>> 1 & 1; - var $169 = HEAP32[(__gm_ + 304 + ((($152 | $149 | $155 | $158 | $161) + ($159 >>> ($161 >>> 0)) | 0) << 2) | 0) >> 2]; - var $t_0_i = $169; - var $v_0_i = $169; - var $rsize_0_i = (HEAP32[($169 + 4 | 0) >> 2] & -8) - $8 | 0; - while (1) { - var $rsize_0_i; - var $v_0_i; - var $t_0_i; - var $176 = HEAP32[($t_0_i + 16 | 0) >> 2]; - if (($176 | 0) == 0) { - var $180 = HEAP32[($t_0_i + 20 | 0) >> 2]; - if (($180 | 0) == 0) { - break; - } - var $182 = $180; - } else { - var $182 = $176; - } - var $182; - var $186 = (HEAP32[($182 + 4 | 0) >> 2] & -8) - $8 | 0; - var $187 = $186 >>> 0 < $rsize_0_i >>> 0; - var $t_0_i = $182; - var $v_0_i = $187 ? $182 : $v_0_i; - var $rsize_0_i = $187 ? $186 : $rsize_0_i; - } - var $189 = $v_0_i; - var $190 = HEAP32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($189 >>> 0 < $190 >>> 0)) { - var $193 = $189 + $8 | 0; - var $194 = $193; - if (!($189 >>> 0 < $193 >>> 0)) { - break; - } - var $198 = HEAP32[($v_0_i + 24 | 0) >> 2]; - var $200 = HEAP32[($v_0_i + 12 | 0) >> 2]; - do { - if (($200 | 0) == ($v_0_i | 0)) { - var $212 = $v_0_i + 20 | 0; - var $213 = HEAP32[$212 >> 2]; - if (($213 | 0) == 0) { - var $216 = $v_0_i + 16 | 0; - var $217 = HEAP32[$216 >> 2]; - if (($217 | 0) == 0) { - var $R_1_i = 0; - break; - } - var $RP_0_i = $216; - var $R_0_i = $217; - } else { - var $RP_0_i = $212; - var $R_0_i = $213; - __label__ = 39; - } - while (1) { - var $R_0_i; - var $RP_0_i; - var $219 = $R_0_i + 20 | 0; - var $220 = HEAP32[$219 >> 2]; - if (!(($220 | 0) == 0)) { - var $RP_0_i = $219; - var $R_0_i = $220; - continue; - } - var $223 = $R_0_i + 16 | 0; - var $224 = HEAP32[$223 >> 2]; - if (($224 | 0) == 0) { - break; - } - var $RP_0_i = $223; - var $R_0_i = $224; - } - if ($RP_0_i >>> 0 < $190 >>> 0) { - _abort(); - } else { - HEAP32[$RP_0_i >> 2] = 0; - var $R_1_i = $R_0_i; - } - } else { - var $204 = HEAP32[($v_0_i + 8 | 0) >> 2]; - if ($204 >>> 0 < $190 >>> 0) { - _abort(); - } else { - HEAP32[($204 + 12 | 0) >> 2] = $200; - HEAP32[($200 + 8 | 0) >> 2] = $204; - var $R_1_i = $200; - } - } - } while (0); - var $R_1_i; - $_$62 : do { - if (!(($198 | 0) == 0)) { - var $234 = $v_0_i + 28 | 0; - var $236 = __gm_ + 304 + (HEAP32[$234 >> 2] << 2) | 0; - do { - if (($v_0_i | 0) == (HEAP32[$236 >> 2] | 0)) { - HEAP32[$236 >> 2] = $R_1_i; - if (!(($R_1_i | 0) == 0)) { - break; - } - HEAP32[(__gm_ + 4 | 0) >> 2] = HEAP32[(__gm_ + 4 | 0) >> 2] & (1 << HEAP32[$234 >> 2] ^ -1); - break $_$62; - } - if ($198 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - var $250 = $198 + 16 | 0; - if ((HEAP32[$250 >> 2] | 0) == ($v_0_i | 0)) { - HEAP32[$250 >> 2] = $R_1_i; - } else { - HEAP32[($198 + 20 | 0) >> 2] = $R_1_i; - } - if (($R_1_i | 0) == 0) { - break $_$62; - } - } - } while (0); - if ($R_1_i >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i + 24 | 0) >> 2] = $198; - var $266 = HEAP32[($v_0_i + 16 | 0) >> 2]; - if (!(($266 | 0) == 0)) { - if ($266 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i + 16 | 0) >> 2] = $266; - HEAP32[($266 + 24 | 0) >> 2] = $R_1_i; - } - } - var $278 = HEAP32[($v_0_i + 20 | 0) >> 2]; - if (($278 | 0) == 0) { - break; - } - if ($278 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i + 20 | 0) >> 2] = $278; - HEAP32[($278 + 24 | 0) >> 2] = $R_1_i; - } - } - } - } while (0); - if ($rsize_0_i >>> 0 < 16) { - var $292 = $rsize_0_i + $8 | 0; - HEAP32[($v_0_i + 4 | 0) >> 2] = $292 | 3; - var $296 = $189 + ($292 + 4 | 0) | 0; - HEAP32[$296 >> 2] = HEAP32[$296 >> 2] | 1; - } else { - HEAP32[($v_0_i + 4 | 0) >> 2] = $8 | 3; - HEAP32[($189 + ($8 | 4) | 0) >> 2] = $rsize_0_i | 1; - HEAP32[($189 + ($rsize_0_i + $8 | 0) | 0) >> 2] = $rsize_0_i; - var $307 = HEAP32[(__gm_ + 8 | 0) >> 2]; - if (!(($307 | 0) == 0)) { - var $310 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $313 = $307 >>> 2 & 1073741822; - var $315 = __gm_ + 40 + ($313 << 2) | 0; - var $316 = HEAP32[(__gm_ | 0) >> 2]; - var $317 = 1 << ($307 >>> 3); - do { - if (($316 & $317 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $316 | $317; - var $F1_0_i = $315; - var $_pre_phi_i = __gm_ + 40 + (($313 + 2 | 0) << 2) | 0; - } else { - var $323 = __gm_ + 40 + (($313 + 2 | 0) << 2) | 0; - var $324 = HEAP32[$323 >> 2]; - if (!($324 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F1_0_i = $324; - var $_pre_phi_i = $323; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i; - var $F1_0_i; - HEAP32[$_pre_phi_i >> 2] = $310; - HEAP32[($F1_0_i + 12 | 0) >> 2] = $310; - HEAP32[($310 + 8 | 0) >> 2] = $F1_0_i; - HEAP32[($310 + 12 | 0) >> 2] = $315; - } - HEAP32[(__gm_ + 8 | 0) >> 2] = $rsize_0_i; - HEAP32[(__gm_ + 20 | 0) >> 2] = $194; - } - var $335 = $v_0_i + 8 | 0; - if (($335 | 0) == 0) { - var $nb_0 = $8; - __label__ = 155; - break $_$2; - } - var $mem_0 = $335; - __label__ = 331; - break $_$2; - } - } while (0); - _abort(); - } else { - if ($bytes >>> 0 > 4294967231) { - var $nb_0 = -1; - __label__ = 155; - break; - } - var $341 = $bytes + 11 | 0; - var $342 = $341 & -8; - var $343 = HEAP32[(__gm_ + 4 | 0) >> 2]; - if (($343 | 0) == 0) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $346 = -$342 | 0; - var $347 = $341 >>> 8; - do { - if (($347 | 0) == 0) { - var $idx_0_i = 0; - } else { - if ($342 >>> 0 > 16777215) { - var $idx_0_i = 31; - break; - } - var $354 = ($347 + 1048320 | 0) >>> 16 & 8; - var $355 = $347 << $354; - var $358 = ($355 + 520192 | 0) >>> 16 & 4; - var $359 = $355 << $358; - var $362 = ($359 + 245760 | 0) >>> 16 & 2; - var $368 = (14 - ($358 | $354 | $362) | 0) + ($359 << $362 >>> 15) | 0; - var $idx_0_i = $342 >>> (($368 + 7 | 0) >>> 0) & 1 | $368 << 1; - } - } while (0); - var $idx_0_i; - var $376 = HEAP32[(__gm_ + 304 + ($idx_0_i << 2) | 0) >> 2]; - $_$110 : do { - if (($376 | 0) == 0) { - var $v_2_i = 0; - var $rsize_2_i = $346; - var $t_1_i = 0; - } else { - if (($idx_0_i | 0) == 31) { - var $384 = 0; - } else { - var $384 = 25 - ($idx_0_i >>> 1) | 0; - } - var $384; - var $v_0_i15 = 0; - var $rsize_0_i14 = $346; - var $t_0_i13 = $376; - var $sizebits_0_i = $342 << $384; - var $rst_0_i = 0; - while (1) { - var $rst_0_i; - var $sizebits_0_i; - var $t_0_i13; - var $rsize_0_i14; - var $v_0_i15; - var $389 = HEAP32[($t_0_i13 + 4 | 0) >> 2] & -8; - var $390 = $389 - $342 | 0; - if ($390 >>> 0 < $rsize_0_i14 >>> 0) { - if (($389 | 0) == ($342 | 0)) { - var $v_2_i = $t_0_i13; - var $rsize_2_i = $390; - var $t_1_i = $t_0_i13; - break $_$110; - } - var $v_1_i = $t_0_i13; - var $rsize_1_i = $390; - } else { - var $v_1_i = $v_0_i15; - var $rsize_1_i = $rsize_0_i14; - } - var $rsize_1_i; - var $v_1_i; - var $396 = HEAP32[($t_0_i13 + 20 | 0) >> 2]; - var $399 = HEAP32[($t_0_i13 + 16 + ($sizebits_0_i >>> 31 << 2) | 0) >> 2]; - var $rst_1_i = ($396 | 0) == 0 | ($396 | 0) == ($399 | 0) ? $rst_0_i : $396; - if (($399 | 0) == 0) { - var $v_2_i = $v_1_i; - var $rsize_2_i = $rsize_1_i; - var $t_1_i = $rst_1_i; - break $_$110; - } - var $v_0_i15 = $v_1_i; - var $rsize_0_i14 = $rsize_1_i; - var $t_0_i13 = $399; - var $sizebits_0_i = $sizebits_0_i << 1; - var $rst_0_i = $rst_1_i; - } - } - } while (0); - var $t_1_i; - var $rsize_2_i; - var $v_2_i; - if (($t_1_i | 0) == 0 & ($v_2_i | 0) == 0) { - var $407 = 2 << $idx_0_i; - var $410 = $343 & ($407 | (-$407 | 0)); - if (($410 | 0) == 0) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $415 = ($410 & (-$410 | 0)) - 1 | 0; - var $417 = $415 >>> 12 & 16; - var $418 = $415 >>> ($417 >>> 0); - var $420 = $418 >>> 5 & 8; - var $421 = $418 >>> ($420 >>> 0); - var $423 = $421 >>> 2 & 4; - var $424 = $421 >>> ($423 >>> 0); - var $426 = $424 >>> 1 & 2; - var $427 = $424 >>> ($426 >>> 0); - var $429 = $427 >>> 1 & 1; - var $t_2_ph_i = HEAP32[(__gm_ + 304 + ((($420 | $417 | $423 | $426 | $429) + ($427 >>> ($429 >>> 0)) | 0) << 2) | 0) >> 2]; - } else { - var $t_2_ph_i = $t_1_i; - } - var $t_2_ph_i; - $_$125 : do { - if (($t_2_ph_i | 0) == 0) { - var $rsize_3_lcssa_i = $rsize_2_i; - var $v_3_lcssa_i = $v_2_i; - } else { - var $t_224_i = $t_2_ph_i; - var $rsize_325_i = $rsize_2_i; - var $v_326_i = $v_2_i; - while (1) { - var $v_326_i; - var $rsize_325_i; - var $t_224_i; - var $442 = (HEAP32[($t_224_i + 4 | 0) >> 2] & -8) - $342 | 0; - var $443 = $442 >>> 0 < $rsize_325_i >>> 0; - var $_rsize_3_i = $443 ? $442 : $rsize_325_i; - var $t_2_v_3_i = $443 ? $t_224_i : $v_326_i; - var $445 = HEAP32[($t_224_i + 16 | 0) >> 2]; - if (!(($445 | 0) == 0)) { - var $t_224_i = $445; - var $rsize_325_i = $_rsize_3_i; - var $v_326_i = $t_2_v_3_i; - continue; - } - var $448 = HEAP32[($t_224_i + 20 | 0) >> 2]; - if (($448 | 0) == 0) { - var $rsize_3_lcssa_i = $_rsize_3_i; - var $v_3_lcssa_i = $t_2_v_3_i; - break $_$125; - } - var $t_224_i = $448; - var $rsize_325_i = $_rsize_3_i; - var $v_326_i = $t_2_v_3_i; - } - } - } while (0); - var $v_3_lcssa_i; - var $rsize_3_lcssa_i; - if (($v_3_lcssa_i | 0) == 0) { - var $nb_0 = $342; - __label__ = 155; - break; - } - if (!($rsize_3_lcssa_i >>> 0 < (HEAP32[(__gm_ + 8 | 0) >> 2] - $342 | 0) >>> 0)) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $456 = $v_3_lcssa_i; - var $457 = HEAP32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($456 >>> 0 < $457 >>> 0)) { - var $460 = $456 + $342 | 0; - var $461 = $460; - if (!($456 >>> 0 < $460 >>> 0)) { - break; - } - var $465 = HEAP32[($v_3_lcssa_i + 24 | 0) >> 2]; - var $467 = HEAP32[($v_3_lcssa_i + 12 | 0) >> 2]; - do { - if (($467 | 0) == ($v_3_lcssa_i | 0)) { - var $479 = $v_3_lcssa_i + 20 | 0; - var $480 = HEAP32[$479 >> 2]; - if (($480 | 0) == 0) { - var $483 = $v_3_lcssa_i + 16 | 0; - var $484 = HEAP32[$483 >> 2]; - if (($484 | 0) == 0) { - var $R_1_i19 = 0; - break; - } - var $RP_0_i17 = $483; - var $R_0_i16 = $484; - } else { - var $RP_0_i17 = $479; - var $R_0_i16 = $480; - __label__ = 103; - } - while (1) { - var $R_0_i16; - var $RP_0_i17; - var $486 = $R_0_i16 + 20 | 0; - var $487 = HEAP32[$486 >> 2]; - if (!(($487 | 0) == 0)) { - var $RP_0_i17 = $486; - var $R_0_i16 = $487; - continue; - } - var $490 = $R_0_i16 + 16 | 0; - var $491 = HEAP32[$490 >> 2]; - if (($491 | 0) == 0) { - break; - } - var $RP_0_i17 = $490; - var $R_0_i16 = $491; - } - if ($RP_0_i17 >>> 0 < $457 >>> 0) { - _abort(); - } else { - HEAP32[$RP_0_i17 >> 2] = 0; - var $R_1_i19 = $R_0_i16; - } - } else { - var $471 = HEAP32[($v_3_lcssa_i + 8 | 0) >> 2]; - if ($471 >>> 0 < $457 >>> 0) { - _abort(); - } else { - HEAP32[($471 + 12 | 0) >> 2] = $467; - HEAP32[($467 + 8 | 0) >> 2] = $471; - var $R_1_i19 = $467; - } - } - } while (0); - var $R_1_i19; - $_$151 : do { - if (!(($465 | 0) == 0)) { - var $501 = $v_3_lcssa_i + 28 | 0; - var $503 = __gm_ + 304 + (HEAP32[$501 >> 2] << 2) | 0; - do { - if (($v_3_lcssa_i | 0) == (HEAP32[$503 >> 2] | 0)) { - HEAP32[$503 >> 2] = $R_1_i19; - if (!(($R_1_i19 | 0) == 0)) { - break; - } - HEAP32[(__gm_ + 4 | 0) >> 2] = HEAP32[(__gm_ + 4 | 0) >> 2] & (1 << HEAP32[$501 >> 2] ^ -1); - break $_$151; - } - if ($465 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - var $517 = $465 + 16 | 0; - if ((HEAP32[$517 >> 2] | 0) == ($v_3_lcssa_i | 0)) { - HEAP32[$517 >> 2] = $R_1_i19; - } else { - HEAP32[($465 + 20 | 0) >> 2] = $R_1_i19; - } - if (($R_1_i19 | 0) == 0) { - break $_$151; - } - } - } while (0); - if ($R_1_i19 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i19 + 24 | 0) >> 2] = $465; - var $533 = HEAP32[($v_3_lcssa_i + 16 | 0) >> 2]; - if (!(($533 | 0) == 0)) { - if ($533 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i19 + 16 | 0) >> 2] = $533; - HEAP32[($533 + 24 | 0) >> 2] = $R_1_i19; - } - } - var $545 = HEAP32[($v_3_lcssa_i + 20 | 0) >> 2]; - if (($545 | 0) == 0) { - break; - } - if ($545 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i19 + 20 | 0) >> 2] = $545; - HEAP32[($545 + 24 | 0) >> 2] = $R_1_i19; - } - } - } - } while (0); - $_$179 : do { - if ($rsize_3_lcssa_i >>> 0 < 16) { - var $559 = $rsize_3_lcssa_i + $342 | 0; - HEAP32[($v_3_lcssa_i + 4 | 0) >> 2] = $559 | 3; - var $563 = $456 + ($559 + 4 | 0) | 0; - HEAP32[$563 >> 2] = HEAP32[$563 >> 2] | 1; - } else { - HEAP32[($v_3_lcssa_i + 4 | 0) >> 2] = $342 | 3; - HEAP32[($456 + ($342 | 4) | 0) >> 2] = $rsize_3_lcssa_i | 1; - HEAP32[($456 + ($rsize_3_lcssa_i + $342 | 0) | 0) >> 2] = $rsize_3_lcssa_i; - if ($rsize_3_lcssa_i >>> 0 < 256) { - var $578 = $rsize_3_lcssa_i >>> 2 & 1073741822; - var $580 = __gm_ + 40 + ($578 << 2) | 0; - var $581 = HEAP32[(__gm_ | 0) >> 2]; - var $582 = 1 << ($rsize_3_lcssa_i >>> 3); - do { - if (($581 & $582 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $581 | $582; - var $F5_0_i = $580; - var $_pre_phi_i25 = __gm_ + 40 + (($578 + 2 | 0) << 2) | 0; - } else { - var $588 = __gm_ + 40 + (($578 + 2 | 0) << 2) | 0; - var $589 = HEAP32[$588 >> 2]; - if (!($589 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F5_0_i = $589; - var $_pre_phi_i25 = $588; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i25; - var $F5_0_i; - HEAP32[$_pre_phi_i25 >> 2] = $461; - HEAP32[($F5_0_i + 12 | 0) >> 2] = $461; - HEAP32[($456 + ($342 + 8 | 0) | 0) >> 2] = $F5_0_i; - HEAP32[($456 + ($342 + 12 | 0) | 0) >> 2] = $580; - } else { - var $601 = $460; - var $602 = $rsize_3_lcssa_i >>> 8; - do { - if (($602 | 0) == 0) { - var $I7_0_i = 0; - } else { - if ($rsize_3_lcssa_i >>> 0 > 16777215) { - var $I7_0_i = 31; - break; - } - var $609 = ($602 + 1048320 | 0) >>> 16 & 8; - var $610 = $602 << $609; - var $613 = ($610 + 520192 | 0) >>> 16 & 4; - var $614 = $610 << $613; - var $617 = ($614 + 245760 | 0) >>> 16 & 2; - var $623 = (14 - ($613 | $609 | $617) | 0) + ($614 << $617 >>> 15) | 0; - var $I7_0_i = $rsize_3_lcssa_i >>> (($623 + 7 | 0) >>> 0) & 1 | $623 << 1; - } - } while (0); - var $I7_0_i; - var $630 = __gm_ + 304 + ($I7_0_i << 2) | 0; - HEAP32[($456 + ($342 + 28 | 0) | 0) >> 2] = $I7_0_i; - HEAP32[($456 + ($342 + 20 | 0) | 0) >> 2] = 0; - HEAP32[($456 + ($342 + 16 | 0) | 0) >> 2] = 0; - var $637 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $638 = 1 << $I7_0_i; - if (($637 & $638 | 0) == 0) { - HEAP32[(__gm_ + 4 | 0) >> 2] = $637 | $638; - HEAP32[$630 >> 2] = $601; - HEAP32[($456 + ($342 + 24 | 0) | 0) >> 2] = $630; - HEAP32[($456 + ($342 + 12 | 0) | 0) >> 2] = $601; - HEAP32[($456 + ($342 + 8 | 0) | 0) >> 2] = $601; - } else { - if (($I7_0_i | 0) == 31) { - var $657 = 0; - } else { - var $657 = 25 - ($I7_0_i >>> 1) | 0; - } - var $657; - var $K12_0_i = $rsize_3_lcssa_i << $657; - var $T_0_i = HEAP32[$630 >> 2]; - while (1) { - var $T_0_i; - var $K12_0_i; - if ((HEAP32[($T_0_i + 4 | 0) >> 2] & -8 | 0) == ($rsize_3_lcssa_i | 0)) { - var $683 = $T_0_i + 8 | 0; - var $684 = HEAP32[$683 >> 2]; - var $686 = HEAP32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($T_0_i >>> 0 < $686 >>> 0)) { - if ($684 >>> 0 < $686 >>> 0) { - break; - } - HEAP32[($684 + 12 | 0) >> 2] = $601; - HEAP32[$683 >> 2] = $601; - HEAP32[($456 + ($342 + 8 | 0) | 0) >> 2] = $684; - HEAP32[($456 + ($342 + 12 | 0) | 0) >> 2] = $T_0_i; - HEAP32[($456 + ($342 + 24 | 0) | 0) >> 2] = 0; - break $_$179; - } - } while (0); - _abort(); - } else { - var $666 = $T_0_i + 16 + ($K12_0_i >>> 31 << 2) | 0; - var $667 = HEAP32[$666 >> 2]; - if (!(($667 | 0) == 0)) { - var $K12_0_i = $K12_0_i << 1; - var $T_0_i = $667; - continue; - } - if (!($666 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - HEAP32[$666 >> 2] = $601; - HEAP32[($456 + ($342 + 24 | 0) | 0) >> 2] = $T_0_i; - HEAP32[($456 + ($342 + 12 | 0) | 0) >> 2] = $601; - HEAP32[($456 + ($342 + 8 | 0) | 0) >> 2] = $601; - break $_$179; - } - _abort(); - } - } - } - } - } - } while (0); - var $700 = $v_3_lcssa_i + 8 | 0; - if (($700 | 0) == 0) { - var $nb_0 = $342; - __label__ = 155; - break $_$2; - } - var $mem_0 = $700; - __label__ = 331; - break $_$2; - } - } while (0); - _abort(); - } - } while (0); - $_$215 : do { - if (__label__ == 155) { - var $nb_0; - var $703 = HEAP32[(__gm_ + 8 | 0) >> 2]; - if ($nb_0 >>> 0 > $703 >>> 0) { - var $732 = HEAP32[(__gm_ + 12 | 0) >> 2]; - if ($nb_0 >>> 0 < $732 >>> 0) { - var $735 = $732 - $nb_0 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $735; - var $736 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $737 = $736; - HEAP32[(__gm_ + 24 | 0) >> 2] = $737 + $nb_0 | 0; - HEAP32[($737 + ($nb_0 + 4 | 0) | 0) >> 2] = $735 | 1; - HEAP32[($736 + 4 | 0) >> 2] = $nb_0 | 3; - var $mem_0 = $736 + 8 | 0; - } else { - do { - if ((HEAP32[(_mparams | 0) >> 2] | 0) == 0) { - if (!((HEAP32[(_mparams | 0) >> 2] | 0) == 0)) { - break; - } - var $754 = _sysconf(8); - if ((($754 - 1 | 0) & $754 | 0) == 0) { - HEAP32[(_mparams + 8 | 0) >> 2] = $754; - HEAP32[(_mparams + 4 | 0) >> 2] = $754; - HEAP32[(_mparams + 12 | 0) >> 2] = -1; - HEAP32[(_mparams + 16 | 0) >> 2] = 2097152; - HEAP32[(_mparams + 20 | 0) >> 2] = 0; - HEAP32[(__gm_ + 440 | 0) >> 2] = 0; - var $762 = _time(0) & -16 ^ 1431655768; - HEAP32[(_mparams | 0) >> 2] = $762; - } else { - _abort(); - } - } - } while (0); - $_$234 : do { - if ((HEAP32[(__gm_ + 440 | 0) >> 2] & 4 | 0) == 0) { - var $767 = HEAP32[(__gm_ + 24 | 0) >> 2]; - $_$236 : do { - if (!(($767 | 0) == 0)) { - var $770 = $767; - var $sp_0_i_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i_i; - var $772 = $sp_0_i_i | 0; - var $773 = HEAP32[$772 >> 2]; - if (!($773 >>> 0 > $770 >>> 0)) { - var $776 = $sp_0_i_i + 4 | 0; - if (($773 + HEAP32[$776 >> 2] | 0) >>> 0 > $770 >>> 0) { - break; - } - } - var $782 = HEAP32[($sp_0_i_i + 8 | 0) >> 2]; - if (($782 | 0) == 0) { - __label__ = 174; - break $_$236; - } - var $sp_0_i_i = $782; - } - if (($sp_0_i_i | 0) == 0) { - __label__ = 174; - break; - } - var $811 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $816 = ((($nb_0 + 47 | 0) - HEAP32[(__gm_ + 12 | 0) >> 2] | 0) + $811 | 0) & (-$811 | 0); - if (!($816 >>> 0 < 2147483647)) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $819 = _sbrk($816); - var $823 = ($819 | 0) == (HEAP32[$772 >> 2] + HEAP32[$776 >> 2] | 0 | 0); - var $tbase_0_i = $823 ? $819 : -1; - var $tsize_0_i = $823 ? $816 : 0; - var $asize_1_i = $816; - var $br_0_i = $819; - __label__ = 181; - break; - } - __label__ = 174; - } while (0); - do { - if (__label__ == 174) { - var $785 = _sbrk(0); - if (($785 | 0) == -1) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $788 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $792 = (($nb_0 + 47 | 0) + $788 | 0) & (-$788 | 0); - var $793 = $785; - var $794 = HEAP32[(_mparams + 4 | 0) >> 2]; - var $795 = $794 - 1 | 0; - if (($795 & $793 | 0) == 0) { - var $asize_0_i = $792; - } else { - var $asize_0_i = ($792 - $793 | 0) + (($795 + $793 | 0) & (-$794 | 0)) | 0; - } - var $asize_0_i; - if (!($asize_0_i >>> 0 < 2147483647)) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $807 = _sbrk($asize_0_i); - var $808 = ($807 | 0) == ($785 | 0); - var $tbase_0_i = $808 ? $785 : -1; - var $tsize_0_i = $808 ? $asize_0_i : 0; - var $asize_1_i = $asize_0_i; - var $br_0_i = $807; - __label__ = 181; - break; - } - } while (0); - $_$253 : do { - if (__label__ == 181) { - var $br_0_i; - var $asize_1_i; - var $tsize_0_i; - var $tbase_0_i; - var $825 = -$asize_1_i | 0; - if (!(($tbase_0_i | 0) == -1)) { - var $tsize_242_i = $tsize_0_i; - var $tbase_243_i = $tbase_0_i; - __label__ = 194; - break $_$234; - } - do { - if (($br_0_i | 0) != -1 & $asize_1_i >>> 0 < 2147483647) { - if (!($asize_1_i >>> 0 < ($nb_0 + 48 | 0) >>> 0)) { - var $asize_2_i = $asize_1_i; - break; - } - var $834 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $839 = ((($nb_0 + 47 | 0) - $asize_1_i | 0) + $834 | 0) & (-$834 | 0); - if (!($839 >>> 0 < 2147483647)) { - var $asize_2_i = $asize_1_i; - break; - } - if ((_sbrk($839) | 0) == -1) { - _sbrk($825); - var $tsize_0242932_ph_i = $tsize_0_i; - break $_$253; - } - var $asize_2_i = $839 + $asize_1_i | 0; - } else { - var $asize_2_i = $asize_1_i; - } - } while (0); - var $asize_2_i; - if (!(($br_0_i | 0) == -1)) { - var $tsize_242_i = $asize_2_i; - var $tbase_243_i = $br_0_i; - __label__ = 194; - break $_$234; - } - HEAP32[(__gm_ + 440 | 0) >> 2] = HEAP32[(__gm_ + 440 | 0) >> 2] | 4; - var $tsize_137_i = $tsize_0_i; - __label__ = 191; - break $_$234; - } - } while (0); - var $tsize_0242932_ph_i; - HEAP32[(__gm_ + 440 | 0) >> 2] = HEAP32[(__gm_ + 440 | 0) >> 2] | 4; - var $tsize_137_i = $tsize_0242932_ph_i; - __label__ = 191; - break; - } - var $tsize_137_i = 0; - __label__ = 191; - } while (0); - do { - if (__label__ == 191) { - var $tsize_137_i; - var $854 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $858 = (($nb_0 + 47 | 0) + $854 | 0) & (-$854 | 0); - if (!($858 >>> 0 < 2147483647)) { - __label__ = 330; - break; - } - var $861 = _sbrk($858); - var $862 = _sbrk(0); - if (!(($862 | 0) != -1 & ($861 | 0) != -1 & $861 >>> 0 < $862 >>> 0)) { - __label__ = 330; - break; - } - var $866 = $862 - $861 | 0; - var $868 = $866 >>> 0 > ($nb_0 + 40 | 0) >>> 0; - var $_tbase_1_i = $868 ? $861 : -1; - if (($_tbase_1_i | 0) == -1) { - __label__ = 330; - break; - } - var $tsize_242_i = $868 ? $866 : $tsize_137_i; - var $tbase_243_i = $_tbase_1_i; - __label__ = 194; - break; - } - } while (0); - do { - if (__label__ == 194) { - var $tbase_243_i; - var $tsize_242_i; - var $871 = HEAP32[(__gm_ + 432 | 0) >> 2] + $tsize_242_i | 0; - HEAP32[(__gm_ + 432 | 0) >> 2] = $871; - if ($871 >>> 0 > HEAP32[(__gm_ + 436 | 0) >> 2] >>> 0) { - HEAP32[(__gm_ + 436 | 0) >> 2] = $871; - } - var $876 = HEAP32[(__gm_ + 24 | 0) >> 2]; - $_$275 : do { - if (($876 | 0) == 0) { - var $879 = HEAP32[(__gm_ + 16 | 0) >> 2]; - if (($879 | 0) == 0 | $tbase_243_i >>> 0 < $879 >>> 0) { - HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i; - } - HEAP32[(__gm_ + 444 | 0) >> 2] = $tbase_243_i; - HEAP32[(__gm_ + 448 | 0) >> 2] = $tsize_242_i; - HEAP32[(__gm_ + 456 | 0) >> 2] = 0; - HEAP32[(__gm_ + 36 | 0) >> 2] = HEAP32[(_mparams | 0) >> 2]; - HEAP32[(__gm_ + 32 | 0) >> 2] = -1; - var $i_02_i_i = 0; - while (1) { - var $i_02_i_i; - var $886 = $i_02_i_i << 1; - var $888 = __gm_ + 40 + ($886 << 2) | 0; - HEAP32[(__gm_ + 40 + (($886 + 3 | 0) << 2) | 0) >> 2] = $888; - HEAP32[(__gm_ + 40 + (($886 + 2 | 0) << 2) | 0) >> 2] = $888; - var $891 = $i_02_i_i + 1 | 0; - if (($891 | 0) == 32) { - break; - } - var $i_02_i_i = $891; - } - var $893 = $tbase_243_i + 8 | 0; - if (($893 & 7 | 0) == 0) { - var $899 = 0; - } else { - var $899 = (-$893 | 0) & 7; - } - var $899; - var $903 = ($tsize_242_i - 40 | 0) - $899 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $tbase_243_i + $899 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $903; - HEAP32[($tbase_243_i + ($899 + 4 | 0) | 0) >> 2] = $903 | 1; - HEAP32[($tbase_243_i + ($tsize_242_i - 36 | 0) | 0) >> 2] = 40; - HEAP32[(__gm_ + 28 | 0) >> 2] = HEAP32[(_mparams + 16 | 0) >> 2]; - } else { - var $sp_0_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i; - if (($sp_0_i | 0) == 0) { - break; - } - var $913 = HEAP32[($sp_0_i | 0) >> 2]; - var $914 = $sp_0_i + 4 | 0; - var $915 = HEAP32[$914 >> 2]; - if (($tbase_243_i | 0) == ($913 + $915 | 0 | 0)) { - if (!((HEAP32[($sp_0_i + 12 | 0) >> 2] & 8 | 0) == 0)) { - break; - } - var $926 = $876; - if (!($926 >>> 0 >= $913 >>> 0 & $926 >>> 0 < $tbase_243_i >>> 0)) { - break; - } - HEAP32[$914 >> 2] = $915 + $tsize_242_i | 0; - var $931 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $933 = HEAP32[(__gm_ + 12 | 0) >> 2] + $tsize_242_i | 0; - var $934 = $931; - var $936 = $931 + 8 | 0; - if (($936 & 7 | 0) == 0) { - var $942 = 0; - } else { - var $942 = (-$936 | 0) & 7; - } - var $942; - var $945 = $933 - $942 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $934 + $942 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $945; - HEAP32[($934 + ($942 + 4 | 0) | 0) >> 2] = $945 | 1; - HEAP32[($934 + ($933 + 4 | 0) | 0) >> 2] = 40; - HEAP32[(__gm_ + 28 | 0) >> 2] = HEAP32[(_mparams + 16 | 0) >> 2]; - break $_$275; - } - var $sp_0_i = HEAP32[($sp_0_i + 8 | 0) >> 2]; - } - if ($tbase_243_i >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i; - } - var $955 = $tbase_243_i + $tsize_242_i | 0; - var $sp_1_i = __gm_ + 444 | 0; - while (1) { - var $sp_1_i; - if (($sp_1_i | 0) == 0) { - __label__ = 293; - break; - } - var $959 = $sp_1_i | 0; - if ((HEAP32[$959 >> 2] | 0) == ($955 | 0)) { - __label__ = 218; - break; - } - var $sp_1_i = HEAP32[($sp_1_i + 8 | 0) >> 2]; - } - do { - if (__label__ == 218) { - if (!((HEAP32[($sp_1_i + 12 | 0) >> 2] & 8 | 0) == 0)) { - break; - } - HEAP32[$959 >> 2] = $tbase_243_i; - var $970 = $sp_1_i + 4 | 0; - HEAP32[$970 >> 2] = HEAP32[$970 >> 2] + $tsize_242_i | 0; - var $974 = $tbase_243_i + 8 | 0; - if (($974 & 7 | 0) == 0) { - var $981 = 0; - } else { - var $981 = (-$974 | 0) & 7; - } - var $981; - var $984 = $tbase_243_i + ($tsize_242_i + 8 | 0) | 0; - if (($984 & 7 | 0) == 0) { - var $991 = 0; - } else { - var $991 = (-$984 | 0) & 7; - } - var $991; - var $992 = $tbase_243_i + ($991 + $tsize_242_i | 0) | 0; - var $993 = $992; - var $_sum_i16_i = $981 + $nb_0 | 0; - var $997 = $tbase_243_i + $_sum_i16_i | 0; - var $998 = $997; - var $999 = ($992 - ($tbase_243_i + $981 | 0) | 0) - $nb_0 | 0; - HEAP32[($tbase_243_i + ($981 + 4 | 0) | 0) >> 2] = $nb_0 | 3; - $_$314 : do { - if (($993 | 0) == (HEAP32[(__gm_ + 24 | 0) >> 2] | 0)) { - var $1007 = HEAP32[(__gm_ + 12 | 0) >> 2] + $999 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1007; - HEAP32[(__gm_ + 24 | 0) >> 2] = $998; - HEAP32[($tbase_243_i + ($_sum_i16_i + 4 | 0) | 0) >> 2] = $1007 | 1; - } else { - if (($993 | 0) == (HEAP32[(__gm_ + 20 | 0) >> 2] | 0)) { - var $1016 = HEAP32[(__gm_ + 8 | 0) >> 2] + $999 | 0; - HEAP32[(__gm_ + 8 | 0) >> 2] = $1016; - HEAP32[(__gm_ + 20 | 0) >> 2] = $998; - HEAP32[($tbase_243_i + ($_sum_i16_i + 4 | 0) | 0) >> 2] = $1016 | 1; - HEAP32[($tbase_243_i + ($1016 + $_sum_i16_i | 0) | 0) >> 2] = $1016; - } else { - var $_sum2_i18_i = $tsize_242_i + 4 | 0; - var $1025 = HEAP32[($tbase_243_i + ($_sum2_i18_i + $991 | 0) | 0) >> 2]; - if (($1025 & 3 | 0) == 1) { - var $1029 = $1025 & -8; - var $1030 = $1025 >>> 3; - $_$322 : do { - if ($1025 >>> 0 < 256) { - var $1035 = HEAP32[($tbase_243_i + (($991 | 8) + $tsize_242_i | 0) | 0) >> 2]; - var $1038 = HEAP32[($tbase_243_i + (($tsize_242_i + 12 | 0) + $991 | 0) | 0) >> 2]; - if (($1035 | 0) == ($1038 | 0)) { - HEAP32[(__gm_ | 0) >> 2] = HEAP32[(__gm_ | 0) >> 2] & (1 << $1030 ^ -1); - } else { - var $1049 = __gm_ + 40 + (($1025 >>> 2 & 1073741822) << 2) | 0; - do { - if (($1035 | 0) == ($1049 | 0)) { - __label__ = 233; - } else { - if ($1035 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - __label__ = 236; - break; - } - __label__ = 233; - break; - } - } while (0); - do { - if (__label__ == 233) { - if (!(($1038 | 0) == ($1049 | 0))) { - if ($1038 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - break; - } - } - HEAP32[($1035 + 12 | 0) >> 2] = $1038; - HEAP32[($1038 + 8 | 0) >> 2] = $1035; - break $_$322; - } - } while (0); - _abort(); - } - } else { - var $1064 = $992; - var $1067 = HEAP32[($tbase_243_i + (($991 | 24) + $tsize_242_i | 0) | 0) >> 2]; - var $1070 = HEAP32[($tbase_243_i + (($tsize_242_i + 12 | 0) + $991 | 0) | 0) >> 2]; - do { - if (($1070 | 0) == ($1064 | 0)) { - var $_sum67_i_i = $991 | 16; - var $1085 = $tbase_243_i + ($_sum2_i18_i + $_sum67_i_i | 0) | 0; - var $1086 = HEAP32[$1085 >> 2]; - if (($1086 | 0) == 0) { - var $1090 = $tbase_243_i + ($_sum67_i_i + $tsize_242_i | 0) | 0; - var $1091 = HEAP32[$1090 >> 2]; - if (($1091 | 0) == 0) { - var $R_1_i_i = 0; - break; - } - var $RP_0_i_i = $1090; - var $R_0_i_i = $1091; - } else { - var $RP_0_i_i = $1085; - var $R_0_i_i = $1086; - __label__ = 243; - } - while (1) { - var $R_0_i_i; - var $RP_0_i_i; - var $1093 = $R_0_i_i + 20 | 0; - var $1094 = HEAP32[$1093 >> 2]; - if (!(($1094 | 0) == 0)) { - var $RP_0_i_i = $1093; - var $R_0_i_i = $1094; - continue; - } - var $1097 = $R_0_i_i + 16 | 0; - var $1098 = HEAP32[$1097 >> 2]; - if (($1098 | 0) == 0) { - break; - } - var $RP_0_i_i = $1097; - var $R_0_i_i = $1098; - } - if ($RP_0_i_i >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[$RP_0_i_i >> 2] = 0; - var $R_1_i_i = $R_0_i_i; - } - } else { - var $1075 = HEAP32[($tbase_243_i + (($991 | 8) + $tsize_242_i | 0) | 0) >> 2]; - if ($1075 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($1075 + 12 | 0) >> 2] = $1070; - HEAP32[($1070 + 8 | 0) >> 2] = $1075; - var $R_1_i_i = $1070; - } - } - } while (0); - var $R_1_i_i; - if (($1067 | 0) == 0) { - break; - } - var $1110 = $tbase_243_i + (($tsize_242_i + 28 | 0) + $991 | 0) | 0; - var $1112 = __gm_ + 304 + (HEAP32[$1110 >> 2] << 2) | 0; - do { - if (($1064 | 0) == (HEAP32[$1112 >> 2] | 0)) { - HEAP32[$1112 >> 2] = $R_1_i_i; - if (!(($R_1_i_i | 0) == 0)) { - break; - } - HEAP32[(__gm_ + 4 | 0) >> 2] = HEAP32[(__gm_ + 4 | 0) >> 2] & (1 << HEAP32[$1110 >> 2] ^ -1); - break $_$322; - } - if ($1067 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - var $1126 = $1067 + 16 | 0; - if ((HEAP32[$1126 >> 2] | 0) == ($1064 | 0)) { - HEAP32[$1126 >> 2] = $R_1_i_i; - } else { - HEAP32[($1067 + 20 | 0) >> 2] = $R_1_i_i; - } - if (($R_1_i_i | 0) == 0) { - break $_$322; - } - } - } while (0); - if ($R_1_i_i >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i_i + 24 | 0) >> 2] = $1067; - var $_sum3132_i_i = $991 | 16; - var $1143 = HEAP32[($tbase_243_i + ($_sum3132_i_i + $tsize_242_i | 0) | 0) >> 2]; - if (!(($1143 | 0) == 0)) { - if ($1143 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i_i + 16 | 0) >> 2] = $1143; - HEAP32[($1143 + 24 | 0) >> 2] = $R_1_i_i; - } - } - var $1156 = HEAP32[($tbase_243_i + ($_sum2_i18_i + $_sum3132_i_i | 0) | 0) >> 2]; - if (($1156 | 0) == 0) { - break; - } - if ($1156 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0) { - _abort(); - } else { - HEAP32[($R_1_i_i + 20 | 0) >> 2] = $1156; - HEAP32[($1156 + 24 | 0) >> 2] = $R_1_i_i; - } - } - } - } while (0); - var $oldfirst_0_i_i = $tbase_243_i + (($1029 | $991) + $tsize_242_i | 0) | 0; - var $qsize_0_i_i = $1029 + $999 | 0; - } else { - var $oldfirst_0_i_i = $993; - var $qsize_0_i_i = $999; - } - var $qsize_0_i_i; - var $oldfirst_0_i_i; - var $1172 = $oldfirst_0_i_i + 4 | 0; - HEAP32[$1172 >> 2] = HEAP32[$1172 >> 2] & -2; - HEAP32[($tbase_243_i + ($_sum_i16_i + 4 | 0) | 0) >> 2] = $qsize_0_i_i | 1; - HEAP32[($tbase_243_i + ($qsize_0_i_i + $_sum_i16_i | 0) | 0) >> 2] = $qsize_0_i_i; - if ($qsize_0_i_i >>> 0 < 256) { - var $1184 = $qsize_0_i_i >>> 2 & 1073741822; - var $1186 = __gm_ + 40 + ($1184 << 2) | 0; - var $1187 = HEAP32[(__gm_ | 0) >> 2]; - var $1188 = 1 << ($qsize_0_i_i >>> 3); - do { - if (($1187 & $1188 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $1187 | $1188; - var $F4_0_i_i = $1186; - var $_pre_phi_i20_i = __gm_ + 40 + (($1184 + 2 | 0) << 2) | 0; - } else { - var $1194 = __gm_ + 40 + (($1184 + 2 | 0) << 2) | 0; - var $1195 = HEAP32[$1194 >> 2]; - if (!($1195 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F4_0_i_i = $1195; - var $_pre_phi_i20_i = $1194; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i20_i; - var $F4_0_i_i; - HEAP32[$_pre_phi_i20_i >> 2] = $998; - HEAP32[($F4_0_i_i + 12 | 0) >> 2] = $998; - HEAP32[($tbase_243_i + ($_sum_i16_i + 8 | 0) | 0) >> 2] = $F4_0_i_i; - HEAP32[($tbase_243_i + ($_sum_i16_i + 12 | 0) | 0) >> 2] = $1186; - } else { - var $1207 = $997; - var $1208 = $qsize_0_i_i >>> 8; - do { - if (($1208 | 0) == 0) { - var $I7_0_i_i = 0; - } else { - if ($qsize_0_i_i >>> 0 > 16777215) { - var $I7_0_i_i = 31; - break; - } - var $1215 = ($1208 + 1048320 | 0) >>> 16 & 8; - var $1216 = $1208 << $1215; - var $1219 = ($1216 + 520192 | 0) >>> 16 & 4; - var $1220 = $1216 << $1219; - var $1223 = ($1220 + 245760 | 0) >>> 16 & 2; - var $1229 = (14 - ($1219 | $1215 | $1223) | 0) + ($1220 << $1223 >>> 15) | 0; - var $I7_0_i_i = $qsize_0_i_i >>> (($1229 + 7 | 0) >>> 0) & 1 | $1229 << 1; - } - } while (0); - var $I7_0_i_i; - var $1236 = __gm_ + 304 + ($I7_0_i_i << 2) | 0; - HEAP32[($tbase_243_i + ($_sum_i16_i + 28 | 0) | 0) >> 2] = $I7_0_i_i; - HEAP32[($tbase_243_i + ($_sum_i16_i + 20 | 0) | 0) >> 2] = 0; - HEAP32[($tbase_243_i + ($_sum_i16_i + 16 | 0) | 0) >> 2] = 0; - var $1243 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1244 = 1 << $I7_0_i_i; - if (($1243 & $1244 | 0) == 0) { - HEAP32[(__gm_ + 4 | 0) >> 2] = $1243 | $1244; - HEAP32[$1236 >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 24 | 0) | 0) >> 2] = $1236; - HEAP32[($tbase_243_i + ($_sum_i16_i + 12 | 0) | 0) >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 8 | 0) | 0) >> 2] = $1207; - } else { - if (($I7_0_i_i | 0) == 31) { - var $1263 = 0; - } else { - var $1263 = 25 - ($I7_0_i_i >>> 1) | 0; - } - var $1263; - var $K8_0_i_i = $qsize_0_i_i << $1263; - var $T_0_i21_i = HEAP32[$1236 >> 2]; - while (1) { - var $T_0_i21_i; - var $K8_0_i_i; - if ((HEAP32[($T_0_i21_i + 4 | 0) >> 2] & -8 | 0) == ($qsize_0_i_i | 0)) { - var $1289 = $T_0_i21_i + 8 | 0; - var $1290 = HEAP32[$1289 >> 2]; - var $1292 = HEAP32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($T_0_i21_i >>> 0 < $1292 >>> 0)) { - if ($1290 >>> 0 < $1292 >>> 0) { - break; - } - HEAP32[($1290 + 12 | 0) >> 2] = $1207; - HEAP32[$1289 >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 8 | 0) | 0) >> 2] = $1290; - HEAP32[($tbase_243_i + ($_sum_i16_i + 12 | 0) | 0) >> 2] = $T_0_i21_i; - HEAP32[($tbase_243_i + ($_sum_i16_i + 24 | 0) | 0) >> 2] = 0; - break $_$314; - } - } while (0); - _abort(); - } else { - var $1272 = $T_0_i21_i + 16 + ($K8_0_i_i >>> 31 << 2) | 0; - var $1273 = HEAP32[$1272 >> 2]; - if (!(($1273 | 0) == 0)) { - var $K8_0_i_i = $K8_0_i_i << 1; - var $T_0_i21_i = $1273; - continue; - } - if (!($1272 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - HEAP32[$1272 >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 24 | 0) | 0) >> 2] = $T_0_i21_i; - HEAP32[($tbase_243_i + ($_sum_i16_i + 12 | 0) | 0) >> 2] = $1207; - HEAP32[($tbase_243_i + ($_sum_i16_i + 8 | 0) | 0) >> 2] = $1207; - break $_$314; - } - _abort(); - } - } - } - } - } - } - } while (0); - var $mem_0 = $tbase_243_i + ($981 | 8) | 0; - break $_$215; - } - } while (0); - var $1306 = $876; - var $sp_0_i_i_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i_i_i; - var $1309 = HEAP32[($sp_0_i_i_i | 0) >> 2]; - if (!($1309 >>> 0 > $1306 >>> 0)) { - var $1313 = HEAP32[($sp_0_i_i_i + 4 | 0) >> 2]; - if (($1309 + $1313 | 0) >>> 0 > $1306 >>> 0) { - var $1321 = $1309; - var $1320 = $1313; - break; - } - } - var $1318 = HEAP32[($sp_0_i_i_i + 8 | 0) >> 2]; - if (!(($1318 | 0) == 0)) { - var $sp_0_i_i_i = $1318; - continue; - } - var $1321 = 0; - var $1320 = 4; - break; - } - var $1320; - var $1321; - var $1322 = $1321 + $1320 | 0; - var $1324 = $1321 + ($1320 - 39 | 0) | 0; - if (($1324 & 7 | 0) == 0) { - var $1331 = 0; - } else { - var $1331 = (-$1324 | 0) & 7; - } - var $1331; - var $1332 = $1321 + (($1320 - 47 | 0) + $1331 | 0) | 0; - var $1336 = $1332 >>> 0 < ($876 + 16 | 0) >>> 0 ? $1306 : $1332; - var $1337 = $1336 + 8 | 0; - var $1340 = $tbase_243_i + 8 | 0; - if (($1340 & 7 | 0) == 0) { - var $1346 = 0; - } else { - var $1346 = (-$1340 | 0) & 7; - } - var $1346; - var $1350 = ($tsize_242_i - 40 | 0) - $1346 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $tbase_243_i + $1346 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1350; - HEAP32[($tbase_243_i + ($1346 + 4 | 0) | 0) >> 2] = $1350 | 1; - HEAP32[($tbase_243_i + ($tsize_242_i - 36 | 0) | 0) >> 2] = 40; - HEAP32[(__gm_ + 28 | 0) >> 2] = HEAP32[(_mparams + 16 | 0) >> 2]; - HEAP32[($1336 + 4 | 0) >> 2] = 27; - HEAP32[$1337 >> 2] = HEAP32[(__gm_ + 444 | 0) >> 2]; - HEAP32[$1337 + 4 >> 2] = HEAP32[(__gm_ + 444 | 0) + 4 >> 2]; - HEAP32[$1337 + 8 >> 2] = HEAP32[(__gm_ + 444 | 0) + 8 >> 2]; - HEAP32[$1337 + 12 >> 2] = HEAP32[(__gm_ + 444 | 0) + 12 >> 2]; - HEAP32[(__gm_ + 444 | 0) >> 2] = $tbase_243_i; - HEAP32[(__gm_ + 448 | 0) >> 2] = $tsize_242_i; - HEAP32[(__gm_ + 456 | 0) >> 2] = 0; - HEAP32[(__gm_ + 452 | 0) >> 2] = $1337; - var $1360 = $1336 + 28 | 0; - HEAP32[$1360 >> 2] = 7; - $_$426 : do { - if (($1336 + 32 | 0) >>> 0 < $1322 >>> 0) { - var $1363 = $1360; - while (1) { - var $1363; - var $1364 = $1363 + 4 | 0; - HEAP32[$1364 >> 2] = 7; - if (!(($1363 + 8 | 0) >>> 0 < $1322 >>> 0)) { - break $_$426; - } - var $1363 = $1364; - } - } - } while (0); - if (($1336 | 0) == ($1306 | 0)) { - break; - } - var $1372 = $1336 - $876 | 0; - var $1375 = $1306 + ($1372 + 4 | 0) | 0; - HEAP32[$1375 >> 2] = HEAP32[$1375 >> 2] & -2; - HEAP32[($876 + 4 | 0) >> 2] = $1372 | 1; - HEAP32[($1306 + $1372 | 0) >> 2] = $1372; - if ($1372 >>> 0 < 256) { - var $1385 = $1372 >>> 2 & 1073741822; - var $1387 = __gm_ + 40 + ($1385 << 2) | 0; - var $1388 = HEAP32[(__gm_ | 0) >> 2]; - var $1389 = 1 << ($1372 >>> 3); - do { - if (($1388 & $1389 | 0) == 0) { - HEAP32[(__gm_ | 0) >> 2] = $1388 | $1389; - var $F_0_i_i = $1387; - var $_pre_phi_i_i = __gm_ + 40 + (($1385 + 2 | 0) << 2) | 0; - } else { - var $1395 = __gm_ + 40 + (($1385 + 2 | 0) << 2) | 0; - var $1396 = HEAP32[$1395 >> 2]; - if (!($1396 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - var $F_0_i_i = $1396; - var $_pre_phi_i_i = $1395; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i_i; - var $F_0_i_i; - HEAP32[$_pre_phi_i_i >> 2] = $876; - HEAP32[($F_0_i_i + 12 | 0) >> 2] = $876; - HEAP32[($876 + 8 | 0) >> 2] = $F_0_i_i; - HEAP32[($876 + 12 | 0) >> 2] = $1387; - } else { - var $1406 = $876; - var $1407 = $1372 >>> 8; - do { - if (($1407 | 0) == 0) { - var $I1_0_i_i = 0; - } else { - if ($1372 >>> 0 > 16777215) { - var $I1_0_i_i = 31; - break; - } - var $1414 = ($1407 + 1048320 | 0) >>> 16 & 8; - var $1415 = $1407 << $1414; - var $1418 = ($1415 + 520192 | 0) >>> 16 & 4; - var $1419 = $1415 << $1418; - var $1422 = ($1419 + 245760 | 0) >>> 16 & 2; - var $1428 = (14 - ($1418 | $1414 | $1422) | 0) + ($1419 << $1422 >>> 15) | 0; - var $I1_0_i_i = $1372 >>> (($1428 + 7 | 0) >>> 0) & 1 | $1428 << 1; - } - } while (0); - var $I1_0_i_i; - var $1435 = __gm_ + 304 + ($I1_0_i_i << 2) | 0; - HEAP32[($876 + 28 | 0) >> 2] = $I1_0_i_i; - HEAP32[($876 + 20 | 0) >> 2] = 0; - HEAP32[($876 + 16 | 0) >> 2] = 0; - var $1439 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1440 = 1 << $I1_0_i_i; - if (($1439 & $1440 | 0) == 0) { - HEAP32[(__gm_ + 4 | 0) >> 2] = $1439 | $1440; - HEAP32[$1435 >> 2] = $1406; - HEAP32[($876 + 24 | 0) >> 2] = $1435; - HEAP32[($876 + 12 | 0) >> 2] = $876; - HEAP32[($876 + 8 | 0) >> 2] = $876; - } else { - if (($I1_0_i_i | 0) == 31) { - var $1455 = 0; - } else { - var $1455 = 25 - ($I1_0_i_i >>> 1) | 0; - } - var $1455; - var $K2_0_i_i = $1372 << $1455; - var $T_0_i_i = HEAP32[$1435 >> 2]; - while (1) { - var $T_0_i_i; - var $K2_0_i_i; - if ((HEAP32[($T_0_i_i + 4 | 0) >> 2] & -8 | 0) == ($1372 | 0)) { - var $1478 = $T_0_i_i + 8 | 0; - var $1479 = HEAP32[$1478 >> 2]; - var $1481 = HEAP32[(__gm_ + 16 | 0) >> 2]; - do { - if (!($T_0_i_i >>> 0 < $1481 >>> 0)) { - if ($1479 >>> 0 < $1481 >>> 0) { - break; - } - HEAP32[($1479 + 12 | 0) >> 2] = $1406; - HEAP32[$1478 >> 2] = $1406; - HEAP32[($876 + 8 | 0) >> 2] = $1479; - HEAP32[($876 + 12 | 0) >> 2] = $T_0_i_i; - HEAP32[($876 + 24 | 0) >> 2] = 0; - break $_$275; - } - } while (0); - _abort(); - } else { - var $1464 = $T_0_i_i + 16 + ($K2_0_i_i >>> 31 << 2) | 0; - var $1465 = HEAP32[$1464 >> 2]; - if (!(($1465 | 0) == 0)) { - var $K2_0_i_i = $K2_0_i_i << 1; - var $T_0_i_i = $1465; - continue; - } - if (!($1464 >>> 0 < HEAP32[(__gm_ + 16 | 0) >> 2] >>> 0)) { - HEAP32[$1464 >> 2] = $1406; - HEAP32[($876 + 24 | 0) >> 2] = $T_0_i_i; - HEAP32[($876 + 12 | 0) >> 2] = $876; - HEAP32[($876 + 8 | 0) >> 2] = $876; - break $_$275; - } - _abort(); - } - } - } - } - } - } while (0); - var $1491 = HEAP32[(__gm_ + 12 | 0) >> 2]; - if (!($1491 >>> 0 > $nb_0 >>> 0)) { - break; - } - var $1494 = $1491 - $nb_0 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1494; - var $1495 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $1496 = $1495; - HEAP32[(__gm_ + 24 | 0) >> 2] = $1496 + $nb_0 | 0; - HEAP32[($1496 + ($nb_0 + 4 | 0) | 0) >> 2] = $1494 | 1; - HEAP32[($1495 + 4 | 0) >> 2] = $nb_0 | 3; - var $mem_0 = $1495 + 8 | 0; - break $_$215; - } - } while (0); - HEAP32[___errno() >> 2] = 12; - var $mem_0 = 0; - } - } else { - var $706 = $703 - $nb_0 | 0; - var $707 = HEAP32[(__gm_ + 20 | 0) >> 2]; - if ($706 >>> 0 > 15) { - var $710 = $707; - HEAP32[(__gm_ + 20 | 0) >> 2] = $710 + $nb_0 | 0; - HEAP32[(__gm_ + 8 | 0) >> 2] = $706; - HEAP32[($710 + ($nb_0 + 4 | 0) | 0) >> 2] = $706 | 1; - HEAP32[($710 + $703 | 0) >> 2] = $706; - HEAP32[($707 + 4 | 0) >> 2] = $nb_0 | 3; - } else { - HEAP32[(__gm_ + 8 | 0) >> 2] = 0; - HEAP32[(__gm_ + 20 | 0) >> 2] = 0; - HEAP32[($707 + 4 | 0) >> 2] = $703 | 3; - var $725 = $707 + ($703 + 4 | 0) | 0; - HEAP32[$725 >> 2] = HEAP32[$725 >> 2] | 1; - } - var $mem_0 = $707 + 8 | 0; - } - } - } while (0); - var $mem_0; - return $mem_0; -} -function asm(x, y) { - x = +x; - y = y | 0; - var a = 0, b = +0; - a = cheez(y + ~~x | 0) | 0; - b = a * a; - fleefl(b | 0, a | 0); -} -function phi() { - if (wat()) { - var $10 = 1; - } else { - var $10 = (_init_mparams() | 0) != 0; - } - var $10; -} -function intoCond() { - var $115 = 22; - var $NumWords = __ZN4llvm15BitstreamCursor4ReadEj($117, 32); - if (($115 | 0) != 0) { - HEAP32[$115 >> 2] = $NumWords; - } -} -function math(a, b, c, d) { - print(Math_imul(d) + (Math_fround(c) + (a + Math_abs(b)))); -} -function td(x, y) { - HEAP32[tempDoublePtr >> 2] = x; - var xf = HEAPF32[tempDoublePtr >> 2]; - HEAP32[tempDoublePtr >> 2] = y; - func(xf, HEAPF32[tempDoublePtr >> 2]); - HEAPF64[tempDoublePtr >> 3] = x; - var xl = HEAP32[tempDoublePtr >> 2]; - var xh = HEAP32[tempDoublePtr >> 2]; - HEAPF64[tempDoublePtr >> 3] = y; - func(xl, xh, HEAP32[tempDoublePtr >> 2], HEAP32[tempDoublePtr >> 2]); -} - diff --git a/tests/optimizer/eliminator-test.js b/tests/optimizer/eliminator-test.js deleted file mode 100644 index c4e1ace9edac9..0000000000000 --- a/tests/optimizer/eliminator-test.js +++ /dev/null @@ -1,8880 +0,0 @@ -function a($directory) { - var $1 = _strlen($directory); - var $p_0 = $directory + $1 | 0; - chak($p_0); - var $210 = HEAP32[100]; // heaps alias each other! so this cannot be eliminated - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $210; - chak(); - var $210a = HEAP32[100]; // function calls can also modify memory - something(); - HEAP32[90] = $210a; - chak(); - var $a = $hack; // no mem use (just a global), so ok to eliminate - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $a; - chak(); - var $bb = HEAP32[11]; // ok to eliminate - var $b = ($bb+7)|0; // ok to eliminate by itself, but not with inlined $bb which is mem-using! - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $b; - chak(); - var $bb2 = HEAP32[11]; - HEAP32[111] = 321; - var $b2 = ($bb2+7)|0; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $b2; - chak(); - var $d = HEAP32[100]; // alias on next line, but that is where we are consumed - so ok. - HEAP32[1e3] = $d; - chak(); - var $e = func(); - HEAP32[1e3] = $e; - chak(); - var $e2 = func(); - tor($e2); - chak(); - var $e3 = HEAP[9]; - tor($e3); - barrier(); // same stuff, but with a var on top and assigns as the first and only def - var $$210, $$210a, $$a, $$bb, $$b, $$bb2, $$b2, $$d, $$e, $$e2, $$e3; - $$210 = HEAP32[100]; // heaps alias each other! so this cannot be eliminated - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$210; - chak(); - $$210a = HEAP32[100]; // function calls can also modify memory - something(); - HEAP32[90] = $$210a; - chak(); - $$a = $$hack; // no mem use, so ok to eliminate - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$a; - chak(); - $$bb = HEAP32[11]; // ok to eliminate - $$b = ($$bb+7)|0; // ok to eliminate by itself, but not with inlined $$bb which is mem-using! - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$b; - chak(); - $$bb2 = HEAP32[11]; - HEAP32[111] = 321; - $$b2 = ($$bb2+7)|0; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$b2; - chak(); - $$d = HEAP32[100]; // alias on next line, but that is where we are consumed - so ok. - HEAP32[1e3] = $$d; - chak(); - $$e = func(); - HEAP32[1e3] = $$e; - chak(); - $$e2 = func(); - tor($$e2); - chak(); - $$e3 = HEAP[9]; - tor($$e3); - barrier(); - var $65, $image, $51$s2, $71; - var $66 = HEAP32[$65 >> 2]; - var $71 = $66 - _int_ceildiv(HEAP32[$image >> 2], HEAP32[$51$s2]) | 0; - HEAP32[$65 >> 2] = _int_ceildivpow2($71, HEAP32[$51$s2 + 10]); - barr(); - var ONCE = sheep(); - while (ONCE) { - work(); - } - var ONCEb = 75; - while (ONCEb) { - work(); - } - var $26 = __ZL3minIiET_S0_S0_12(4096, 4096 - $16 | 0); // cannot eliminate this because the call might modify FUNCTION_TABLE - var $27 = FUNCTION_TABLE[$22]($18, $this + ($16 + 27) | 0, $26); - print($27); - chak(); - var zzz = 10; - do { - print(zzz); - } while (0); - var zzz1 = 10; - do { - print(zzz1); - } while (1); // cannot eliminate a do-while that is not one-time -} -function b() { - var $148 = _sqlite3Strlen30($147); - var $150 = HEAP32[$pExpr + 16 >> 2]; - if (($150 | 0) == 0) { - var $156 = 0; - } else { - var $156 = HEAP32[$150 >> 2]; - } - var $156; - HEAP32[$139 + ($136 << 4) + 4 >> 2] = _sqlite3FindFunction($145, $147, $148, $156, $135, 0); - farr(); - var $a = f1(); - var $b = f2() + $a; // this could be reordered to facilitate optimization - f3($b); - farr(); - var finality = cheez(); - return finality; -} -function c() { - var x = MEM[100], y = callMe(5), z = glob; // do not eliminate vars with multiple variables, if there is a call! - var w = x*2; - zoom(z); - hail(w); - sunk(y); - barrier(); - var x2 = MEM[100], y2 = $callMe2, z2 = glob; // no call, so ok - var w2 = x2*2; - zoom(z2); - hail(w2); - sunk(y2); - var fly = you(fools); - var one, two = three(); // more than one var here, so cannot eliminate |two=|, oh well - var noneed; - noneed = fools(you); - var noneed2; - noneed2 += fools(you2); - return; -} -function f() { - var unused; - var x = GLOB[1]; - var y = x + 1; - var z = y / 2; - HEAP[123] = z; -} -function g(a1, a2) { - var a = 1; - var b = a * 2; - var c = b - 1; - var qqq = "qwe"; - a = c; - foo(c); - var ww = 1, www, zzz = 2; - foo(zzz); - for (var i = 0; i < 5; i++) { - var q = { - a: 1 - } + [ 2, 3 ]; - } - for (var iterator in SOME_GLOBAL) { - quux(iterator); - } - var $0 = HEAP[5]; - MAYBE_HEAP[myglobal] = 123; - var $1 = $0 < 0; - if ($1) { - __label__ = 1; - } else { - __label__ = 2; - } - var sadijn = new asd; - sadijn2 = "qwe%sert"; - this.Module || (this.Module = {}); - var obj = { - 'quoted': 1, - "doublequoted": 2, - unquoted: 3, - 4: 5 - }; - obj(); // fake use -} -function h() { - var out; - bar(hello); - var hello = 5; - if (0) { - var sb1 = 21; - } - out = sb1; - if (0) { - var sb2 = 23; - } else { - out = sb2; - } - if (0) { - out = sb3; - } else { - var sb3 = 23; - } - for (var it = 0; it < 5; it++) { - x = y ? x + 1 : 7; - var x = -5; - } - var oneUse = glob; // for now, cannot eliminate into body or else of if - if (1) { - otherGlob = oneUse; - breakMe(); - } - var oneUse2 = glob2; - while (1) { - otherGlob2 = oneUse2; - breakMe(); - } - return out; -} -function strtok_part(b, j, f) { - var a; - for (;;) { - h = a == 13 ? h : 0; - a = HEAP[d + h]; - if (a == g != 0) break; - var h = h + 1; - if (a != 0) a = 13; - } -} -function py() { - var $4 = HEAP[__PyThreadState_Current]; - var $5 = $4 + 12; - var $7 = HEAP[$5] + 1; - var $8 = $7 + 12; - HEAP[$8] = 99; -} -var anon = function(x) { - var $4 = HEAP[__PyThreadState_Current]; - var $5 = $4 + 12; - var $7 = HEAP[$5] + 1; - var $8 = $4 + 12; - HEAP[$8] = $7; -} -function r($0) { - HEAP[$0 + 5 + 2] = 99+5+2+1; -} -function t() { - var $cmp2=($10) < ($11); - if ($cmp2) { __label__ = 3; } - var $cmp3=($12) < ($13); - if (!($cmp3)) { __label__ = 4; } -} -function f2() { - var $arrayidx64_phi_trans_insert = $vla + ($storemerge312 << 2) | 0; - var $_pre = HEAPU32[$arrayidx64_phi_trans_insert >> 2]; - var $phitmp = $storemerge312 + 1 | 0; - var $storemerge312 = $phitmp; - var $8 = $_pre; - c($8); -} -function f3($s, $tree, $k) { - // HEAP vars alias each other, and the loop can confuse us - var $0 = HEAPU32[($s + 2908 + ($k << 2) | 0) >> 2]; - while (1) { - HEAP32[($s + 2908 + ($storemerge_in << 2) | 0) >> 2] = $9; - } - HEAP32[($s + 2908 + ($storemerge_in << 2) | 0) >> 2] = $0; -} -function llvm3_1() { - while (check()) { - var $inc = $aj_0 + 1; - if ($curri_01 % $zj_0 == 0) { - break; - } - var $j_0 = $inc; - run($j_0 / 2); - } -} -function _inflate($strm, $flush) { - var __stackBase__ = STACKTOP; - STACKTOP += 4; - var __label__; - var $hbuf = __stackBase__; - var $cmp = ($strm | 0) == 0; - $_$2 : do { - if ($cmp) { - var $retval_0 = -2; - } else { - var $state1 = $strm + 28 | 0; - var $0 = HEAPU32[$state1 >> 2]; - var $cmp2 = ($0 | 0) == 0; - if ($cmp2) { - var $retval_0 = -2; - break; - } - var $next_out = $strm + 12 | 0; - var $1 = HEAP32[$next_out >> 2]; - var $cmp4 = ($1 | 0) == 0; - if ($cmp4) { - var $retval_0 = -2; - break; - } - var $next_in = $strm | 0; - var $2 = HEAP32[$next_in >> 2]; - var $cmp6 = ($2 | 0) == 0; - if ($cmp6) { - var $avail_in = $strm + 4 | 0; - var $3 = HEAP32[$avail_in >> 2]; - var $cmp7 = ($3 | 0) == 0; - if (!$cmp7) { - var $retval_0 = -2; - break; - } - } - var $4 = $0; - var $mode = $0 | 0; - var $5 = HEAP32[$mode >> 2]; - var $cmp9 = ($5 | 0) == 11; - if ($cmp9) { - HEAP32[$mode >> 2] = 12; - var $_pre = HEAP32[$next_out >> 2]; - var $_pre882 = HEAP32[$next_in >> 2]; - var $8 = $_pre; - var $7 = $_pre882; - var $6 = 12; - } else { - var $8 = $1; - var $7 = $2; - var $6 = $5; - } - var $6; - var $7; - var $8; - var $avail_out = $strm + 16 | 0; - var $9 = HEAP32[$avail_out >> 2]; - var $avail_in15 = $strm + 4 | 0; - var $10 = HEAPU32[$avail_in15 >> 2]; - var $11 = $0 + 56 | 0; - var $12 = HEAP32[$11 >> 2]; - var $13 = $0 + 60 | 0; - var $14 = HEAP32[$13 >> 2]; - var $15 = $0 + 8 | 0; - var $16 = $0 + 24 | 0; - var $arrayidx = $hbuf | 0; - var $arrayidx40 = $hbuf + 1 | 0; - var $17 = $0 + 16 | 0; - var $head = $0 + 32 | 0; - var $18 = $head; - var $msg = $strm + 24 | 0; - var $19 = $0 + 36 | 0; - var $20 = $0 + 20 | 0; - var $adler = $strm + 48 | 0; - var $21 = $0 + 64 | 0; - var $22 = $0 + 12 | 0; - var $flush_off = $flush - 5 | 0; - var $23 = $flush_off >>> 0 < 2; - var $24 = $0 + 4 | 0; - var $cmp660 = ($flush | 0) == 6; - var $25 = $0 + 7108 | 0; - var $26 = $0 + 84 | 0; - var $lencode1215 = $0 + 76 | 0; - var $27 = $lencode1215; - var $28 = $0 + 72 | 0; - var $29 = $0 + 7112 | 0; - var $30 = $0 + 68 | 0; - var $31 = $0 + 44 | 0; - var $32 = $0 + 7104 | 0; - var $33 = $0 + 48 | 0; - var $window = $0 + 52 | 0; - var $34 = $window; - var $35 = $0 + 40 | 0; - var $total_out = $strm + 20 | 0; - var $36 = $0 + 28 | 0; - var $arrayidx199 = $hbuf + 2 | 0; - var $arrayidx202 = $hbuf + 3 | 0; - var $37 = $0 + 96 | 0; - var $38 = $0 + 100 | 0; - var $39 = $0 + 92 | 0; - var $40 = $0 + 104 | 0; - var $lens = $0 + 112 | 0; - var $41 = $lens; - var $codes = $0 + 1328 | 0; - var $next861 = $0 + 108 | 0; - var $42 = $next861; - var $43 = $next861 | 0; - var $arraydecay860_c = $codes; - var $44 = $0 + 76 | 0; - var $arraydecay864 = $lens; - var $work = $0 + 752 | 0; - var $arraydecay867 = $work; - var $arrayidx1128 = $0 + 624 | 0; - var $45 = $arrayidx1128; - var $46 = $0 + 80 | 0; - var $47 = $0 + 88 | 0; - var $distcode1395 = $0 + 80 | 0; - var $48 = $distcode1395; - var $ret_0 = 0; - var $next_0 = $7; - var $put_0 = $8; - var $have_0 = $10; - var $left_0 = $9; - var $hold_0 = $12; - var $bits_0 = $14; - var $out_0 = $9; - var $49 = $6; - $_$12 : while (1) { - var $49; - var $out_0; - var $bits_0; - var $hold_0; - var $left_0; - var $have_0; - var $put_0; - var $next_0; - var $ret_0; - $_$14 : do { - if (($49 | 0) == 0) { - var $50 = HEAPU32[$15 >> 2]; - var $cmp19 = ($50 | 0) == 0; - if ($cmp19) { - HEAP32[$mode >> 2] = 12; - var $ret_0_be = $ret_0; - var $next_0_be = $next_0; - var $put_0_be = $put_0; - var $have_0_be = $have_0; - var $left_0_be = $left_0; - var $hold_0_be = $hold_0; - var $bits_0_be = $bits_0; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $next_1 = $next_0; - var $have_1 = $have_0; - var $hold_1 = $hold_0; - var $bits_1 = $bits_0; - while (1) { - var $bits_1; - var $hold_1; - var $have_1; - var $next_1; - var $cmp24 = $bits_1 >>> 0 < 16; - if (!$cmp24) { - break; - } - var $cmp26 = ($have_1 | 0) == 0; - if ($cmp26) { - var $ret_8 = $ret_0; - var $next_58 = $next_1; - var $have_58 = 0; - var $hold_54 = $hold_1; - var $bits_54 = $bits_1; - var $out_4 = $out_0; - break $_$12; - } - // XXX first chunk with a difference (no impact) - var $dec = $have_1 - 1 | 0; - var $incdec_ptr = $next_1 + 1 | 0; - var $51 = HEAPU8[$next_1]; - var $conv = $51 & 255; - var $shl = $conv << $bits_1; - var $add = $shl + $hold_1 | 0; - var $add29 = $bits_1 + 8 | 0; - var $next_1 = $incdec_ptr; - var $have_1 = $dec; - var $hold_1 = $add; - var $bits_1 = $add29; - } - var $and = $50 & 2; - var $tobool = ($and | 0) != 0; - var $cmp34 = ($hold_1 | 0) == 35615; - var $or_cond = $tobool & $cmp34; - if ($or_cond) { - var $call = _crc32(0, 0, 0); - HEAP32[$16 >> 2] = $call; - HEAP8[$arrayidx] = 31; - HEAP8[$arrayidx40] = -117; - var $52 = HEAP32[$16 >> 2]; - var $call42 = _crc32($52, $arrayidx, 2); - HEAP32[$16 >> 2] = $call42; - HEAP32[$mode >> 2] = 1; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = 0; - var $bits_0_be = 0; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$17 >> 2] = 0; - var $53 = HEAP32[$18 >> 2]; - var $cmp49 = ($53 | 0) == 0; - if ($cmp49) { - var $54 = $50; - } else { - var $done = $53 + 48 | 0; - HEAP32[$done >> 2] = -1; - var $_pre884 = HEAP32[$15 >> 2]; - var $54 = $_pre884; - } - var $54; - var $and55 = $54 & 1; - var $tobool56 = ($and55 | 0) == 0; - do { - if (!$tobool56) { - var $and58 = $hold_1 << 8; - var $shl59 = $and58 & 65280; - var $shr60 = $hold_1 >>> 8; - var $add61 = $shl59 + $shr60 | 0; - var $rem = ($add61 >>> 0) % 31; - var $tobool62 = ($rem | 0) == 0; - if (!$tobool62) { - break; - } - var $and66 = $hold_1 & 15; - var $cmp67 = ($and66 | 0) == 8; - if ($cmp67) { - var $shr74 = $hold_1 >>> 4; - var $sub = $bits_1 - 4 | 0; - var $and76 = $shr74 & 15; - var $add77 = $and76 + 8 | 0; - var $55 = HEAPU32[$19 >> 2]; - var $cmp78 = ($55 | 0) == 0; - do { - if (!$cmp78) { - var $cmp83 = $add77 >>> 0 > $55 >>> 0; - if (!$cmp83) { - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str3100 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = $shr74; - var $bits_0_be = $sub; - var $out_0_be = $out_0; - __label__ = 268; - break $_$14; - } - HEAP32[$19 >> 2] = $add77; - } while (0); - var $shl90 = 1 << $add77; - HEAP32[$20 >> 2] = $shl90; - var $call91 = _adler32(0, 0, 0); - HEAP32[$16 >> 2] = $call91; - HEAP32[$adler >> 2] = $call91; - var $and93 = $hold_1 >>> 12; - var $56 = $and93 & 2; - var $57 = $56 ^ 11; - HEAP32[$mode >> 2] = $57; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = 0; - var $bits_0_be = 0; - var $out_0_be = $out_0; - __label__ = 268; - break $_$14; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str299 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = $hold_1; - var $bits_0_be = $bits_1; - var $out_0_be = $out_0; - __label__ = 268; - break $_$14; - } - } while (0); - HEAP32[$msg >> 2] = STRING_TABLE.__str198 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_1; - var $put_0_be = $put_0; - var $have_0_be = $have_1; - var $left_0_be = $left_0; - var $hold_0_be = $hold_1; - var $bits_0_be = $bits_1; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (($49 | 0) == 1) { - var $next_2 = $next_0; - var $have_2 = $have_0; - var $hold_2 = $hold_0; - var $bits_2 = $bits_0; - while (1) { - var $bits_2; - var $hold_2; - var $have_2; - var $next_2; - var $cmp101 = $bits_2 >>> 0 < 16; - if (!$cmp101) { - break; - } - var $cmp105 = ($have_2 | 0) == 0; - if ($cmp105) { - var $ret_8 = $ret_0; - var $next_58 = $next_2; - var $have_58 = 0; - var $hold_54 = $hold_2; - var $bits_54 = $bits_2; - var $out_4 = $out_0; - break $_$12; - } - var $dec109 = $have_2 - 1 | 0; - var $incdec_ptr110 = $next_2 + 1 | 0; - var $58 = HEAPU8[$next_2]; - var $conv111 = $58 & 255; - var $shl112 = $conv111 << $bits_2; - var $add113 = $shl112 + $hold_2 | 0; - var $add114 = $bits_2 + 8 | 0; - var $next_2 = $incdec_ptr110; - var $have_2 = $dec109; - var $hold_2 = $add113; - var $bits_2 = $add114; - } - HEAP32[$17 >> 2] = $hold_2; - var $and120 = $hold_2 & 255; - var $cmp121 = ($and120 | 0) == 8; - if (!$cmp121) { - HEAP32[$msg >> 2] = STRING_TABLE.__str299 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_2; - var $put_0_be = $put_0; - var $have_0_be = $have_2; - var $left_0_be = $left_0; - var $hold_0_be = $hold_2; - var $bits_0_be = $bits_2; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $and128 = $hold_2 & 57344; - var $tobool129 = ($and128 | 0) == 0; - if ($tobool129) { - var $59 = HEAPU32[$18 >> 2]; - var $cmp135 = ($59 | 0) == 0; - if ($cmp135) { - var $60 = $hold_2; - } else { - var $shr138 = $hold_2 >>> 8; - var $and139 = $shr138 & 1; - var $text = $59 | 0; - HEAP32[$text >> 2] = $and139; - var $_pre887 = HEAP32[$17 >> 2]; - var $60 = $_pre887; - } - var $60; - var $and143 = $60 & 512; - var $tobool144 = ($and143 | 0) == 0; - if (!$tobool144) { - var $conv147 = $hold_2 & 255; - HEAP8[$arrayidx] = $conv147; - var $shr149 = $hold_2 >>> 8; - var $conv150 = $shr149 & 255; - HEAP8[$arrayidx40] = $conv150; - var $61 = HEAP32[$16 >> 2]; - var $call154 = _crc32($61, $arrayidx, 2); - HEAP32[$16 >> 2] = $call154; - } - HEAP32[$mode >> 2] = 2; - var $next_3 = $next_2; - var $have_3 = $have_2; - var $hold_3 = 0; - var $bits_3 = 0; - __label__ = 44; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str4101 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_2; - var $put_0_be = $put_0; - var $have_0_be = $have_2; - var $left_0_be = $left_0; - var $hold_0_be = $hold_2; - var $bits_0_be = $bits_2; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (($49 | 0) == 2) { - var $next_3 = $next_0; - var $have_3 = $have_0; - var $hold_3 = $hold_0; - var $bits_3 = $bits_0; - __label__ = 44; - } else if (($49 | 0) == 3) { - var $next_4 = $next_0; - var $have_4 = $have_0; - var $hold_4 = $hold_0; - var $bits_4 = $bits_0; - __label__ = 52; - } else if (($49 | 0) == 4) { - var $next_5 = $next_0; - var $have_5 = $have_0; - var $hold_5 = $hold_0; - var $bits_5 = $bits_0; - __label__ = 60; - } else if (($49 | 0) == 5) { - var $next_8 = $next_0; - var $have_8 = $have_0; - var $hold_8 = $hold_0; - var $bits_8 = $bits_0; - __label__ = 71; - } else if (($49 | 0) == 6) { - var $_pre888 = HEAP32[$17 >> 2]; - var $next_11 = $next_0; - var $have_11 = $have_0; - var $hold_9 = $hold_0; - var $bits_9 = $bits_0; - var $89 = $_pre888; - __label__ = 81; - break; - } else if (($49 | 0) == 7) { - var $next_13 = $next_0; - var $have_13 = $have_0; - var $hold_10 = $hold_0; - var $bits_10 = $bits_0; - __label__ = 94; - } else if (($49 | 0) == 8) { - var $next_15 = $next_0; - var $have_15 = $have_0; - var $hold_11 = $hold_0; - var $bits_11 = $bits_0; - __label__ = 107; - } else if (($49 | 0) == 9) { - var $next_18 = $next_0; - var $have_18 = $have_0; - var $hold_14 = $hold_0; - var $bits_14 = $bits_0; - while (1) { - var $bits_14; - var $hold_14; - var $have_18; - var $next_18; - var $cmp552 = $bits_14 >>> 0 < 32; - if (!$cmp552) { - break; - } - var $cmp556 = ($have_18 | 0) == 0; - if ($cmp556) { - var $ret_8 = $ret_0; - var $next_58 = $next_18; - var $have_58 = 0; - var $hold_54 = $hold_14; - var $bits_54 = $bits_14; - var $out_4 = $out_0; - break $_$12; - } - var $dec560 = $have_18 - 1 | 0; - var $incdec_ptr561 = $next_18 + 1 | 0; - var $114 = HEAPU8[$next_18]; - var $conv562 = $114 & 255; - var $shl563 = $conv562 << $bits_14; - var $add564 = $shl563 + $hold_14 | 0; - var $add565 = $bits_14 + 8 | 0; - var $next_18 = $incdec_ptr561; - var $have_18 = $dec560; - var $hold_14 = $add564; - var $bits_14 = $add565; - } - var $add581 = _llvm_bswap_i32($hold_14); - HEAP32[$16 >> 2] = $add581; - HEAP32[$adler >> 2] = $add581; - HEAP32[$mode >> 2] = 10; - var $next_19 = $next_18; - var $have_19 = $have_18; - var $hold_15 = 0; - var $bits_15 = 0; - __label__ = 120; - break; - } else if (($49 | 0) == 10) { - var $next_19 = $next_0; - var $have_19 = $have_0; - var $hold_15 = $hold_0; - var $bits_15 = $bits_0; - __label__ = 120; - } else if (($49 | 0) == 11) { - var $next_20 = $next_0; - var $have_20 = $have_0; - var $hold_16 = $hold_0; - var $bits_16 = $bits_0; - __label__ = 123; - } else if (($49 | 0) == 12) { - var $next_21 = $next_0; - var $have_21 = $have_0; - var $hold_17 = $hold_0; - var $bits_17 = $bits_0; - __label__ = 124; - } else if (($49 | 0) == 13) { - var $and681 = $bits_0 & 7; - var $shr682 = $hold_0 >>> ($and681 >>> 0); - var $sub684 = $bits_0 - $and681 | 0; - var $next_23 = $next_0; - var $have_23 = $have_0; - var $hold_19 = $shr682; - var $bits_19 = $sub684; - while (1) { - var $bits_19; - var $hold_19; - var $have_23; - var $next_23; - var $cmp689 = $bits_19 >>> 0 < 32; - if (!$cmp689) { - break; - } - var $cmp693 = ($have_23 | 0) == 0; - if ($cmp693) { - var $ret_8 = $ret_0; - var $next_58 = $next_23; - var $have_58 = 0; - var $hold_54 = $hold_19; - var $bits_54 = $bits_19; - var $out_4 = $out_0; - break $_$12; - } - var $dec697 = $have_23 - 1 | 0; - var $incdec_ptr698 = $next_23 + 1 | 0; - var $118 = HEAPU8[$next_23]; - var $conv699 = $118 & 255; - var $shl700 = $conv699 << $bits_19; - var $add701 = $shl700 + $hold_19 | 0; - var $add702 = $bits_19 + 8 | 0; - var $next_23 = $incdec_ptr698; - var $have_23 = $dec697; - var $hold_19 = $add701; - var $bits_19 = $add702; - } - var $and708 = $hold_19 & 65535; - var $shr709 = $hold_19 >>> 16; - var $xor = $shr709 ^ 65535; - var $cmp710 = ($and708 | 0) == ($xor | 0); - if (!$cmp710) { - HEAP32[$msg >> 2] = STRING_TABLE.__str7104 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_23; - var $put_0_be = $put_0; - var $have_0_be = $have_23; - var $left_0_be = $left_0; - var $hold_0_be = $hold_19; - var $bits_0_be = $bits_19; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$21 >> 2] = $and708; - HEAP32[$mode >> 2] = 14; - if ($cmp660) { - var $ret_8 = $ret_0; - var $next_58 = $next_23; - var $have_58 = $have_23; - var $hold_54 = 0; - var $bits_54 = 0; - var $out_4 = $out_0; - break $_$12; - } - var $next_24 = $next_23; - var $have_24 = $have_23; - var $hold_20 = 0; - var $bits_20 = 0; - __label__ = 143; - break; - } else if (($49 | 0) == 14) { - var $next_24 = $next_0; - var $have_24 = $have_0; - var $hold_20 = $hold_0; - var $bits_20 = $bits_0; - __label__ = 143; - } else if (($49 | 0) == 15) { - var $next_25 = $next_0; - var $have_25 = $have_0; - var $hold_21 = $hold_0; - var $bits_21 = $bits_0; - __label__ = 144; - } else if (($49 | 0) == 16) { - var $next_26 = $next_0; - var $have_26 = $have_0; - var $hold_22 = $hold_0; - var $bits_22 = $bits_0; - while (1) { - var $bits_22; - var $hold_22; - var $have_26; - var $next_26; - var $cmp755 = $bits_22 >>> 0 < 14; - if (!$cmp755) { - break; - } - var $cmp759 = ($have_26 | 0) == 0; - if ($cmp759) { - var $ret_8 = $ret_0; - var $next_58 = $next_26; - var $have_58 = 0; - var $hold_54 = $hold_22; - var $bits_54 = $bits_22; - var $out_4 = $out_0; - break $_$12; - } - var $dec763 = $have_26 - 1 | 0; - var $incdec_ptr764 = $next_26 + 1 | 0; - var $121 = HEAPU8[$next_26]; - var $conv765 = $121 & 255; - var $shl766 = $conv765 << $bits_22; - var $add767 = $shl766 + $hold_22 | 0; - var $add768 = $bits_22 + 8 | 0; - var $next_26 = $incdec_ptr764; - var $have_26 = $dec763; - var $hold_22 = $add767; - var $bits_22 = $add768; - } - var $and774 = $hold_22 & 31; - var $add775 = $and774 + 257 | 0; - HEAP32[$37 >> 2] = $add775; - var $shr777 = $hold_22 >>> 5; - var $and781 = $shr777 & 31; - var $add782 = $and781 + 1 | 0; - HEAP32[$38 >> 2] = $add782; - var $shr784 = $hold_22 >>> 10; - var $and788 = $shr784 & 15; - var $add789 = $and788 + 4 | 0; - HEAP32[$39 >> 2] = $add789; - var $shr791 = $hold_22 >>> 14; - var $sub792 = $bits_22 - 14 | 0; - var $cmp796 = $add775 >>> 0 > 286; - var $cmp800 = $add782 >>> 0 > 30; - var $or_cond894 = $cmp796 | $cmp800; - if ($or_cond894) { - HEAP32[$msg >> 2] = STRING_TABLE.__str8105 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_26; - var $put_0_be = $put_0; - var $have_0_be = $have_26; - var $left_0_be = $left_0; - var $hold_0_be = $shr791; - var $bits_0_be = $sub792; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$40 >> 2] = 0; - HEAP32[$mode >> 2] = 17; - var $next_27 = $next_26; - var $have_27 = $have_26; - var $hold_23 = $shr791; - var $bits_23 = $sub792; - __label__ = 154; - break; - } else if (($49 | 0) == 17) { - var $next_27 = $next_0; - var $have_27 = $have_0; - var $hold_23 = $hold_0; - var $bits_23 = $bits_0; - __label__ = 154; - } else if (($49 | 0) == 18) { - var $ret_1_ph = $ret_0; - var $next_29_ph = $next_0; - var $have_29_ph = $have_0; - var $hold_25_ph = $hold_0; - var $bits_25_ph = $bits_0; - __label__ = 164; - } else if (($49 | 0) == 19) { - var $ret_2 = $ret_0; - var $next_37 = $next_0; - var $have_37 = $have_0; - var $hold_33 = $hold_0; - var $bits_33 = $bits_0; - __label__ = 205; - } else if (($49 | 0) == 20) { - var $ret_3 = $ret_0; - var $next_38 = $next_0; - var $have_38 = $have_0; - var $hold_34 = $hold_0; - var $bits_34 = $bits_0; - __label__ = 206; - } else if (($49 | 0) == 21) { - var $_pre889 = HEAP32[$28 >> 2]; - var $ret_4 = $ret_0; - var $next_42 = $next_0; - var $have_42 = $have_0; - var $hold_38 = $hold_0; - var $bits_38 = $bits_0; - var $156 = $_pre889; - __label__ = 227; - break; - } else if (($49 | 0) == 22) { - var $ret_5_ph = $ret_0; - var $next_45_ph = $next_0; - var $have_45_ph = $have_0; - var $hold_41_ph = $hold_0; - var $bits_41_ph = $bits_0; - __label__ = 234; - } else if (($49 | 0) == 23) { - var $_pre891 = HEAP32[$28 >> 2]; - var $ret_6 = $ret_0; - var $next_48 = $next_0; - var $have_48 = $have_0; - var $hold_44 = $hold_0; - var $bits_44 = $bits_0; - var $167 = $_pre891; - __label__ = 248; - break; - } else if (($49 | 0) == 24) { - var $ret_7 = $ret_0; - var $next_51 = $next_0; - var $have_51 = $have_0; - var $hold_47 = $hold_0; - var $bits_47 = $bits_0; - __label__ = 254; - } else if (($49 | 0) == 25) { - var $cmp1615 = ($left_0 | 0) == 0; - if ($cmp1615) { - var $ret_8 = $ret_0; - var $next_58 = $next_0; - var $have_58 = $have_0; - var $hold_54 = $hold_0; - var $bits_54 = $bits_0; - var $out_4 = $out_0; - break $_$12; - } - var $186 = HEAP32[$21 >> 2]; - var $conv1620 = $186 & 255; - var $incdec_ptr1621 = $put_0 + 1 | 0; - HEAP8[$put_0] = $conv1620; - var $dec1622 = $left_0 - 1 | 0; - HEAP32[$mode >> 2] = 20; - var $ret_0_be = $ret_0; - var $next_0_be = $next_0; - var $put_0_be = $incdec_ptr1621; - var $have_0_be = $have_0; - var $left_0_be = $dec1622; - var $hold_0_be = $hold_0; - var $bits_0_be = $bits_0; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (($49 | 0) == 26) { - var $187 = HEAP32[$15 >> 2]; - var $tobool1626 = ($187 | 0) == 0; - do { - if (!$tobool1626) { - var $next_52 = $next_0; - var $have_52 = $have_0; - var $hold_48 = $hold_0; - var $bits_48 = $bits_0; - while (1) { - var $bits_48; - var $hold_48; - var $have_52; - var $next_52; - var $cmp1630 = $bits_48 >>> 0 < 32; - if (!$cmp1630) { - break; - } - var $cmp1634 = ($have_52 | 0) == 0; - if ($cmp1634) { - var $ret_8 = $ret_0; - var $next_58 = $next_52; - var $have_58 = 0; - var $hold_54 = $hold_48; - var $bits_54 = $bits_48; - var $out_4 = $out_0; - break $_$12; - } - var $dec1638 = $have_52 - 1 | 0; - var $incdec_ptr1639 = $next_52 + 1 | 0; - var $188 = HEAPU8[$next_52]; - var $conv1640 = $188 & 255; - var $shl1641 = $conv1640 << $bits_48; - var $add1642 = $shl1641 + $hold_48 | 0; - var $add1643 = $bits_48 + 8 | 0; - var $next_52 = $incdec_ptr1639; - var $have_52 = $dec1638; - var $hold_48 = $add1642; - var $bits_48 = $add1643; - } - var $sub1649 = $out_0 - $left_0 | 0; - var $189 = HEAP32[$total_out >> 2]; - var $add1650 = $189 + $sub1649 | 0; - HEAP32[$total_out >> 2] = $add1650; - var $190 = HEAP32[$36 >> 2]; - var $add1651 = $190 + $sub1649 | 0; - HEAP32[$36 >> 2] = $add1651; - var $tobool1652 = ($out_0 | 0) == ($left_0 | 0); - if (!$tobool1652) { - var $191 = HEAP32[$17 >> 2]; - var $tobool1655 = ($191 | 0) == 0; - var $192 = HEAP32[$16 >> 2]; - var $idx_neg1658 = -$sub1649 | 0; - var $add_ptr1659 = $put_0 + $idx_neg1658 | 0; - if ($tobool1655) { - var $call1665 = _adler32($192, $add_ptr1659, $sub1649); - var $cond1667 = $call1665; - } else { - var $call1660 = _crc32($192, $add_ptr1659, $sub1649); - var $cond1667 = $call1660; - } - var $cond1667; - HEAP32[$16 >> 2] = $cond1667; - HEAP32[$adler >> 2] = $cond1667; - } - var $193 = HEAP32[$17 >> 2]; - var $tobool1672 = ($193 | 0) == 0; - if ($tobool1672) { - var $add1685 = _llvm_bswap_i32($hold_48); - var $cond1687 = $add1685; - } else { - var $cond1687 = $hold_48; - } - var $cond1687; - var $194 = HEAP32[$16 >> 2]; - var $cmp1689 = ($cond1687 | 0) == ($194 | 0); - if ($cmp1689) { - var $next_53 = $next_52; - var $have_53 = $have_52; - var $hold_49 = 0; - var $bits_49 = 0; - var $out_1 = $left_0; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str17114 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_52; - var $put_0_be = $put_0; - var $have_0_be = $have_52; - var $left_0_be = $left_0; - var $hold_0_be = $hold_48; - var $bits_0_be = $bits_48; - var $out_0_be = $left_0; - __label__ = 268; - break $_$14; - } - var $next_53 = $next_0; - var $have_53 = $have_0; - var $hold_49 = $hold_0; - var $bits_49 = $bits_0; - var $out_1 = $out_0; - } while (0); - var $out_1; - var $bits_49; - var $hold_49; - var $have_53; - var $next_53; - HEAP32[$mode >> 2] = 27; - var $next_54 = $next_53; - var $have_54 = $have_53; - var $hold_50 = $hold_49; - var $bits_50 = $bits_49; - var $out_2 = $out_1; - __label__ = 286; - break; - } else if (($49 | 0) == 27) { - var $next_54 = $next_0; - var $have_54 = $have_0; - var $hold_50 = $hold_0; - var $bits_50 = $bits_0; - var $out_2 = $out_0; - __label__ = 286; - } else if (($49 | 0) == 28) { - var $ret_8 = 1; - var $next_58 = $next_0; - var $have_58 = $have_0; - var $hold_54 = $hold_0; - var $bits_54 = $bits_0; - var $out_4 = $out_0; - break $_$12; - } else if (($49 | 0) == 29) { - var $ret_8 = -3; - var $next_58 = $next_0; - var $have_58 = $have_0; - var $hold_54 = $hold_0; - var $bits_54 = $bits_0; - var $out_4 = $out_0; - break $_$12; - } else if (($49 | 0) == 30) { - var $retval_0 = -4; - break $_$2; - } else { - var $retval_0 = -2; - break $_$2; - } - } while (0); - $_$106 : do { - if (__label__ == 44) { - while (1) { - var $bits_3; - var $hold_3; - var $have_3; - var $next_3; - var $cmp164 = $bits_3 >>> 0 < 32; - if (!$cmp164) { - break; - } - var $cmp168 = ($have_3 | 0) == 0; - if ($cmp168) { - var $ret_8 = $ret_0; - var $next_58 = $next_3; - var $have_58 = 0; - var $hold_54 = $hold_3; - var $bits_54 = $bits_3; - var $out_4 = $out_0; - break $_$12; - } - var $dec172 = $have_3 - 1 | 0; - var $incdec_ptr173 = $next_3 + 1 | 0; - var $62 = HEAPU8[$next_3]; - var $conv174 = $62 & 255; - var $shl175 = $conv174 << $bits_3; - var $add176 = $shl175 + $hold_3 | 0; - var $add177 = $bits_3 + 8 | 0; - var $next_3 = $incdec_ptr173; - var $have_3 = $dec172; - var $hold_3 = $add176; - var $bits_3 = $add177; - } - var $63 = HEAP32[$18 >> 2]; - var $cmp182 = ($63 | 0) == 0; - if (!$cmp182) { - var $time = $63 + 4 | 0; - HEAP32[$time >> 2] = $hold_3; - } - var $64 = HEAP32[$17 >> 2]; - var $and188 = $64 & 512; - var $tobool189 = ($and188 | 0) == 0; - if (!$tobool189) { - var $conv192 = $hold_3 & 255; - HEAP8[$arrayidx] = $conv192; - var $shr194 = $hold_3 >>> 8; - var $conv195 = $shr194 & 255; - HEAP8[$arrayidx40] = $conv195; - var $shr197 = $hold_3 >>> 16; - var $conv198 = $shr197 & 255; - HEAP8[$arrayidx199] = $conv198; - var $shr200 = $hold_3 >>> 24; - var $conv201 = $shr200 & 255; - HEAP8[$arrayidx202] = $conv201; - var $65 = HEAP32[$16 >> 2]; - var $call205 = _crc32($65, $arrayidx, 4); - HEAP32[$16 >> 2] = $call205; - } - HEAP32[$mode >> 2] = 3; - var $next_4 = $next_3; - var $have_4 = $have_3; - var $hold_4 = 0; - var $bits_4 = 0; - __label__ = 52; - break; - } else if (__label__ == 120) { - var $bits_15; - var $hold_15; - var $have_19; - var $next_19; - var $115 = HEAP32[$22 >> 2]; - var $cmp589 = ($115 | 0) == 0; - if ($cmp589) { - HEAP32[$next_out >> 2] = $put_0; - HEAP32[$avail_out >> 2] = $left_0; - HEAP32[$next_in >> 2] = $next_19; - HEAP32[$avail_in15 >> 2] = $have_19; - HEAP32[$11 >> 2] = $hold_15; - HEAP32[$13 >> 2] = $bits_15; - var $retval_0 = 2; - break $_$2; - } - var $call602 = _adler32(0, 0, 0); - HEAP32[$16 >> 2] = $call602; - HEAP32[$adler >> 2] = $call602; - HEAP32[$mode >> 2] = 11; - var $next_20 = $next_19; - var $have_20 = $have_19; - var $hold_16 = $hold_15; - var $bits_16 = $bits_15; - __label__ = 123; - break; - } else if (__label__ == 143) { - var $bits_20; - var $hold_20; - var $have_24; - var $next_24; - HEAP32[$mode >> 2] = 15; - var $next_25 = $next_24; - var $have_25 = $have_24; - var $hold_21 = $hold_20; - var $bits_21 = $bits_20; - __label__ = 144; - break; - } else if (__label__ == 154) { - while (1) { - var $bits_23; - var $hold_23; - var $have_27; - var $next_27; - var $122 = HEAPU32[$40 >> 2]; - var $123 = HEAPU32[$39 >> 2]; - var $cmp812 = $122 >>> 0 < $123 >>> 0; - if (!$cmp812) { - break; - } - var $next_28 = $next_27; - var $have_28 = $have_27; - var $hold_24 = $hold_23; - var $bits_24 = $bits_23; - while (1) { - var $bits_24; - var $hold_24; - var $have_28; - var $next_28; - var $cmp817 = $bits_24 >>> 0 < 3; - if (!$cmp817) { - break; - } - var $cmp821 = ($have_28 | 0) == 0; - if ($cmp821) { - var $ret_8 = $ret_0; - var $next_58 = $next_28; - var $have_58 = 0; - var $hold_54 = $hold_24; - var $bits_54 = $bits_24; - var $out_4 = $out_0; - break $_$12; - } - var $dec825 = $have_28 - 1 | 0; - var $incdec_ptr826 = $next_28 + 1 | 0; - var $124 = HEAPU8[$next_28]; - var $conv827 = $124 & 255; - var $shl828 = $conv827 << $bits_24; - var $add829 = $shl828 + $hold_24 | 0; - var $add830 = $bits_24 + 8 | 0; - var $next_28 = $incdec_ptr826; - var $have_28 = $dec825; - var $hold_24 = $add829; - var $bits_24 = $add830; - } - var $hold_24_tr = $hold_24 & 65535; - var $conv837 = $hold_24_tr & 7; - var $inc839 = $122 + 1 | 0; - HEAP32[$40 >> 2] = $inc839; - var $arrayidx840 = _inflate_order + ($122 << 1) | 0; - var $125 = HEAPU16[$arrayidx840 >> 1]; - var $idxprom = $125 & 65535; - var $arrayidx841 = $41 + ($idxprom << 1) | 0; - HEAP16[$arrayidx841 >> 1] = $conv837; - var $shr843 = $hold_24 >>> 3; - var $sub844 = $bits_24 - 3 | 0; - var $next_27 = $next_28; - var $have_27 = $have_28; - var $hold_23 = $shr843; - var $bits_23 = $sub844; - } - var $cmp850111 = $122 >>> 0 < 19; - $_$131 : do { - if ($cmp850111) { - var $126 = $122; - while (1) { - var $126; - var $inc854 = $126 + 1 | 0; - HEAP32[$40 >> 2] = $inc854; - var $arrayidx855 = _inflate_order + ($126 << 1) | 0; - var $127 = HEAPU16[$arrayidx855 >> 1]; - var $idxprom856 = $127 & 65535; - var $arrayidx858 = $41 + ($idxprom856 << 1) | 0; - HEAP16[$arrayidx858 >> 1] = 0; - var $_pr = HEAPU32[$40 >> 2]; - var $cmp850 = $_pr >>> 0 < 19; - if (!$cmp850) { - break $_$131; - } - var $126 = $_pr; - } - } - } while (0); - HEAP32[$43 >> 2] = $arraydecay860_c; - HEAP32[$44 >> 2] = $arraydecay860_c; - HEAP32[$26 >> 2] = 7; - var $call868 = _inflate_table(0, $arraydecay864, 19, $42, $26, $arraydecay867); - var $tobool869 = ($call868 | 0) == 0; - if ($tobool869) { - HEAP32[$40 >> 2] = 0; - HEAP32[$mode >> 2] = 18; - var $ret_1_ph = 0; - var $next_29_ph = $next_27; - var $have_29_ph = $have_27; - var $hold_25_ph = $hold_23; - var $bits_25_ph = $bits_23; - __label__ = 164; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str9106 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $call868; - var $next_0_be = $next_27; - var $put_0_be = $put_0; - var $have_0_be = $have_27; - var $left_0_be = $left_0; - var $hold_0_be = $hold_23; - var $bits_0_be = $bits_23; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (__label__ == 286) { - var $out_2; - var $bits_50; - var $hold_50; - var $have_54; - var $next_54; - var $195 = HEAP32[$15 >> 2]; - var $tobool1702 = ($195 | 0) == 0; - do { - if (!$tobool1702) { - var $196 = HEAP32[$17 >> 2]; - var $tobool1705 = ($196 | 0) == 0; - if ($tobool1705) { - var $next_56 = $next_54; - var $have_56 = $have_54; - var $hold_52 = $hold_50; - var $bits_52 = $bits_50; - break; - } - var $next_55 = $next_54; - var $have_55 = $have_54; - var $hold_51 = $hold_50; - var $bits_51 = $bits_50; - while (1) { - var $bits_51; - var $hold_51; - var $have_55; - var $next_55; - var $cmp1709 = $bits_51 >>> 0 < 32; - if (!$cmp1709) { - break; - } - var $cmp1713 = ($have_55 | 0) == 0; - if ($cmp1713) { - var $ret_8 = $ret_0; - var $next_58 = $next_55; - var $have_58 = 0; - var $hold_54 = $hold_51; - var $bits_54 = $bits_51; - var $out_4 = $out_2; - break $_$12; - } - var $dec1717 = $have_55 - 1 | 0; - var $incdec_ptr1718 = $next_55 + 1 | 0; - var $197 = HEAPU8[$next_55]; - var $conv1719 = $197 & 255; - var $shl1720 = $conv1719 << $bits_51; - var $add1721 = $shl1720 + $hold_51 | 0; - var $add1722 = $bits_51 + 8 | 0; - var $next_55 = $incdec_ptr1718; - var $have_55 = $dec1717; - var $hold_51 = $add1721; - var $bits_51 = $add1722; - } - var $198 = HEAP32[$36 >> 2]; - var $cmp1729 = ($hold_51 | 0) == ($198 | 0); - if ($cmp1729) { - var $next_56 = $next_55; - var $have_56 = $have_55; - var $hold_52 = 0; - var $bits_52 = 0; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str18115 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_55; - var $put_0_be = $put_0; - var $have_0_be = $have_55; - var $left_0_be = $left_0; - var $hold_0_be = $hold_51; - var $bits_0_be = $bits_51; - var $out_0_be = $out_2; - __label__ = 268; - break $_$106; - } - var $next_56 = $next_54; - var $have_56 = $have_54; - var $hold_52 = $hold_50; - var $bits_52 = $bits_50; - } while (0); - var $bits_52; - var $hold_52; - var $have_56; - var $next_56; - HEAP32[$mode >> 2] = 28; - var $ret_8 = 1; - var $next_58 = $next_56; - var $have_58 = $have_56; - var $hold_54 = $hold_52; - var $bits_54 = $bits_52; - var $out_4 = $out_2; - break $_$12; - } - } while (0); - $_$148 : do { - if (__label__ == 52) { - while (1) { - var $bits_4; - var $hold_4; - var $have_4; - var $next_4; - var $cmp215 = $bits_4 >>> 0 < 16; - if (!$cmp215) { - break; - } - var $cmp219 = ($have_4 | 0) == 0; - if ($cmp219) { - var $ret_8 = $ret_0; - var $next_58 = $next_4; - var $have_58 = 0; - var $hold_54 = $hold_4; - var $bits_54 = $bits_4; - var $out_4 = $out_0; - break $_$12; - } - var $dec223 = $have_4 - 1 | 0; - var $incdec_ptr224 = $next_4 + 1 | 0; - var $66 = HEAPU8[$next_4]; - var $conv225 = $66 & 255; - var $shl226 = $conv225 << $bits_4; - var $add227 = $shl226 + $hold_4 | 0; - var $add228 = $bits_4 + 8 | 0; - var $next_4 = $incdec_ptr224; - var $have_4 = $dec223; - var $hold_4 = $add227; - var $bits_4 = $add228; - } - var $67 = HEAP32[$18 >> 2]; - var $cmp233 = ($67 | 0) == 0; - if (!$cmp233) { - var $and236 = $hold_4 & 255; - var $xflags = $67 + 8 | 0; - HEAP32[$xflags >> 2] = $and236; - var $shr238 = $hold_4 >>> 8; - var $68 = HEAP32[$18 >> 2]; - var $os = $68 + 12 | 0; - HEAP32[$os >> 2] = $shr238; - } - var $69 = HEAP32[$17 >> 2]; - var $and242 = $69 & 512; - var $tobool243 = ($and242 | 0) == 0; - if (!$tobool243) { - var $conv246 = $hold_4 & 255; - HEAP8[$arrayidx] = $conv246; - var $shr248 = $hold_4 >>> 8; - var $conv249 = $shr248 & 255; - HEAP8[$arrayidx40] = $conv249; - var $70 = HEAP32[$16 >> 2]; - var $call253 = _crc32($70, $arrayidx, 2); - HEAP32[$16 >> 2] = $call253; - } - HEAP32[$mode >> 2] = 4; - var $next_5 = $next_4; - var $have_5 = $have_4; - var $hold_5 = 0; - var $bits_5 = 0; - __label__ = 60; - break; - } else if (__label__ == 123) { - var $bits_16; - var $hold_16; - var $have_20; - var $next_20; - if ($23) { - var $ret_8 = $ret_0; - var $next_58 = $next_20; - var $have_58 = $have_20; - var $hold_54 = $hold_16; - var $bits_54 = $bits_16; - var $out_4 = $out_0; - break $_$12; - } - var $next_21 = $next_20; - var $have_21 = $have_20; - var $hold_17 = $hold_16; - var $bits_17 = $bits_16; - __label__ = 124; - break; - } else if (__label__ == 144) { - var $bits_21; - var $hold_21; - var $have_25; - var $next_25; - var $119 = HEAPU32[$21 >> 2]; - var $tobool730 = ($119 | 0) == 0; - if ($tobool730) { - HEAP32[$mode >> 2] = 11; - var $ret_0_be = $ret_0; - var $next_0_be = $next_25; - var $put_0_be = $put_0; - var $have_0_be = $have_25; - var $left_0_be = $left_0; - var $hold_0_be = $hold_21; - var $bits_0_be = $bits_21; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $cmp732 = $119 >>> 0 > $have_25 >>> 0; - var $copy_3 = $cmp732 ? $have_25 : $119; - var $cmp736 = $copy_3 >>> 0 > $left_0 >>> 0; - var $copy_4 = $cmp736 ? $left_0 : $copy_3; - var $cmp740 = ($copy_4 | 0) == 0; - if ($cmp740) { - var $ret_8 = $ret_0; - var $next_58 = $next_25; - var $have_58 = $have_25; - var $hold_54 = $hold_21; - var $bits_54 = $bits_21; - var $out_4 = $out_0; - break $_$12; - } - _memcpy($put_0, $next_25, $copy_4, 1); - var $sub744 = $have_25 - $copy_4 | 0; - var $add_ptr745 = $next_25 + $copy_4 | 0; - var $sub746 = $left_0 - $copy_4 | 0; - var $add_ptr747 = $put_0 + $copy_4 | 0; - var $120 = HEAP32[$21 >> 2]; - var $sub749 = $120 - $copy_4 | 0; - HEAP32[$21 >> 2] = $sub749; - var $ret_0_be = $ret_0; - var $next_0_be = $add_ptr745; - var $put_0_be = $add_ptr747; - var $have_0_be = $sub744; - var $left_0_be = $sub746; - var $hold_0_be = $hold_21; - var $bits_0_be = $bits_21; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (__label__ == 164) { - var $bits_25_ph; - var $hold_25_ph; - var $have_29_ph; - var $next_29_ph; - var $ret_1_ph; - var $next_29 = $next_29_ph; - var $have_29 = $have_29_ph; - var $hold_25 = $hold_25_ph; - var $bits_25 = $bits_25_ph; - $_$167 : while (1) { - var $bits_25; - var $hold_25; - var $have_29; - var $next_29; - var $128 = HEAPU32[$40 >> 2]; - var $129 = HEAPU32[$37 >> 2]; - var $130 = HEAP32[$38 >> 2]; - var $add881 = $130 + $129 | 0; - var $cmp882 = $128 >>> 0 < $add881 >>> 0; - if ($cmp882) { - var $131 = HEAP32[$26 >> 2]; - var $shl887 = 1 << $131; - var $sub888 = $shl887 - 1 | 0; - var $132 = HEAPU32[$27 >> 2]; - var $next_30 = $next_29; - var $have_30 = $have_29; - var $hold_26 = $hold_25; - var $bits_26 = $bits_25; - while (1) { - var $bits_26; - var $hold_26; - var $have_30; - var $next_30; - var $and889 = $sub888 & $hold_26; - var $arrayidx891_1 = $132 + ($and889 << 2) + 1 | 0; - var $tmp25 = HEAPU8[$arrayidx891_1]; - var $conv893 = $tmp25 & 255; - var $cmp894 = $conv893 >>> 0 > $bits_26 >>> 0; - if (!$cmp894) { - break; - } - var $cmp899 = ($have_30 | 0) == 0; - if ($cmp899) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_30; - var $have_58 = 0; - var $hold_54 = $hold_26; - var $bits_54 = $bits_26; - var $out_4 = $out_0; - break $_$12; - } - var $dec903 = $have_30 - 1 | 0; - var $incdec_ptr904 = $next_30 + 1 | 0; - var $133 = HEAPU8[$next_30]; - var $conv905 = $133 & 255; - var $shl906 = $conv905 << $bits_26; - var $add907 = $shl906 + $hold_26 | 0; - var $add908 = $bits_26 + 8 | 0; - var $next_30 = $incdec_ptr904; - var $have_30 = $dec903; - var $hold_26 = $add907; - var $bits_26 = $add908; - } - var $arrayidx891_2 = $132 + ($and889 << 2) + 2 | 0; - var $tmp26 = HEAPU16[$arrayidx891_2 >> 1]; - var $cmp912 = ($tmp26 & 65535) < 16; - if ($cmp912) { - var $next_31 = $next_30; - var $have_31 = $have_30; - var $hold_27 = $hold_26; - var $bits_27 = $bits_26; - while (1) { - var $bits_27; - var $hold_27; - var $have_31; - var $next_31; - var $cmp919 = $bits_27 >>> 0 < $conv893 >>> 0; - if (!$cmp919) { - break; - } - var $cmp923 = ($have_31 | 0) == 0; - if ($cmp923) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_31; - var $have_58 = 0; - var $hold_54 = $hold_27; - var $bits_54 = $bits_27; - var $out_4 = $out_0; - break $_$12; - } - var $dec927 = $have_31 - 1 | 0; - var $incdec_ptr928 = $next_31 + 1 | 0; - var $134 = HEAPU8[$next_31]; - var $conv929 = $134 & 255; - var $shl930 = $conv929 << $bits_27; - var $add931 = $shl930 + $hold_27 | 0; - var $add932 = $bits_27 + 8 | 0; - var $next_31 = $incdec_ptr928; - var $have_31 = $dec927; - var $hold_27 = $add931; - var $bits_27 = $add932; - } - var $shr941 = $hold_27 >>> ($conv893 >>> 0); - var $sub944 = $bits_27 - $conv893 | 0; - var $inc949 = $128 + 1 | 0; - HEAP32[$40 >> 2] = $inc949; - var $arrayidx951 = $41 + ($128 << 1) | 0; - HEAP16[$arrayidx951 >> 1] = $tmp26; - var $next_29 = $next_31; - var $have_29 = $have_31; - var $hold_25 = $shr941; - var $bits_25 = $sub944; - } else { - if ($tmp26 << 16 >> 16 == 16) { - var $add962 = $conv893 + 2 | 0; - var $next_32 = $next_30; - var $have_32 = $have_30; - var $hold_28 = $hold_26; - var $bits_28 = $bits_26; - while (1) { - var $bits_28; - var $hold_28; - var $have_32; - var $next_32; - var $cmp963 = $bits_28 >>> 0 < $add962 >>> 0; - if (!$cmp963) { - break; - } - var $cmp967 = ($have_32 | 0) == 0; - if ($cmp967) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_32; - var $have_58 = 0; - var $hold_54 = $hold_28; - var $bits_54 = $bits_28; - var $out_4 = $out_0; - break $_$12; - } - var $dec971 = $have_32 - 1 | 0; - var $incdec_ptr972 = $next_32 + 1 | 0; - var $135 = HEAPU8[$next_32]; - var $conv973 = $135 & 255; - var $shl974 = $conv973 << $bits_28; - var $add975 = $shl974 + $hold_28 | 0; - var $add976 = $bits_28 + 8 | 0; - var $next_32 = $incdec_ptr972; - var $have_32 = $dec971; - var $hold_28 = $add975; - var $bits_28 = $add976; - } - var $shr985 = $hold_28 >>> ($conv893 >>> 0); - var $sub988 = $bits_28 - $conv893 | 0; - var $cmp992 = ($128 | 0) == 0; - if ($cmp992) { - HEAP32[$msg >> 2] = STRING_TABLE.__str10107 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_1_ph; - var $next_0_be = $next_32; - var $put_0_be = $put_0; - var $have_0_be = $have_32; - var $left_0_be = $left_0; - var $hold_0_be = $shr985; - var $bits_0_be = $sub988; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - var $sub999 = $128 - 1 | 0; - var $arrayidx1001 = $41 + ($sub999 << 1) | 0; - var $136 = HEAP16[$arrayidx1001 >> 1]; - var $and1003 = $shr985 & 3; - var $add1004 = $and1003 + 3 | 0; - var $shr1006 = $shr985 >>> 2; - var $sub1007 = $sub988 - 2 | 0; - var $len_0 = $136; - var $next_35 = $next_32; - var $have_35 = $have_32; - var $hold_31 = $shr1006; - var $bits_31 = $sub1007; - var $copy_5 = $add1004; - } else if ($tmp26 << 16 >> 16 == 17) { - var $add1020 = $conv893 + 3 | 0; - var $next_33 = $next_30; - var $have_33 = $have_30; - var $hold_29 = $hold_26; - var $bits_29 = $bits_26; - while (1) { - var $bits_29; - var $hold_29; - var $have_33; - var $next_33; - var $cmp1021 = $bits_29 >>> 0 < $add1020 >>> 0; - if (!$cmp1021) { - break; - } - var $cmp1025 = ($have_33 | 0) == 0; - if ($cmp1025) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_33; - var $have_58 = 0; - var $hold_54 = $hold_29; - var $bits_54 = $bits_29; - var $out_4 = $out_0; - break $_$12; - } - var $dec1029 = $have_33 - 1 | 0; - var $incdec_ptr1030 = $next_33 + 1 | 0; - var $137 = HEAPU8[$next_33]; - var $conv1031 = $137 & 255; - var $shl1032 = $conv1031 << $bits_29; - var $add1033 = $shl1032 + $hold_29 | 0; - var $add1034 = $bits_29 + 8 | 0; - var $next_33 = $incdec_ptr1030; - var $have_33 = $dec1029; - var $hold_29 = $add1033; - var $bits_29 = $add1034; - } - var $shr1043 = $hold_29 >>> ($conv893 >>> 0); - var $and1049 = $shr1043 & 7; - var $add1050 = $and1049 + 3 | 0; - var $shr1052 = $shr1043 >>> 3; - var $sub1046 = -3 - $conv893 | 0; - var $sub1053 = $sub1046 + $bits_29 | 0; - var $len_0 = 0; - var $next_35 = $next_33; - var $have_35 = $have_33; - var $hold_31 = $shr1052; - var $bits_31 = $sub1053; - var $copy_5 = $add1050; - } else { - var $add1061 = $conv893 + 7 | 0; - var $next_34 = $next_30; - var $have_34 = $have_30; - var $hold_30 = $hold_26; - var $bits_30 = $bits_26; - while (1) { - var $bits_30; - var $hold_30; - var $have_34; - var $next_34; - var $cmp1062 = $bits_30 >>> 0 < $add1061 >>> 0; - if (!$cmp1062) { - break; - } - var $cmp1066 = ($have_34 | 0) == 0; - if ($cmp1066) { - var $ret_8 = $ret_1_ph; - var $next_58 = $next_34; - var $have_58 = 0; - var $hold_54 = $hold_30; - var $bits_54 = $bits_30; - var $out_4 = $out_0; - break $_$12; - } - var $dec1070 = $have_34 - 1 | 0; - var $incdec_ptr1071 = $next_34 + 1 | 0; - var $138 = HEAPU8[$next_34]; - var $conv1072 = $138 & 255; - var $shl1073 = $conv1072 << $bits_30; - var $add1074 = $shl1073 + $hold_30 | 0; - var $add1075 = $bits_30 + 8 | 0; - var $next_34 = $incdec_ptr1071; - var $have_34 = $dec1070; - var $hold_30 = $add1074; - var $bits_30 = $add1075; - } - var $shr1084 = $hold_30 >>> ($conv893 >>> 0); - var $and1090 = $shr1084 & 127; - var $add1091 = $and1090 + 11 | 0; - var $shr1093 = $shr1084 >>> 7; - var $sub1087 = -7 - $conv893 | 0; - var $sub1094 = $sub1087 + $bits_30 | 0; - var $len_0 = 0; - var $next_35 = $next_34; - var $have_35 = $have_34; - var $hold_31 = $shr1093; - var $bits_31 = $sub1094; - var $copy_5 = $add1091; - } - var $copy_5; - var $bits_31; - var $hold_31; - var $have_35; - var $next_35; - var $len_0; - var $add1100 = $128 + $copy_5 | 0; - var $cmp1104 = $add1100 >>> 0 > $add881 >>> 0; - if ($cmp1104) { - HEAP32[$msg >> 2] = STRING_TABLE.__str10107 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_1_ph; - var $next_0_be = $next_35; - var $put_0_be = $put_0; - var $have_0_be = $have_35; - var $left_0_be = $left_0; - var $hold_0_be = $hold_31; - var $bits_0_be = $bits_31; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - var $copy_6127 = $copy_5; - var $139 = $128; - while (1) { - var $139; - var $copy_6127; - var $dec1111 = $copy_6127 - 1 | 0; - var $inc1116 = $139 + 1 | 0; - HEAP32[$40 >> 2] = $inc1116; - var $arrayidx1118 = $41 + ($139 << 1) | 0; - HEAP16[$arrayidx1118 >> 1] = $len_0; - var $tobool1112 = ($dec1111 | 0) == 0; - if ($tobool1112) { - var $next_29 = $next_35; - var $have_29 = $have_35; - var $hold_25 = $hold_31; - var $bits_25 = $bits_31; - continue $_$167; - } - var $_pre892 = HEAP32[$40 >> 2]; - var $copy_6127 = $dec1111; - var $139 = $_pre892; - } - } - } else { - var $_pr38 = HEAP32[$mode >> 2]; - var $cmp1123 = ($_pr38 | 0) == 29; - if ($cmp1123) { - var $ret_0_be = $ret_1_ph; - var $next_0_be = $next_29; - var $put_0_be = $put_0; - var $have_0_be = $have_29; - var $left_0_be = $left_0; - var $hold_0_be = $hold_25; - var $bits_0_be = $bits_25; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - var $140 = HEAP16[$45 >> 1]; - var $cmp1130 = $140 << 16 >> 16 == 0; - if ($cmp1130) { - HEAP32[$msg >> 2] = STRING_TABLE.__str11108 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_1_ph; - var $next_0_be = $next_29; - var $put_0_be = $put_0; - var $have_0_be = $have_29; - var $left_0_be = $left_0; - var $hold_0_be = $hold_25; - var $bits_0_be = $bits_25; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - HEAP32[$43 >> 2] = $arraydecay860_c; - HEAP32[$44 >> 2] = $arraydecay860_c; - HEAP32[$26 >> 2] = 9; - var $call1149 = _inflate_table(1, $arraydecay864, $129, $42, $26, $arraydecay867); - var $tobool1150 = ($call1149 | 0) == 0; - if (!$tobool1150) { - HEAP32[$msg >> 2] = STRING_TABLE.__str12109 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $call1149; - var $next_0_be = $next_29; - var $put_0_be = $put_0; - var $have_0_be = $have_29; - var $left_0_be = $left_0; - var $hold_0_be = $hold_25; - var $bits_0_be = $bits_25; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - var $141 = HEAP32[$42 >> 2]; - var $_c = $141; - HEAP32[$46 >> 2] = $_c; - HEAP32[$47 >> 2] = 6; - var $142 = HEAP32[$37 >> 2]; - var $add_ptr1159 = $arraydecay864 + ($142 << 1) | 0; - var $143 = HEAP32[$38 >> 2]; - var $call1165 = _inflate_table(2, $add_ptr1159, $143, $42, $47, $arraydecay867); - var $tobool1166 = ($call1165 | 0) == 0; - if (!$tobool1166) { - HEAP32[$msg >> 2] = STRING_TABLE.__str13110 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $call1165; - var $next_0_be = $next_29; - var $put_0_be = $put_0; - var $have_0_be = $have_29; - var $left_0_be = $left_0; - var $hold_0_be = $hold_25; - var $bits_0_be = $bits_25; - var $out_0_be = $out_0; - __label__ = 268; - break $_$148; - } - HEAP32[$mode >> 2] = 19; - if ($cmp660) { - var $ret_8 = 0; - var $next_58 = $next_29; - var $have_58 = $have_29; - var $hold_54 = $hold_25; - var $bits_54 = $bits_25; - var $out_4 = $out_0; - break $_$12; - } - var $ret_2 = 0; - var $next_37 = $next_29; - var $have_37 = $have_29; - var $hold_33 = $hold_25; - var $bits_33 = $bits_25; - __label__ = 205; - break $_$148; - } - } - } - } while (0); - do { - if (__label__ == 60) { - var $bits_5; - var $hold_5; - var $have_5; - var $next_5; - var $71 = HEAPU32[$17 >> 2]; - var $and262 = $71 & 1024; - var $tobool263 = ($and262 | 0) == 0; - do { - if ($tobool263) { - var $76 = HEAP32[$18 >> 2]; - var $cmp310 = ($76 | 0) == 0; - if ($cmp310) { - var $next_7 = $next_5; - var $have_7 = $have_5; - var $hold_7 = $hold_5; - var $bits_7 = $bits_5; - break; - } - var $extra = $76 + 16 | 0; - HEAP32[$extra >> 2] = 0; - var $next_7 = $next_5; - var $have_7 = $have_5; - var $hold_7 = $hold_5; - var $bits_7 = $bits_5; - } else { - var $next_6 = $next_5; - var $have_6 = $have_5; - var $hold_6 = $hold_5; - var $bits_6 = $bits_5; - while (1) { - var $bits_6; - var $hold_6; - var $have_6; - var $next_6; - var $cmp267 = $bits_6 >>> 0 < 16; - if (!$cmp267) { - break; - } - var $cmp271 = ($have_6 | 0) == 0; - if ($cmp271) { - var $ret_8 = $ret_0; - var $next_58 = $next_6; - var $have_58 = 0; - var $hold_54 = $hold_6; - var $bits_54 = $bits_6; - var $out_4 = $out_0; - break $_$12; - } - var $dec275 = $have_6 - 1 | 0; - var $incdec_ptr276 = $next_6 + 1 | 0; - var $72 = HEAPU8[$next_6]; - var $conv277 = $72 & 255; - var $shl278 = $conv277 << $bits_6; - var $add279 = $shl278 + $hold_6 | 0; - var $add280 = $bits_6 + 8 | 0; - var $next_6 = $incdec_ptr276; - var $have_6 = $dec275; - var $hold_6 = $add279; - var $bits_6 = $add280; - } - HEAP32[$21 >> 2] = $hold_6; - var $73 = HEAP32[$18 >> 2]; - var $cmp285 = ($73 | 0) == 0; - if ($cmp285) { - var $74 = $71; - } else { - var $extra_len = $73 + 20 | 0; - HEAP32[$extra_len >> 2] = $hold_6; - var $_pre885 = HEAP32[$17 >> 2]; - var $74 = $_pre885; - } - var $74; - var $and291 = $74 & 512; - var $tobool292 = ($and291 | 0) == 0; - if ($tobool292) { - var $next_7 = $next_6; - var $have_7 = $have_6; - var $hold_7 = 0; - var $bits_7 = 0; - break; - } - var $conv295 = $hold_6 & 255; - HEAP8[$arrayidx] = $conv295; - var $shr297 = $hold_6 >>> 8; - var $conv298 = $shr297 & 255; - HEAP8[$arrayidx40] = $conv298; - var $75 = HEAP32[$16 >> 2]; - var $call302 = _crc32($75, $arrayidx, 2); - HEAP32[$16 >> 2] = $call302; - var $next_7 = $next_6; - var $have_7 = $have_6; - var $hold_7 = 0; - var $bits_7 = 0; - } - } while (0); - var $bits_7; - var $hold_7; - var $have_7; - var $next_7; - HEAP32[$mode >> 2] = 5; - var $next_8 = $next_7; - var $have_8 = $have_7; - var $hold_8 = $hold_7; - var $bits_8 = $bits_7; - __label__ = 71; - break; - } else if (__label__ == 124) { - var $bits_17; - var $hold_17; - var $have_21; - var $next_21; - var $116 = HEAP32[$24 >> 2]; - var $tobool616 = ($116 | 0) == 0; - if ($tobool616) { - var $next_22 = $next_21; - var $have_22 = $have_21; - var $hold_18 = $hold_17; - var $bits_18 = $bits_17; - while (1) { - var $bits_18; - var $hold_18; - var $have_22; - var $next_22; - var $cmp629 = $bits_18 >>> 0 < 3; - if (!$cmp629) { - break; - } - var $cmp633 = ($have_22 | 0) == 0; - if ($cmp633) { - var $ret_8 = $ret_0; - var $next_58 = $next_22; - var $have_58 = 0; - var $hold_54 = $hold_18; - var $bits_54 = $bits_18; - var $out_4 = $out_0; - break $_$12; - } - var $dec637 = $have_22 - 1 | 0; - var $incdec_ptr638 = $next_22 + 1 | 0; - var $117 = HEAPU8[$next_22]; - var $conv639 = $117 & 255; - var $shl640 = $conv639 << $bits_18; - var $add641 = $shl640 + $hold_18 | 0; - var $add642 = $bits_18 + 8 | 0; - var $next_22 = $incdec_ptr638; - var $have_22 = $dec637; - var $hold_18 = $add641; - var $bits_18 = $add642; - } - var $and648 = $hold_18 & 1; - HEAP32[$24 >> 2] = $and648; - var $shr651 = $hold_18 >>> 1; - var $and655 = $shr651 & 3; - do { - if (($and655 | 0) == 0) { - HEAP32[$mode >> 2] = 13; - } else if (($and655 | 0) == 1) { - _fixedtables($4); - HEAP32[$mode >> 2] = 19; - if (!$cmp660) { - break; - } - var $shr664 = $hold_18 >>> 3; - var $sub665 = $bits_18 - 3 | 0; - var $ret_8 = $ret_0; - var $next_58 = $next_22; - var $have_58 = $have_22; - var $hold_54 = $shr664; - var $bits_54 = $sub665; - var $out_4 = $out_0; - break $_$12; - } else if (($and655 | 0) == 2) { - HEAP32[$mode >> 2] = 16; - } else if (($and655 | 0) == 3) { - HEAP32[$msg >> 2] = STRING_TABLE.__str6103 | 0; - HEAP32[$mode >> 2] = 29; - } - } while (0); - var $shr675 = $hold_18 >>> 3; - var $sub676 = $bits_18 - 3 | 0; - var $ret_0_be = $ret_0; - var $next_0_be = $next_22; - var $put_0_be = $put_0; - var $have_0_be = $have_22; - var $left_0_be = $left_0; - var $hold_0_be = $shr675; - var $bits_0_be = $sub676; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $and619 = $bits_17 & 7; - var $shr620 = $hold_17 >>> ($and619 >>> 0); - var $sub622 = $bits_17 - $and619 | 0; - HEAP32[$mode >> 2] = 26; - var $ret_0_be = $ret_0; - var $next_0_be = $next_21; - var $put_0_be = $put_0; - var $have_0_be = $have_21; - var $left_0_be = $left_0; - var $hold_0_be = $shr620; - var $bits_0_be = $sub622; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (__label__ == 205) { - var $bits_33; - var $hold_33; - var $have_37; - var $next_37; - var $ret_2; - HEAP32[$mode >> 2] = 20; - var $ret_3 = $ret_2; - var $next_38 = $next_37; - var $have_38 = $have_37; - var $hold_34 = $hold_33; - var $bits_34 = $bits_33; - __label__ = 206; - break; - } - } while (0); - do { - if (__label__ == 71) { - var $bits_8; - var $hold_8; - var $have_8; - var $next_8; - var $77 = HEAPU32[$17 >> 2]; - var $and319 = $77 & 1024; - var $tobool320 = ($and319 | 0) == 0; - if ($tobool320) { - var $next_10 = $next_8; - var $have_10 = $have_8; - var $88 = $77; - } else { - var $78 = HEAPU32[$21 >> 2]; - var $cmp323 = $78 >>> 0 > $have_8 >>> 0; - var $copy_0 = $cmp323 ? $have_8 : $78; - var $tobool327 = ($copy_0 | 0) == 0; - if ($tobool327) { - var $next_9 = $next_8; - var $have_9 = $have_8; - var $87 = $78; - var $86 = $77; - } else { - var $79 = HEAPU32[$18 >> 2]; - var $cmp330 = ($79 | 0) == 0; - do { - if ($cmp330) { - var $83 = $77; - } else { - var $extra334 = $79 + 16 | 0; - var $80 = HEAP32[$extra334 >> 2]; - var $cmp335 = ($80 | 0) == 0; - if ($cmp335) { - var $83 = $77; - break; - } - var $extra_len339 = $79 + 20 | 0; - var $81 = HEAP32[$extra_len339 >> 2]; - var $sub341 = $81 - $78 | 0; - var $add_ptr = $80 + $sub341 | 0; - var $add344 = $sub341 + $copy_0 | 0; - var $extra_max = $79 + 24 | 0; - var $82 = HEAPU32[$extra_max >> 2]; - var $cmp346 = $add344 >>> 0 > $82 >>> 0; - var $sub350 = $82 - $sub341 | 0; - var $cond351 = $cmp346 ? $sub350 : $copy_0; - _memcpy($add_ptr, $next_8, $cond351, 1); - var $_pre886 = HEAP32[$17 >> 2]; - var $83 = $_pre886; - } - } while (0); - var $83; - var $and354 = $83 & 512; - var $tobool355 = ($and354 | 0) == 0; - if (!$tobool355) { - var $84 = HEAP32[$16 >> 2]; - var $call358 = _crc32($84, $next_8, $copy_0); - HEAP32[$16 >> 2] = $call358; - } - var $sub361 = $have_8 - $copy_0 | 0; - var $add_ptr362 = $next_8 + $copy_0 | 0; - var $85 = HEAP32[$21 >> 2]; - var $sub364 = $85 - $copy_0 | 0; - HEAP32[$21 >> 2] = $sub364; - var $next_9 = $add_ptr362; - var $have_9 = $sub361; - var $87 = $sub364; - var $86 = $83; - } - var $86; - var $87; - var $have_9; - var $next_9; - var $tobool367 = ($87 | 0) == 0; - if (!$tobool367) { - var $ret_8 = $ret_0; - var $next_58 = $next_9; - var $have_58 = $have_9; - var $hold_54 = $hold_8; - var $bits_54 = $bits_8; - var $out_4 = $out_0; - break $_$12; - } - var $next_10 = $next_9; - var $have_10 = $have_9; - var $88 = $86; - } - var $88; - var $have_10; - var $next_10; - HEAP32[$21 >> 2] = 0; - HEAP32[$mode >> 2] = 6; - var $next_11 = $next_10; - var $have_11 = $have_10; - var $hold_9 = $hold_8; - var $bits_9 = $bits_8; - var $89 = $88; - __label__ = 81; - break; - } else if (__label__ == 206) { - var $bits_34; - var $hold_34; - var $have_38; - var $next_38; - var $ret_3; - var $cmp1179 = $have_38 >>> 0 > 5; - var $cmp1182 = $left_0 >>> 0 > 257; - var $or_cond33 = $cmp1179 & $cmp1182; - if ($or_cond33) { - HEAP32[$next_out >> 2] = $put_0; - HEAP32[$avail_out >> 2] = $left_0; - HEAP32[$next_in >> 2] = $next_38; - HEAP32[$avail_in15 >> 2] = $have_38; - HEAP32[$11 >> 2] = $hold_34; - HEAP32[$13 >> 2] = $bits_34; - _inflate_fast($strm, $out_0); - var $144 = HEAP32[$next_out >> 2]; - var $145 = HEAP32[$avail_out >> 2]; - var $146 = HEAP32[$next_in >> 2]; - var $147 = HEAP32[$avail_in15 >> 2]; - var $148 = HEAP32[$11 >> 2]; - var $149 = HEAP32[$13 >> 2]; - var $150 = HEAP32[$mode >> 2]; - var $cmp1204 = ($150 | 0) == 11; - if (!$cmp1204) { - var $ret_0_be = $ret_3; - var $next_0_be = $146; - var $put_0_be = $144; - var $have_0_be = $147; - var $left_0_be = $145; - var $hold_0_be = $148; - var $bits_0_be = $149; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$25 >> 2] = -1; - var $ret_0_be = $ret_3; - var $next_0_be = $146; - var $put_0_be = $144; - var $have_0_be = $147; - var $left_0_be = $145; - var $hold_0_be = $148; - var $bits_0_be = $149; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - HEAP32[$25 >> 2] = 0; - var $151 = HEAP32[$26 >> 2]; - var $shl1212 = 1 << $151; - var $sub1213 = $shl1212 - 1 | 0; - var $152 = HEAPU32[$27 >> 2]; - var $next_39 = $next_38; - var $have_39 = $have_38; - var $hold_35 = $hold_34; - var $bits_35 = $bits_34; - while (1) { - var $bits_35; - var $hold_35; - var $have_39; - var $next_39; - var $and1214 = $sub1213 & $hold_35; - var $arrayidx1216_1 = $152 + ($and1214 << 2) + 1 | 0; - var $tmp22 = HEAPU8[$arrayidx1216_1]; - var $conv1218 = $tmp22 & 255; - var $cmp1219 = $conv1218 >>> 0 > $bits_35 >>> 0; - if (!$cmp1219) { - break; - } - var $cmp1224 = ($have_39 | 0) == 0; - if ($cmp1224) { - var $ret_8 = $ret_3; - var $next_58 = $next_39; - var $have_58 = 0; - var $hold_54 = $hold_35; - var $bits_54 = $bits_35; - var $out_4 = $out_0; - break $_$12; - } - var $dec1228 = $have_39 - 1 | 0; - var $incdec_ptr1229 = $next_39 + 1 | 0; - var $153 = HEAPU8[$next_39]; - var $conv1230 = $153 & 255; - var $shl1231 = $conv1230 << $bits_35; - var $add1232 = $shl1231 + $hold_35 | 0; - var $add1233 = $bits_35 + 8 | 0; - var $next_39 = $incdec_ptr1229; - var $have_39 = $dec1228; - var $hold_35 = $add1232; - var $bits_35 = $add1233; - } - var $arrayidx1216_0 = $152 + ($and1214 << 2) | 0; - var $tmp21 = HEAPU8[$arrayidx1216_0]; - var $arrayidx1216_2 = $152 + ($and1214 << 2) + 2 | 0; - var $tmp23 = HEAPU16[$arrayidx1216_2 >> 1]; - var $conv1237 = $tmp21 & 255; - var $tobool1238 = $tmp21 << 24 >> 24 == 0; - do { - if ($tobool1238) { - var $next_41 = $next_39; - var $have_41 = $have_39; - var $hold_37 = $hold_35; - var $bits_37 = $bits_35; - var $here_09_0 = 0; - var $here_110_0 = $tmp22; - var $here_211_0 = $tmp23; - var $155 = 0; - } else { - var $and1242 = $conv1237 & 240; - var $cmp1243 = ($and1242 | 0) == 0; - if (!$cmp1243) { - var $next_41 = $next_39; - var $have_41 = $have_39; - var $hold_37 = $hold_35; - var $bits_37 = $bits_35; - var $here_09_0 = $tmp21; - var $here_110_0 = $tmp22; - var $here_211_0 = $tmp23; - var $155 = 0; - break; - } - var $conv1248 = $tmp23 & 65535; - var $add1253 = $conv1218 + $conv1237 | 0; - var $shl1254 = 1 << $add1253; - var $sub1255 = $shl1254 - 1 | 0; - var $next_40 = $next_39; - var $have_40 = $have_39; - var $hold_36 = $hold_35; - var $bits_36 = $bits_35; - while (1) { - var $bits_36; - var $hold_36; - var $have_40; - var $next_40; - var $and1256 = $hold_36 & $sub1255; - var $shr1259 = $and1256 >>> ($conv1218 >>> 0); - var $add1260 = $shr1259 + $conv1248 | 0; - var $arrayidx1262_1 = $152 + ($add1260 << 2) + 1 | 0; - var $tmp19 = HEAPU8[$arrayidx1262_1]; - var $conv1266 = $tmp19 & 255; - var $add1267 = $conv1266 + $conv1218 | 0; - var $cmp1268 = $add1267 >>> 0 > $bits_36 >>> 0; - if (!$cmp1268) { - break; - } - var $cmp1273 = ($have_40 | 0) == 0; - if ($cmp1273) { - var $ret_8 = $ret_3; - var $next_58 = $next_40; - var $have_58 = 0; - var $hold_54 = $hold_36; - var $bits_54 = $bits_36; - var $out_4 = $out_0; - break $_$12; - } - var $dec1277 = $have_40 - 1 | 0; - var $incdec_ptr1278 = $next_40 + 1 | 0; - var $154 = HEAPU8[$next_40]; - var $conv1279 = $154 & 255; - var $shl1280 = $conv1279 << $bits_36; - var $add1281 = $shl1280 + $hold_36 | 0; - var $add1282 = $bits_36 + 8 | 0; - var $next_40 = $incdec_ptr1278; - var $have_40 = $dec1277; - var $hold_36 = $add1281; - var $bits_36 = $add1282; - } - var $arrayidx1262_2 = $152 + ($add1260 << 2) + 2 | 0; - var $arrayidx1262_0 = $152 + ($add1260 << 2) | 0; - var $tmp20 = HEAP16[$arrayidx1262_2 >> 1]; - var $tmp18 = HEAP8[$arrayidx1262_0]; - var $shr1289 = $hold_36 >>> ($conv1218 >>> 0); - var $sub1292 = $bits_36 - $conv1218 | 0; - HEAP32[$25 >> 2] = $conv1218; - var $next_41 = $next_40; - var $have_41 = $have_40; - var $hold_37 = $shr1289; - var $bits_37 = $sub1292; - var $here_09_0 = $tmp18; - var $here_110_0 = $tmp19; - var $here_211_0 = $tmp20; - var $155 = $conv1218; - } - } while (0); - var $155; - var $here_211_0; - var $here_110_0; - var $here_09_0; - var $bits_37; - var $hold_37; - var $have_41; - var $next_41; - var $conv1302 = $here_110_0 & 255; - var $shr1303 = $hold_37 >>> ($conv1302 >>> 0); - var $sub1306 = $bits_37 - $conv1302 | 0; - var $add1312 = $155 + $conv1302 | 0; - HEAP32[$25 >> 2] = $add1312; - var $conv1314 = $here_211_0 & 65535; - HEAP32[$21 >> 2] = $conv1314; - var $conv1317 = $here_09_0 & 255; - var $cmp1318 = $here_09_0 << 24 >> 24 == 0; - if ($cmp1318) { - HEAP32[$mode >> 2] = 25; - var $ret_0_be = $ret_3; - var $next_0_be = $next_41; - var $put_0_be = $put_0; - var $have_0_be = $have_41; - var $left_0_be = $left_0; - var $hold_0_be = $shr1303; - var $bits_0_be = $sub1306; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $and1325 = $conv1317 & 32; - var $tobool1326 = ($and1325 | 0) == 0; - if (!$tobool1326) { - HEAP32[$25 >> 2] = -1; - HEAP32[$mode >> 2] = 11; - var $ret_0_be = $ret_3; - var $next_0_be = $next_41; - var $put_0_be = $put_0; - var $have_0_be = $have_41; - var $left_0_be = $left_0; - var $hold_0_be = $shr1303; - var $bits_0_be = $sub1306; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - var $and1333 = $conv1317 & 64; - var $tobool1334 = ($and1333 | 0) == 0; - if ($tobool1334) { - var $and1341 = $conv1317 & 15; - HEAP32[$28 >> 2] = $and1341; - HEAP32[$mode >> 2] = 21; - var $ret_4 = $ret_3; - var $next_42 = $next_41; - var $have_42 = $have_41; - var $hold_38 = $shr1303; - var $bits_38 = $sub1306; - var $156 = $and1341; - __label__ = 227; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str2171 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_3; - var $next_0_be = $next_41; - var $put_0_be = $put_0; - var $have_0_be = $have_41; - var $left_0_be = $left_0; - var $hold_0_be = $shr1303; - var $bits_0_be = $sub1306; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - } while (0); - do { - if (__label__ == 81) { - var $89; - var $bits_9; - var $hold_9; - var $have_11; - var $next_11; - var $and375 = $89 & 2048; - var $tobool376 = ($and375 | 0) == 0; - do { - if ($tobool376) { - var $98 = HEAP32[$18 >> 2]; - var $cmp424 = ($98 | 0) == 0; - if ($cmp424) { - var $next_12 = $next_11; - var $have_12 = $have_11; - break; - } - var $name428 = $98 + 28 | 0; - HEAP32[$name428 >> 2] = 0; - var $next_12 = $next_11; - var $have_12 = $have_11; - } else { - var $cmp378 = ($have_11 | 0) == 0; - if ($cmp378) { - var $ret_8 = $ret_0; - var $next_58 = $next_11; - var $have_58 = 0; - var $hold_54 = $hold_9; - var $bits_54 = $bits_9; - var $out_4 = $out_0; - break $_$12; - } - var $copy_1 = 0; - while (1) { - var $copy_1; - var $inc = $copy_1 + 1 | 0; - var $arrayidx383 = $next_11 + $copy_1 | 0; - var $90 = HEAP8[$arrayidx383]; - var $91 = HEAP32[$18 >> 2]; - var $cmp386 = ($91 | 0) == 0; - do { - if (!$cmp386) { - var $name = $91 + 28 | 0; - var $92 = HEAP32[$name >> 2]; - var $cmp390 = ($92 | 0) == 0; - if ($cmp390) { - break; - } - var $93 = HEAPU32[$21 >> 2]; - var $name_max = $91 + 32 | 0; - var $94 = HEAPU32[$name_max >> 2]; - var $cmp395 = $93 >>> 0 < $94 >>> 0; - if (!$cmp395) { - break; - } - var $inc400 = $93 + 1 | 0; - HEAP32[$21 >> 2] = $inc400; - var $95 = HEAP32[$name >> 2]; - var $arrayidx403 = $95 + $93 | 0; - HEAP8[$arrayidx403] = $90; - } - } while (0); - var $tobool405 = $90 << 24 >> 24 != 0; - var $cmp406 = $inc >>> 0 < $have_11 >>> 0; - var $or_cond31 = $tobool405 & $cmp406; - if (!$or_cond31) { - break; - } - var $copy_1 = $inc; - } - var $96 = HEAP32[$17 >> 2]; - var $and410 = $96 & 512; - var $tobool411 = ($and410 | 0) == 0; - if (!$tobool411) { - var $97 = HEAP32[$16 >> 2]; - var $call414 = _crc32($97, $next_11, $inc); - HEAP32[$16 >> 2] = $call414; - } - var $sub417 = $have_11 - $inc | 0; - var $add_ptr418 = $next_11 + $inc | 0; - if ($tobool405) { - var $ret_8 = $ret_0; - var $next_58 = $add_ptr418; - var $have_58 = $sub417; - var $hold_54 = $hold_9; - var $bits_54 = $bits_9; - var $out_4 = $out_0; - break $_$12; - } - var $next_12 = $add_ptr418; - var $have_12 = $sub417; - } - } while (0); - var $have_12; - var $next_12; - HEAP32[$21 >> 2] = 0; - HEAP32[$mode >> 2] = 7; - var $next_13 = $next_12; - var $have_13 = $have_12; - var $hold_10 = $hold_9; - var $bits_10 = $bits_9; - __label__ = 94; - break; - } else if (__label__ == 227) { - var $156; - var $bits_38; - var $hold_38; - var $have_42; - var $next_42; - var $ret_4; - var $tobool1346 = ($156 | 0) == 0; - if ($tobool1346) { - var $_pre890 = HEAP32[$21 >> 2]; - var $next_44 = $next_42; - var $have_44 = $have_42; - var $hold_40 = $hold_38; - var $bits_40 = $bits_38; - var $160 = $_pre890; - } else { - var $next_43 = $next_42; - var $have_43 = $have_42; - var $hold_39 = $hold_38; - var $bits_39 = $bits_38; - while (1) { - var $bits_39; - var $hold_39; - var $have_43; - var $next_43; - var $cmp1351 = $bits_39 >>> 0 < $156 >>> 0; - if (!$cmp1351) { - break; - } - var $cmp1355 = ($have_43 | 0) == 0; - if ($cmp1355) { - var $ret_8 = $ret_4; - var $next_58 = $next_43; - var $have_58 = 0; - var $hold_54 = $hold_39; - var $bits_54 = $bits_39; - var $out_4 = $out_0; - break $_$12; - } - var $dec1359 = $have_43 - 1 | 0; - var $incdec_ptr1360 = $next_43 + 1 | 0; - var $157 = HEAPU8[$next_43]; - var $conv1361 = $157 & 255; - var $shl1362 = $conv1361 << $bits_39; - var $add1363 = $shl1362 + $hold_39 | 0; - var $add1364 = $bits_39 + 8 | 0; - var $next_43 = $incdec_ptr1360; - var $have_43 = $dec1359; - var $hold_39 = $add1363; - var $bits_39 = $add1364; - } - var $shl1371 = 1 << $156; - var $sub1372 = $shl1371 - 1 | 0; - var $and1373 = $sub1372 & $hold_39; - var $158 = HEAP32[$21 >> 2]; - var $add1375 = $158 + $and1373 | 0; - HEAP32[$21 >> 2] = $add1375; - var $shr1378 = $hold_39 >>> ($156 >>> 0); - var $sub1380 = $bits_39 - $156 | 0; - var $159 = HEAP32[$25 >> 2]; - var $add1385 = $159 + $156 | 0; - HEAP32[$25 >> 2] = $add1385; - var $next_44 = $next_43; - var $have_44 = $have_43; - var $hold_40 = $shr1378; - var $bits_40 = $sub1380; - var $160 = $add1375; - } - var $160; - var $bits_40; - var $hold_40; - var $have_44; - var $next_44; - HEAP32[$29 >> 2] = $160; - HEAP32[$mode >> 2] = 22; - var $ret_5_ph = $ret_4; - var $next_45_ph = $next_44; - var $have_45_ph = $have_44; - var $hold_41_ph = $hold_40; - var $bits_41_ph = $bits_40; - __label__ = 234; - break; - } - } while (0); - do { - if (__label__ == 94) { - var $bits_10; - var $hold_10; - var $have_13; - var $next_13; - var $99 = HEAP32[$17 >> 2]; - var $and435 = $99 & 4096; - var $tobool436 = ($and435 | 0) == 0; - do { - if ($tobool436) { - var $108 = HEAP32[$18 >> 2]; - var $cmp488 = ($108 | 0) == 0; - if ($cmp488) { - var $next_14 = $next_13; - var $have_14 = $have_13; - break; - } - var $comment492 = $108 + 36 | 0; - HEAP32[$comment492 >> 2] = 0; - var $next_14 = $next_13; - var $have_14 = $have_13; - } else { - var $cmp438 = ($have_13 | 0) == 0; - if ($cmp438) { - var $ret_8 = $ret_0; - var $next_58 = $next_13; - var $have_58 = 0; - var $hold_54 = $hold_10; - var $bits_54 = $bits_10; - var $out_4 = $out_0; - break $_$12; - } - var $copy_2 = 0; - while (1) { - var $copy_2; - var $inc443 = $copy_2 + 1 | 0; - var $arrayidx444 = $next_13 + $copy_2 | 0; - var $100 = HEAP8[$arrayidx444]; - var $101 = HEAP32[$18 >> 2]; - var $cmp447 = ($101 | 0) == 0; - do { - if (!$cmp447) { - var $comment = $101 + 36 | 0; - var $102 = HEAP32[$comment >> 2]; - var $cmp451 = ($102 | 0) == 0; - if ($cmp451) { - break; - } - var $103 = HEAPU32[$21 >> 2]; - var $comm_max = $101 + 40 | 0; - var $104 = HEAPU32[$comm_max >> 2]; - var $cmp456 = $103 >>> 0 < $104 >>> 0; - if (!$cmp456) { - break; - } - var $inc461 = $103 + 1 | 0; - HEAP32[$21 >> 2] = $inc461; - var $105 = HEAP32[$comment >> 2]; - var $arrayidx464 = $105 + $103 | 0; - HEAP8[$arrayidx464] = $100; - } - } while (0); - var $tobool467 = $100 << 24 >> 24 != 0; - var $cmp469 = $inc443 >>> 0 < $have_13 >>> 0; - var $or_cond32 = $tobool467 & $cmp469; - if (!$or_cond32) { - break; - } - var $copy_2 = $inc443; - } - var $106 = HEAP32[$17 >> 2]; - var $and474 = $106 & 512; - var $tobool475 = ($and474 | 0) == 0; - if (!$tobool475) { - var $107 = HEAP32[$16 >> 2]; - var $call478 = _crc32($107, $next_13, $inc443); - HEAP32[$16 >> 2] = $call478; - } - var $sub481 = $have_13 - $inc443 | 0; - var $add_ptr482 = $next_13 + $inc443 | 0; - if ($tobool467) { - var $ret_8 = $ret_0; - var $next_58 = $add_ptr482; - var $have_58 = $sub481; - var $hold_54 = $hold_10; - var $bits_54 = $bits_10; - var $out_4 = $out_0; - break $_$12; - } - var $next_14 = $add_ptr482; - var $have_14 = $sub481; - } - } while (0); - var $have_14; - var $next_14; - HEAP32[$mode >> 2] = 8; - var $next_15 = $next_14; - var $have_15 = $have_14; - var $hold_11 = $hold_10; - var $bits_11 = $bits_10; - __label__ = 107; - break; - } else if (__label__ == 234) { - var $bits_41_ph; - var $hold_41_ph; - var $have_45_ph; - var $next_45_ph; - var $ret_5_ph; - var $161 = HEAP32[$47 >> 2]; - var $shl1392 = 1 << $161; - var $sub1393 = $shl1392 - 1 | 0; - var $162 = HEAPU32[$48 >> 2]; - var $next_45 = $next_45_ph; - var $have_45 = $have_45_ph; - var $hold_41 = $hold_41_ph; - var $bits_41 = $bits_41_ph; - while (1) { - var $bits_41; - var $hold_41; - var $have_45; - var $next_45; - var $and1394 = $sub1393 & $hold_41; - var $arrayidx1396_1 = $162 + ($and1394 << 2) + 1 | 0; - var $tmp16 = HEAPU8[$arrayidx1396_1]; - var $conv1398 = $tmp16 & 255; - var $cmp1399 = $conv1398 >>> 0 > $bits_41 >>> 0; - if (!$cmp1399) { - break; - } - var $cmp1404 = ($have_45 | 0) == 0; - if ($cmp1404) { - var $ret_8 = $ret_5_ph; - var $next_58 = $next_45; - var $have_58 = 0; - var $hold_54 = $hold_41; - var $bits_54 = $bits_41; - var $out_4 = $out_0; - break $_$12; - } - var $dec1408 = $have_45 - 1 | 0; - var $incdec_ptr1409 = $next_45 + 1 | 0; - var $163 = HEAPU8[$next_45]; - var $conv1410 = $163 & 255; - var $shl1411 = $conv1410 << $bits_41; - var $add1412 = $shl1411 + $hold_41 | 0; - var $add1413 = $bits_41 + 8 | 0; - var $next_45 = $incdec_ptr1409; - var $have_45 = $dec1408; - var $hold_41 = $add1412; - var $bits_41 = $add1413; - } - var $arrayidx1396_0 = $162 + ($and1394 << 2) | 0; - var $tmp15 = HEAPU8[$arrayidx1396_0]; - var $arrayidx1396_2 = $162 + ($and1394 << 2) + 2 | 0; - var $tmp17 = HEAPU16[$arrayidx1396_2 >> 1]; - var $conv1418 = $tmp15 & 255; - var $and1419 = $conv1418 & 240; - var $cmp1420 = ($and1419 | 0) == 0; - if ($cmp1420) { - var $conv1425 = $tmp17 & 65535; - var $add1430 = $conv1398 + $conv1418 | 0; - var $shl1431 = 1 << $add1430; - var $sub1432 = $shl1431 - 1 | 0; - var $next_46 = $next_45; - var $have_46 = $have_45; - var $hold_42 = $hold_41; - var $bits_42 = $bits_41; - while (1) { - var $bits_42; - var $hold_42; - var $have_46; - var $next_46; - var $and1433 = $hold_42 & $sub1432; - var $shr1436 = $and1433 >>> ($conv1398 >>> 0); - var $add1437 = $shr1436 + $conv1425 | 0; - var $arrayidx1439_1 = $162 + ($add1437 << 2) + 1 | 0; - var $tmp13 = HEAPU8[$arrayidx1439_1]; - var $conv1443 = $tmp13 & 255; - var $add1444 = $conv1443 + $conv1398 | 0; - var $cmp1445 = $add1444 >>> 0 > $bits_42 >>> 0; - if (!$cmp1445) { - break; - } - var $cmp1450 = ($have_46 | 0) == 0; - if ($cmp1450) { - var $ret_8 = $ret_5_ph; - var $next_58 = $next_46; - var $have_58 = 0; - var $hold_54 = $hold_42; - var $bits_54 = $bits_42; - var $out_4 = $out_0; - break $_$12; - } - var $dec1454 = $have_46 - 1 | 0; - var $incdec_ptr1455 = $next_46 + 1 | 0; - var $164 = HEAPU8[$next_46]; - var $conv1456 = $164 & 255; - var $shl1457 = $conv1456 << $bits_42; - var $add1458 = $shl1457 + $hold_42 | 0; - var $add1459 = $bits_42 + 8 | 0; - var $next_46 = $incdec_ptr1455; - var $have_46 = $dec1454; - var $hold_42 = $add1458; - var $bits_42 = $add1459; - } - var $arrayidx1439_2 = $162 + ($add1437 << 2) + 2 | 0; - var $arrayidx1439_0 = $162 + ($add1437 << 2) | 0; - var $tmp14 = HEAP16[$arrayidx1439_2 >> 1]; - var $tmp12 = HEAP8[$arrayidx1439_0]; - var $shr1466 = $hold_42 >>> ($conv1398 >>> 0); - var $sub1469 = $bits_42 - $conv1398 | 0; - var $165 = HEAP32[$25 >> 2]; - var $add1475 = $165 + $conv1398 | 0; - HEAP32[$25 >> 2] = $add1475; - var $next_47 = $next_46; - var $have_47 = $have_46; - var $hold_43 = $shr1466; - var $bits_43 = $sub1469; - var $here_09_1 = $tmp12; - var $here_110_1 = $tmp13; - var $here_211_1 = $tmp14; - var $166 = $add1475; - } else { - var $_pre893 = HEAP32[$25 >> 2]; - var $next_47 = $next_45; - var $have_47 = $have_45; - var $hold_43 = $hold_41; - var $bits_43 = $bits_41; - var $here_09_1 = $tmp15; - var $here_110_1 = $tmp16; - var $here_211_1 = $tmp17; - var $166 = $_pre893; - } - var $166; - var $here_211_1; - var $here_110_1; - var $here_09_1; - var $bits_43; - var $hold_43; - var $have_47; - var $next_47; - var $conv1479 = $here_110_1 & 255; - var $shr1480 = $hold_43 >>> ($conv1479 >>> 0); - var $sub1483 = $bits_43 - $conv1479 | 0; - var $add1489 = $166 + $conv1479 | 0; - HEAP32[$25 >> 2] = $add1489; - var $conv1491 = $here_09_1 & 255; - var $and1492 = $conv1491 & 64; - var $tobool1493 = ($and1492 | 0) == 0; - if ($tobool1493) { - var $conv1499 = $here_211_1 & 65535; - HEAP32[$30 >> 2] = $conv1499; - var $and1502 = $conv1491 & 15; - HEAP32[$28 >> 2] = $and1502; - HEAP32[$mode >> 2] = 23; - var $ret_6 = $ret_5_ph; - var $next_48 = $next_47; - var $have_48 = $have_47; - var $hold_44 = $shr1480; - var $bits_44 = $sub1483; - var $167 = $and1502; - __label__ = 248; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str1170 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_5_ph; - var $next_0_be = $next_47; - var $put_0_be = $put_0; - var $have_0_be = $have_47; - var $left_0_be = $left_0; - var $hold_0_be = $shr1480; - var $bits_0_be = $sub1483; - var $out_0_be = $out_0; - __label__ = 268; - break; - } - } while (0); - $_$359 : do { - if (__label__ == 107) { - var $bits_11; - var $hold_11; - var $have_15; - var $next_15; - var $109 = HEAPU32[$17 >> 2]; - var $and498 = $109 & 512; - var $tobool499 = ($and498 | 0) == 0; - do { - if (!$tobool499) { - var $next_16 = $next_15; - var $have_16 = $have_15; - var $hold_12 = $hold_11; - var $bits_12 = $bits_11; - while (1) { - var $bits_12; - var $hold_12; - var $have_16; - var $next_16; - var $cmp503 = $bits_12 >>> 0 < 16; - if (!$cmp503) { - break; - } - var $cmp507 = ($have_16 | 0) == 0; - if ($cmp507) { - var $ret_8 = $ret_0; - var $next_58 = $next_16; - var $have_58 = 0; - var $hold_54 = $hold_12; - var $bits_54 = $bits_12; - var $out_4 = $out_0; - break $_$12; - } - var $dec511 = $have_16 - 1 | 0; - var $incdec_ptr512 = $next_16 + 1 | 0; - var $110 = HEAPU8[$next_16]; - var $conv513 = $110 & 255; - var $shl514 = $conv513 << $bits_12; - var $add515 = $shl514 + $hold_12 | 0; - var $add516 = $bits_12 + 8 | 0; - var $next_16 = $incdec_ptr512; - var $have_16 = $dec511; - var $hold_12 = $add515; - var $bits_12 = $add516; - } - var $111 = HEAP32[$16 >> 2]; - var $and523 = $111 & 65535; - var $cmp524 = ($hold_12 | 0) == ($and523 | 0); - if ($cmp524) { - var $next_17 = $next_16; - var $have_17 = $have_16; - var $hold_13 = 0; - var $bits_13 = 0; - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str5102 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_0; - var $next_0_be = $next_16; - var $put_0_be = $put_0; - var $have_0_be = $have_16; - var $left_0_be = $left_0; - var $hold_0_be = $hold_12; - var $bits_0_be = $bits_12; - var $out_0_be = $out_0; - __label__ = 268; - break $_$359; - } - var $next_17 = $next_15; - var $have_17 = $have_15; - var $hold_13 = $hold_11; - var $bits_13 = $bits_11; - } while (0); - var $bits_13; - var $hold_13; - var $have_17; - var $next_17; - var $112 = HEAPU32[$18 >> 2]; - var $cmp535 = ($112 | 0) == 0; - if (!$cmp535) { - var $shr53930 = $109 >>> 9; - var $and540 = $shr53930 & 1; - var $hcrc = $112 + 44 | 0; - HEAP32[$hcrc >> 2] = $and540; - var $113 = HEAP32[$18 >> 2]; - var $done543 = $113 + 48 | 0; - HEAP32[$done543 >> 2] = 1; - } - var $call545 = _crc32(0, 0, 0); - HEAP32[$16 >> 2] = $call545; - HEAP32[$adler >> 2] = $call545; - HEAP32[$mode >> 2] = 11; - var $ret_0_be = $ret_0; - var $next_0_be = $next_17; - var $put_0_be = $put_0; - var $have_0_be = $have_17; - var $left_0_be = $left_0; - var $hold_0_be = $hold_13; - var $bits_0_be = $bits_13; - var $out_0_be = $out_0; - __label__ = 268; - break; - } else if (__label__ == 248) { - var $167; - var $bits_44; - var $hold_44; - var $have_48; - var $next_48; - var $ret_6; - var $tobool1507 = ($167 | 0) == 0; - if ($tobool1507) { - var $next_50 = $next_48; - var $have_50 = $have_48; - var $hold_46 = $hold_44; - var $bits_46 = $bits_44; - } else { - var $next_49 = $next_48; - var $have_49 = $have_48; - var $hold_45 = $hold_44; - var $bits_45 = $bits_44; - while (1) { - var $bits_45; - var $hold_45; - var $have_49; - var $next_49; - var $cmp1512 = $bits_45 >>> 0 < $167 >>> 0; - if (!$cmp1512) { - break; - } - var $cmp1516 = ($have_49 | 0) == 0; - if ($cmp1516) { - var $ret_8 = $ret_6; - var $next_58 = $next_49; - var $have_58 = 0; - var $hold_54 = $hold_45; - var $bits_54 = $bits_45; - var $out_4 = $out_0; - break $_$12; - } - // XXX first chunk with a bug-causing difference - var $dec1520 = $have_49 - 1 | 0; - var $incdec_ptr1521 = $next_49 + 1 | 0; - var $168 = HEAPU8[$next_49]; - var $conv1522 = $168 & 255; - var $shl1523 = $conv1522 << $bits_45; - var $add1524 = $shl1523 + $hold_45 | 0; - var $add1525 = $bits_45 + 8 | 0; - var $next_49 = $incdec_ptr1521; - var $have_49 = $dec1520; - var $hold_45 = $add1524; - var $bits_45 = $add1525; - } - var $shl1532 = 1 << $167; - var $sub1533 = $shl1532 - 1 | 0; - var $and1534 = $sub1533 & $hold_45; - var $169 = HEAP32[$30 >> 2]; - var $add1536 = $169 + $and1534 | 0; - HEAP32[$30 >> 2] = $add1536; - var $shr1539 = $hold_45 >>> ($167 >>> 0); - var $sub1541 = $bits_45 - $167 | 0; - var $170 = HEAP32[$25 >> 2]; - var $add1546 = $170 + $167 | 0; - HEAP32[$25 >> 2] = $add1546; - var $next_50 = $next_49; - var $have_50 = $have_49; - var $hold_46 = $shr1539; - var $bits_46 = $sub1541; - } - var $bits_46; - var $hold_46; - var $have_50; - var $next_50; - HEAP32[$mode >> 2] = 24; - var $ret_7 = $ret_6; - var $next_51 = $next_50; - var $have_51 = $have_50; - var $hold_47 = $hold_46; - var $bits_47 = $bits_46; - __label__ = 254; - break; - } - } while (0); - $_$380 : do { - if (__label__ == 254) { - var $bits_47; - var $hold_47; - var $have_51; - var $next_51; - var $ret_7; - var $cmp1550 = ($left_0 | 0) == 0; - if ($cmp1550) { - var $ret_8 = $ret_7; - var $next_58 = $next_51; - var $have_58 = $have_51; - var $hold_54 = $hold_47; - var $bits_54 = $bits_47; - var $out_4 = $out_0; - break $_$12; - } - var $sub1554 = $out_0 - $left_0 | 0; - var $171 = HEAPU32[$30 >> 2]; - var $cmp1556 = $171 >>> 0 > $sub1554 >>> 0; - do { - if ($cmp1556) { - var $sub1560 = $171 - $sub1554 | 0; - var $172 = HEAPU32[$31 >> 2]; - var $cmp1561 = $sub1560 >>> 0 > $172 >>> 0; - do { - if ($cmp1561) { - var $173 = HEAP32[$32 >> 2]; - var $tobool1564 = ($173 | 0) == 0; - if ($tobool1564) { - break; - } - HEAP32[$msg >> 2] = STRING_TABLE.__str169 | 0; - HEAP32[$mode >> 2] = 29; - var $ret_0_be = $ret_7; - var $next_0_be = $next_51; - var $put_0_be = $put_0; - var $have_0_be = $have_51; - var $left_0_be = $left_0; - var $hold_0_be = $hold_47; - var $bits_0_be = $bits_47; - var $out_0_be = $out_0; - break $_$380; - } - } while (0); - var $174 = HEAPU32[$33 >> 2]; - var $cmp1570 = $sub1560 >>> 0 > $174 >>> 0; - if ($cmp1570) { - var $sub1574 = $sub1560 - $174 | 0; - var $175 = HEAP32[$34 >> 2]; - var $176 = HEAP32[$35 >> 2]; - var $sub1575 = $176 - $sub1574 | 0; - var $add_ptr1576 = $175 + $sub1575 | 0; - var $from_0 = $add_ptr1576; - var $copy_7 = $sub1574; - } else { - var $177 = HEAP32[$34 >> 2]; - var $sub1580 = $174 - $sub1560 | 0; - var $add_ptr1581 = $177 + $sub1580 | 0; - var $from_0 = $add_ptr1581; - var $copy_7 = $sub1560; - } - var $copy_7; - var $from_0; - var $178 = HEAPU32[$21 >> 2]; - var $cmp1584 = $copy_7 >>> 0 > $178 >>> 0; - if (!$cmp1584) { - var $from_1 = $from_0; - var $copy_8 = $copy_7; - var $180 = $178; - break; - } - var $from_1 = $from_0; - var $copy_8 = $178; - var $180 = $178; - } else { - var $idx_neg = -$171 | 0; - var $add_ptr1591 = $put_0 + $idx_neg | 0; - var $179 = HEAP32[$21 >> 2]; - var $from_1 = $add_ptr1591; - var $copy_8 = $179; - var $180 = $179; - } - } while (0); - var $180; - var $copy_8; - var $from_1; - var $cmp1594 = $copy_8 >>> 0 > $left_0 >>> 0; - var $copy_9 = $cmp1594 ? $left_0 : $copy_8; - var $sub1600 = $180 - $copy_9 | 0; - HEAP32[$21 >> 2] = $sub1600; - var $181 = $copy_8 ^ -1; - var $182 = $left_0 ^ -1; - var $183 = $181 >>> 0 > $182 >>> 0; - var $umax = $183 ? $181 : $182; - var $from_2 = $from_1; - var $put_1 = $put_0; - var $copy_10 = $copy_9; - while (1) { - var $copy_10; - var $put_1; - var $from_2; - var $incdec_ptr1602 = $from_2 + 1 | 0; - var $184 = HEAP8[$from_2]; - var $incdec_ptr1603 = $put_1 + 1 | 0; - HEAP8[$put_1] = $184; - var $dec1605 = $copy_10 - 1 | 0; - var $tobool1606 = ($dec1605 | 0) == 0; - if ($tobool1606) { - break; - } - var $from_2 = $incdec_ptr1602; - var $put_1 = $incdec_ptr1603; - var $copy_10 = $dec1605; - } - var $sub1598 = $left_0 - $copy_9 | 0; - var $scevgep_sum = $umax ^ -1; - var $scevgep632 = $put_0 + $scevgep_sum | 0; - var $185 = HEAP32[$21 >> 2]; - var $cmp1609 = ($185 | 0) == 0; - if (!$cmp1609) { - var $ret_0_be = $ret_7; - var $next_0_be = $next_51; - var $put_0_be = $scevgep632; - var $have_0_be = $have_51; - var $left_0_be = $sub1598; - var $hold_0_be = $hold_47; - var $bits_0_be = $bits_47; - var $out_0_be = $out_0; - break; - } - HEAP32[$mode >> 2] = 20; - var $ret_0_be = $ret_7; - var $next_0_be = $next_51; - var $put_0_be = $scevgep632; - var $have_0_be = $have_51; - var $left_0_be = $sub1598; - var $hold_0_be = $hold_47; - var $bits_0_be = $bits_47; - var $out_0_be = $out_0; - } - } while (0); - var $out_0_be; - var $bits_0_be; - var $hold_0_be; - var $left_0_be; - var $have_0_be; - var $put_0_be; - var $next_0_be; - var $ret_0_be; - var $_pre883 = HEAP32[$mode >> 2]; - var $ret_0 = $ret_0_be; - var $next_0 = $next_0_be; - var $put_0 = $put_0_be; - var $have_0 = $have_0_be; - var $left_0 = $left_0_be; - var $hold_0 = $hold_0_be; - var $bits_0 = $bits_0_be; - var $out_0 = $out_0_be; - var $49 = $_pre883; - } - var $out_4; - var $bits_54; - var $hold_54; - var $have_58; - var $next_58; - var $ret_8; - HEAP32[$next_out >> 2] = $put_0; - HEAP32[$avail_out >> 2] = $left_0; - HEAP32[$next_in >> 2] = $next_58; - HEAP32[$avail_in15 >> 2] = $have_58; - HEAP32[$11 >> 2] = $hold_54; - HEAP32[$13 >> 2] = $bits_54; - var $199 = HEAP32[$35 >> 2]; - var $tobool1755 = ($199 | 0) == 0; - do { - if ($tobool1755) { - var $200 = HEAPU32[$mode >> 2]; - var $cmp1758 = $200 >>> 0 < 26; - if (!$cmp1758) { - __label__ = 300; - break; - } - var $201 = HEAP32[$avail_out >> 2]; - var $cmp1762 = ($out_4 | 0) == ($201 | 0); - if ($cmp1762) { - __label__ = 300; - break; - } - __label__ = 298; - break; - } else { - __label__ = 298; - } - } while (0); - do { - if (__label__ == 298) { - var $call1765 = _updatewindow($strm, $out_4); - var $tobool1766 = ($call1765 | 0) == 0; - if ($tobool1766) { - break; - } - HEAP32[$mode >> 2] = 30; - var $retval_0 = -4; - break $_$2; - } - } while (0); - var $202 = HEAPU32[$avail_in15 >> 2]; - var $203 = HEAPU32[$avail_out >> 2]; - var $sub1774 = $out_4 - $203 | 0; - var $total_in = $strm + 8 | 0; - var $204 = HEAP32[$total_in >> 2]; - var $sub1772 = $10 - $202 | 0; - var $add1775 = $sub1772 + $204 | 0; - HEAP32[$total_in >> 2] = $add1775; - var $205 = HEAP32[$total_out >> 2]; - var $add1777 = $205 + $sub1774 | 0; - HEAP32[$total_out >> 2] = $add1777; - var $206 = HEAP32[$36 >> 2]; - var $add1779 = $206 + $sub1774 | 0; - HEAP32[$36 >> 2] = $add1779; - var $207 = HEAP32[$15 >> 2]; - var $tobool1781 = ($207 | 0) == 0; - var $tobool1783 = ($out_4 | 0) == ($203 | 0); - var $or_cond34 = $tobool1781 | $tobool1783; - if (!$or_cond34) { - var $208 = HEAP32[$17 >> 2]; - var $tobool1786 = ($208 | 0) == 0; - var $209 = HEAP32[$16 >> 2]; - var $210 = HEAP32[$next_out >> 2]; - var $idx_neg1790 = -$sub1774 | 0; - var $add_ptr1791 = $210 + $idx_neg1790 | 0; - if ($tobool1786) { - var $call1798 = _adler32($209, $add_ptr1791, $sub1774); - var $cond1800 = $call1798; - } else { - var $call1792 = _crc32($209, $add_ptr1791, $sub1774); - var $cond1800 = $call1792; - } - var $cond1800; - HEAP32[$16 >> 2] = $cond1800; - HEAP32[$adler >> 2] = $cond1800; - } - var $211 = HEAP32[$13 >> 2]; - var $212 = HEAP32[$24 >> 2]; - var $tobool1806 = ($212 | 0) != 0; - var $cond1807 = $tobool1806 ? 64 : 0; - var $213 = HEAP32[$mode >> 2]; - var $cmp1810 = ($213 | 0) == 11; - var $cond1812 = $cmp1810 ? 128 : 0; - var $cmp1815 = ($213 | 0) == 19; - if ($cmp1815) { - var $214 = 256; - } else { - var $cmp1818 = ($213 | 0) == 14; - var $phitmp = $cmp1818 ? 256 : 0; - var $214 = $phitmp; - } - var $214; - var $add1808 = $cond1807 + $211 | 0; - var $add1813 = $add1808 + $cond1812 | 0; - var $add1821 = $add1813 + $214 | 0; - var $data_type = $strm + 44 | 0; - HEAP32[$data_type >> 2] = $add1821; - var $cmp1822 = ($10 | 0) == ($202 | 0); - var $or_cond35 = $cmp1822 & $tobool1783; - var $cmp1828 = ($flush | 0) == 4; - var $or_cond36 = $or_cond35 | $cmp1828; - var $cmp1831 = ($ret_8 | 0) == 0; - var $or_cond37 = $or_cond36 & $cmp1831; - var $ret_9 = $or_cond37 ? -5 : $ret_8; - var $retval_0 = $ret_9; - } - } while (0); - var $retval_0; - STACKTOP = __stackBase__; - return $retval_0; - return null; -} - -function _malloc($bytes) { - var __label__; - var $1 = $bytes >>> 0 < 245; - $_$2 : do { - if ($1) { - var $3 = $bytes >>> 0 < 11; - if ($3) { - var $8 = 16; - } else { - var $5 = $bytes + 11 | 0; - var $6 = $5 & -8; - var $8 = $6; - } - var $8; - var $9 = $8 >>> 3; - var $10 = HEAPU32[(__gm_ | 0) >> 2]; - var $11 = $10 >>> ($9 >>> 0); - var $12 = $11 & 3; - var $13 = ($12 | 0) == 0; - if (!$13) { - var $15 = $11 & 1; - var $16 = $15 ^ 1; - var $17 = $16 + $9 | 0; - var $18 = $17 << 1; - var $19 = __gm_ + 40 + ($18 << 2) | 0; - var $20 = $19; - var $_sum10 = $18 + 2 | 0; - var $21 = __gm_ + 40 + ($_sum10 << 2) | 0; - var $22 = HEAPU32[$21 >> 2]; - var $23 = $22 + 8 | 0; - var $24 = HEAPU32[$23 >> 2]; - var $25 = ($20 | 0) == ($24 | 0); - if ($25) { - var $27 = 1 << $17; - var $28 = $27 ^ -1; - var $29 = $10 & $28; - HEAP32[(__gm_ | 0) >> 2] = $29; - } else { - var $31 = $24; - var $32 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $33 = $31 >>> 0 < $32 >>> 0; - if ($33) { - _abort(); - } else { - HEAP32[$21 >> 2] = $24; - var $35 = $24 + 12 | 0; - HEAP32[$35 >> 2] = $20; - } - } - var $38 = $17 << 3; - var $39 = $38 | 3; - var $40 = $22 + 4 | 0; - HEAP32[$40 >> 2] = $39; - var $41 = $22; - var $_sum1112 = $38 | 4; - var $42 = $41 + $_sum1112 | 0; - var $43 = $42; - var $44 = HEAP32[$43 >> 2]; - var $45 = $44 | 1; - HEAP32[$43 >> 2] = $45; - var $46 = $23; - var $mem_0 = $46; - __label__ = 331; - break; - } - var $48 = HEAPU32[(__gm_ + 8 | 0) >> 2]; - var $49 = $8 >>> 0 > $48 >>> 0; - if (!$49) { - var $nb_0 = $8; - __label__ = 155; - break; - } - var $51 = ($11 | 0) == 0; - if (!$51) { - var $53 = $11 << $9; - var $54 = 2 << $9; - var $55 = -$54 | 0; - var $56 = $54 | $55; - var $57 = $53 & $56; - var $58 = -$57 | 0; - var $59 = $57 & $58; - var $60 = $59 - 1 | 0; - var $61 = $60 >>> 12; - var $62 = $61 & 16; - var $63 = $60 >>> ($62 >>> 0); - var $64 = $63 >>> 5; - var $65 = $64 & 8; - var $66 = $63 >>> ($65 >>> 0); - var $67 = $66 >>> 2; - var $68 = $67 & 4; - var $69 = $66 >>> ($68 >>> 0); - var $70 = $69 >>> 1; - var $71 = $70 & 2; - var $72 = $69 >>> ($71 >>> 0); - var $73 = $72 >>> 1; - var $74 = $73 & 1; - var $75 = $65 | $62; - var $76 = $75 | $68; - var $77 = $76 | $71; - var $78 = $77 | $74; - var $79 = $72 >>> ($74 >>> 0); - var $80 = $78 + $79 | 0; - var $81 = $80 << 1; - var $82 = __gm_ + 40 + ($81 << 2) | 0; - var $83 = $82; - var $_sum4 = $81 + 2 | 0; - var $84 = __gm_ + 40 + ($_sum4 << 2) | 0; - var $85 = HEAPU32[$84 >> 2]; - var $86 = $85 + 8 | 0; - var $87 = HEAPU32[$86 >> 2]; - var $88 = ($83 | 0) == ($87 | 0); - if ($88) { - var $90 = 1 << $80; - var $91 = $90 ^ -1; - var $92 = $10 & $91; - HEAP32[(__gm_ | 0) >> 2] = $92; - } else { - var $94 = $87; - var $95 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $96 = $94 >>> 0 < $95 >>> 0; - if ($96) { - _abort(); - } else { - HEAP32[$84 >> 2] = $87; - var $98 = $87 + 12 | 0; - HEAP32[$98 >> 2] = $83; - } - } - var $101 = $80 << 3; - var $102 = $101 - $8 | 0; - var $103 = $8 | 3; - var $104 = $85 + 4 | 0; - HEAP32[$104 >> 2] = $103; - var $105 = $85; - var $106 = $105 + $8 | 0; - var $107 = $106; - var $108 = $102 | 1; - var $_sum56 = $8 | 4; - var $109 = $105 + $_sum56 | 0; - var $110 = $109; - HEAP32[$110 >> 2] = $108; - var $111 = $105 + $101 | 0; - var $112 = $111; - HEAP32[$112 >> 2] = $102; - var $113 = HEAPU32[(__gm_ + 8 | 0) >> 2]; - var $114 = ($113 | 0) == 0; - if (!$114) { - var $116 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $117 = $113 >>> 3; - var $118 = $113 >>> 2; - var $119 = $118 & 1073741822; - var $120 = __gm_ + 40 + ($119 << 2) | 0; - var $121 = $120; - var $122 = HEAPU32[(__gm_ | 0) >> 2]; - var $123 = 1 << $117; - var $124 = $122 & $123; - var $125 = ($124 | 0) == 0; - do { - if ($125) { - var $127 = $122 | $123; - HEAP32[(__gm_ | 0) >> 2] = $127; - var $_sum8_pre = $119 + 2 | 0; - var $_pre = __gm_ + 40 + ($_sum8_pre << 2) | 0; - var $F4_0 = $121; - var $_pre_phi = $_pre; - } else { - var $_sum9 = $119 + 2 | 0; - var $129 = __gm_ + 40 + ($_sum9 << 2) | 0; - var $130 = HEAPU32[$129 >> 2]; - var $131 = $130; - var $132 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $133 = $131 >>> 0 < $132 >>> 0; - if (!$133) { - var $F4_0 = $130; - var $_pre_phi = $129; - break; - } - _abort(); - } - } while (0); - var $_pre_phi; - var $F4_0; - HEAP32[$_pre_phi >> 2] = $116; - var $136 = $F4_0 + 12 | 0; - HEAP32[$136 >> 2] = $116; - var $137 = $116 + 8 | 0; - HEAP32[$137 >> 2] = $F4_0; - var $138 = $116 + 12 | 0; - HEAP32[$138 >> 2] = $121; - } - HEAP32[(__gm_ + 8 | 0) >> 2] = $102; - HEAP32[(__gm_ + 20 | 0) >> 2] = $107; - var $140 = $86; - var $mem_0 = $140; - __label__ = 331; - break; - } - var $142 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $143 = ($142 | 0) == 0; - if ($143) { - var $nb_0 = $8; - __label__ = 155; - break; - } - var $145 = -$142 | 0; - var $146 = $142 & $145; - var $147 = $146 - 1 | 0; - var $148 = $147 >>> 12; - var $149 = $148 & 16; - var $150 = $147 >>> ($149 >>> 0); - var $151 = $150 >>> 5; - var $152 = $151 & 8; - var $153 = $150 >>> ($152 >>> 0); - var $154 = $153 >>> 2; - var $155 = $154 & 4; - var $156 = $153 >>> ($155 >>> 0); - var $157 = $156 >>> 1; - var $158 = $157 & 2; - var $159 = $156 >>> ($158 >>> 0); - var $160 = $159 >>> 1; - var $161 = $160 & 1; - var $162 = $152 | $149; - var $163 = $162 | $155; - var $164 = $163 | $158; - var $165 = $164 | $161; - var $166 = $159 >>> ($161 >>> 0); - var $167 = $165 + $166 | 0; - var $168 = __gm_ + 304 + ($167 << 2) | 0; - var $169 = HEAPU32[$168 >> 2]; - var $170 = $169 + 4 | 0; - var $171 = HEAP32[$170 >> 2]; - var $172 = $171 & -8; - var $173 = $172 - $8 | 0; - var $t_0_i = $169; - var $v_0_i = $169; - var $rsize_0_i = $173; - while (1) { - var $rsize_0_i; - var $v_0_i; - var $t_0_i; - var $175 = $t_0_i + 16 | 0; - var $176 = HEAP32[$175 >> 2]; - var $177 = ($176 | 0) == 0; - if ($177) { - var $179 = $t_0_i + 20 | 0; - var $180 = HEAP32[$179 >> 2]; - var $181 = ($180 | 0) == 0; - if ($181) { - break; - } - var $182 = $180; - } else { - var $182 = $176; - } - var $182; - var $183 = $182 + 4 | 0; - var $184 = HEAP32[$183 >> 2]; - var $185 = $184 & -8; - var $186 = $185 - $8 | 0; - var $187 = $186 >>> 0 < $rsize_0_i >>> 0; - var $_rsize_0_i = $187 ? $186 : $rsize_0_i; - var $_v_0_i = $187 ? $182 : $v_0_i; - var $t_0_i = $182; - var $v_0_i = $_v_0_i; - var $rsize_0_i = $_rsize_0_i; - } - var $189 = $v_0_i; - var $190 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $191 = $189 >>> 0 < $190 >>> 0; - do { - if (!$191) { - var $193 = $189 + $8 | 0; - var $194 = $193; - var $195 = $189 >>> 0 < $193 >>> 0; - if (!$195) { - break; - } - var $197 = $v_0_i + 24 | 0; - var $198 = HEAPU32[$197 >> 2]; - var $199 = $v_0_i + 12 | 0; - var $200 = HEAPU32[$199 >> 2]; - var $201 = ($200 | 0) == ($v_0_i | 0); - do { - if ($201) { - var $212 = $v_0_i + 20 | 0; - var $213 = HEAP32[$212 >> 2]; - var $214 = ($213 | 0) == 0; - if ($214) { - var $216 = $v_0_i + 16 | 0; - var $217 = HEAP32[$216 >> 2]; - var $218 = ($217 | 0) == 0; - if ($218) { - var $R_1_i = 0; - break; - } - var $RP_0_i = $216; - var $R_0_i = $217; - } else { - var $RP_0_i = $212; - var $R_0_i = $213; - __label__ = 39; - } - while (1) { - var $R_0_i; - var $RP_0_i; - var $219 = $R_0_i + 20 | 0; - var $220 = HEAP32[$219 >> 2]; - var $221 = ($220 | 0) == 0; - if (!$221) { - var $RP_0_i = $219; - var $R_0_i = $220; - continue; - } - var $223 = $R_0_i + 16 | 0; - var $224 = HEAPU32[$223 >> 2]; - var $225 = ($224 | 0) == 0; - if ($225) { - break; - } - var $RP_0_i = $223; - var $R_0_i = $224; - } - var $227 = $RP_0_i; - var $228 = $227 >>> 0 < $190 >>> 0; - if ($228) { - _abort(); - } else { - HEAP32[$RP_0_i >> 2] = 0; - var $R_1_i = $R_0_i; - } - } else { - var $203 = $v_0_i + 8 | 0; - var $204 = HEAPU32[$203 >> 2]; - var $205 = $204; - var $206 = $205 >>> 0 < $190 >>> 0; - if ($206) { - _abort(); - } else { - var $208 = $204 + 12 | 0; - HEAP32[$208 >> 2] = $200; - var $209 = $200 + 8 | 0; - HEAP32[$209 >> 2] = $204; - var $R_1_i = $200; - } - } - } while (0); - var $R_1_i; - var $232 = ($198 | 0) == 0; - $_$62 : do { - if (!$232) { - var $234 = $v_0_i + 28 | 0; - var $235 = HEAP32[$234 >> 2]; - var $236 = __gm_ + 304 + ($235 << 2) | 0; - var $237 = HEAP32[$236 >> 2]; - var $238 = ($v_0_i | 0) == ($237 | 0); - do { - if ($238) { - HEAP32[$236 >> 2] = $R_1_i; - var $cond_i = ($R_1_i | 0) == 0; - if (!$cond_i) { - break; - } - var $240 = HEAP32[$234 >> 2]; - var $241 = 1 << $240; - var $242 = $241 ^ -1; - var $243 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $244 = $243 & $242; - HEAP32[(__gm_ + 4 | 0) >> 2] = $244; - break $_$62; - } - var $246 = $198; - var $247 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $248 = $246 >>> 0 < $247 >>> 0; - if ($248) { - _abort(); - } else { - var $250 = $198 + 16 | 0; - var $251 = HEAP32[$250 >> 2]; - var $252 = ($251 | 0) == ($v_0_i | 0); - if ($252) { - HEAP32[$250 >> 2] = $R_1_i; - } else { - var $255 = $198 + 20 | 0; - HEAP32[$255 >> 2] = $R_1_i; - } - var $258 = ($R_1_i | 0) == 0; - if ($258) { - break $_$62; - } - } - } while (0); - var $260 = $R_1_i; - var $261 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $262 = $260 >>> 0 < $261 >>> 0; - if ($262) { - _abort(); - } else { - var $264 = $R_1_i + 24 | 0; - HEAP32[$264 >> 2] = $198; - var $265 = $v_0_i + 16 | 0; - var $266 = HEAPU32[$265 >> 2]; - var $267 = ($266 | 0) == 0; - if (!$267) { - var $269 = $266; - var $270 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $271 = $269 >>> 0 < $270 >>> 0; - if ($271) { - _abort(); - } else { - var $273 = $R_1_i + 16 | 0; - HEAP32[$273 >> 2] = $266; - var $274 = $266 + 24 | 0; - HEAP32[$274 >> 2] = $R_1_i; - } - } - var $277 = $v_0_i + 20 | 0; - var $278 = HEAPU32[$277 >> 2]; - var $279 = ($278 | 0) == 0; - if ($279) { - break; - } - var $281 = $278; - var $282 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $283 = $281 >>> 0 < $282 >>> 0; - if ($283) { - _abort(); - } else { - var $285 = $R_1_i + 20 | 0; - HEAP32[$285 >> 2] = $278; - var $286 = $278 + 24 | 0; - HEAP32[$286 >> 2] = $R_1_i; - } - } - } - } while (0); - var $290 = $rsize_0_i >>> 0 < 16; - if ($290) { - var $292 = $rsize_0_i + $8 | 0; - var $293 = $292 | 3; - var $294 = $v_0_i + 4 | 0; - HEAP32[$294 >> 2] = $293; - var $_sum4_i = $292 + 4 | 0; - var $295 = $189 + $_sum4_i | 0; - var $296 = $295; - var $297 = HEAP32[$296 >> 2]; - var $298 = $297 | 1; - HEAP32[$296 >> 2] = $298; - } else { - var $300 = $8 | 3; - var $301 = $v_0_i + 4 | 0; - HEAP32[$301 >> 2] = $300; - var $302 = $rsize_0_i | 1; - var $_sum_i33 = $8 | 4; - var $303 = $189 + $_sum_i33 | 0; - var $304 = $303; - HEAP32[$304 >> 2] = $302; - var $_sum1_i = $rsize_0_i + $8 | 0; - var $305 = $189 + $_sum1_i | 0; - var $306 = $305; - HEAP32[$306 >> 2] = $rsize_0_i; - var $307 = HEAPU32[(__gm_ + 8 | 0) >> 2]; - var $308 = ($307 | 0) == 0; - if (!$308) { - var $310 = HEAPU32[(__gm_ + 20 | 0) >> 2]; - var $311 = $307 >>> 3; - var $312 = $307 >>> 2; - var $313 = $312 & 1073741822; - var $314 = __gm_ + 40 + ($313 << 2) | 0; - var $315 = $314; - var $316 = HEAPU32[(__gm_ | 0) >> 2]; - var $317 = 1 << $311; - var $318 = $316 & $317; - var $319 = ($318 | 0) == 0; - do { - if ($319) { - var $321 = $316 | $317; - HEAP32[(__gm_ | 0) >> 2] = $321; - var $_sum2_pre_i = $313 + 2 | 0; - var $_pre_i = __gm_ + 40 + ($_sum2_pre_i << 2) | 0; - var $F1_0_i = $315; - var $_pre_phi_i = $_pre_i; - } else { - var $_sum3_i = $313 + 2 | 0; - var $323 = __gm_ + 40 + ($_sum3_i << 2) | 0; - var $324 = HEAPU32[$323 >> 2]; - var $325 = $324; - var $326 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $327 = $325 >>> 0 < $326 >>> 0; - if (!$327) { - var $F1_0_i = $324; - var $_pre_phi_i = $323; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i; - var $F1_0_i; - HEAP32[$_pre_phi_i >> 2] = $310; - var $330 = $F1_0_i + 12 | 0; - HEAP32[$330 >> 2] = $310; - var $331 = $310 + 8 | 0; - HEAP32[$331 >> 2] = $F1_0_i; - var $332 = $310 + 12 | 0; - HEAP32[$332 >> 2] = $315; - } - HEAP32[(__gm_ + 8 | 0) >> 2] = $rsize_0_i; - HEAP32[(__gm_ + 20 | 0) >> 2] = $194; - } - var $335 = $v_0_i + 8 | 0; - var $336 = $335; - var $337 = ($335 | 0) == 0; - if ($337) { - var $nb_0 = $8; - __label__ = 155; - break $_$2; - } - var $mem_0 = $336; - __label__ = 331; - break $_$2; - } - } while (0); - _abort(); - } else { - var $339 = $bytes >>> 0 > 4294967231; - if ($339) { - var $nb_0 = -1; - __label__ = 155; - break; - } - var $341 = $bytes + 11 | 0; - var $342 = $341 & -8; - var $343 = HEAPU32[(__gm_ + 4 | 0) >> 2]; - var $344 = ($343 | 0) == 0; - if ($344) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $346 = -$342 | 0; - var $347 = $341 >>> 8; - var $348 = ($347 | 0) == 0; - do { - if ($348) { - var $idx_0_i = 0; - } else { - var $350 = $342 >>> 0 > 16777215; - if ($350) { - var $idx_0_i = 31; - break; - } - var $352 = $347 + 1048320 | 0; - var $353 = $352 >>> 16; - var $354 = $353 & 8; - var $355 = $347 << $354; - var $356 = $355 + 520192 | 0; - var $357 = $356 >>> 16; - var $358 = $357 & 4; - var $359 = $355 << $358; - var $360 = $359 + 245760 | 0; - var $361 = $360 >>> 16; - var $362 = $361 & 2; - var $363 = $358 | $354; - var $364 = $363 | $362; - var $365 = 14 - $364 | 0; - var $366 = $359 << $362; - var $367 = $366 >>> 15; - var $368 = $365 + $367 | 0; - var $369 = $368 << 1; - var $370 = $368 + 7 | 0; - var $371 = $342 >>> ($370 >>> 0); - var $372 = $371 & 1; - var $373 = $372 | $369; - var $idx_0_i = $373; - } - } while (0); - var $idx_0_i; - var $375 = __gm_ + 304 + ($idx_0_i << 2) | 0; - var $376 = HEAPU32[$375 >> 2]; - var $377 = ($376 | 0) == 0; - $_$110 : do { - if ($377) { - var $v_2_i = 0; - var $rsize_2_i = $346; - var $t_1_i = 0; - } else { - var $379 = ($idx_0_i | 0) == 31; - if ($379) { - var $384 = 0; - } else { - var $381 = $idx_0_i >>> 1; - var $382 = 25 - $381 | 0; - var $384 = $382; - } - var $384; - var $385 = $342 << $384; - var $v_0_i15 = 0; - var $rsize_0_i14 = $346; - var $t_0_i13 = $376; - var $sizebits_0_i = $385; - var $rst_0_i = 0; - while (1) { - var $rst_0_i; - var $sizebits_0_i; - var $t_0_i13; - var $rsize_0_i14; - var $v_0_i15; - var $387 = $t_0_i13 + 4 | 0; - var $388 = HEAP32[$387 >> 2]; - var $389 = $388 & -8; - var $390 = $389 - $342 | 0; - var $391 = $390 >>> 0 < $rsize_0_i14 >>> 0; - if ($391) { - var $393 = ($389 | 0) == ($342 | 0); - if ($393) { - var $v_2_i = $t_0_i13; - var $rsize_2_i = $390; - var $t_1_i = $t_0_i13; - break $_$110; - } - var $v_1_i = $t_0_i13; - var $rsize_1_i = $390; - } else { - var $v_1_i = $v_0_i15; - var $rsize_1_i = $rsize_0_i14; - } - var $rsize_1_i; - var $v_1_i; - var $395 = $t_0_i13 + 20 | 0; - var $396 = HEAPU32[$395 >> 2]; - var $397 = $sizebits_0_i >>> 31; - var $398 = $t_0_i13 + 16 + ($397 << 2) | 0; - var $399 = HEAPU32[$398 >> 2]; - var $400 = ($396 | 0) == 0; - var $401 = ($396 | 0) == ($399 | 0); - var $or_cond_i = $400 | $401; - var $rst_1_i = $or_cond_i ? $rst_0_i : $396; - var $402 = ($399 | 0) == 0; - var $403 = $sizebits_0_i << 1; - if ($402) { - var $v_2_i = $v_1_i; - var $rsize_2_i = $rsize_1_i; - var $t_1_i = $rst_1_i; - break $_$110; - } - var $v_0_i15 = $v_1_i; - var $rsize_0_i14 = $rsize_1_i; - var $t_0_i13 = $399; - var $sizebits_0_i = $403; - var $rst_0_i = $rst_1_i; - } - } - } while (0); - var $t_1_i; - var $rsize_2_i; - var $v_2_i; - var $404 = ($t_1_i | 0) == 0; - var $405 = ($v_2_i | 0) == 0; - var $or_cond19_i = $404 & $405; - if ($or_cond19_i) { - var $407 = 2 << $idx_0_i; - var $408 = -$407 | 0; - var $409 = $407 | $408; - var $410 = $343 & $409; - var $411 = ($410 | 0) == 0; - if ($411) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $413 = -$410 | 0; - var $414 = $410 & $413; - var $415 = $414 - 1 | 0; - var $416 = $415 >>> 12; - var $417 = $416 & 16; - var $418 = $415 >>> ($417 >>> 0); - var $419 = $418 >>> 5; - var $420 = $419 & 8; - var $421 = $418 >>> ($420 >>> 0); - var $422 = $421 >>> 2; - var $423 = $422 & 4; - var $424 = $421 >>> ($423 >>> 0); - var $425 = $424 >>> 1; - var $426 = $425 & 2; - var $427 = $424 >>> ($426 >>> 0); - var $428 = $427 >>> 1; - var $429 = $428 & 1; - var $430 = $420 | $417; - var $431 = $430 | $423; - var $432 = $431 | $426; - var $433 = $432 | $429; - var $434 = $427 >>> ($429 >>> 0); - var $435 = $433 + $434 | 0; - var $436 = __gm_ + 304 + ($435 << 2) | 0; - var $437 = HEAP32[$436 >> 2]; - var $t_2_ph_i = $437; - } else { - var $t_2_ph_i = $t_1_i; - } - var $t_2_ph_i; - var $438 = ($t_2_ph_i | 0) == 0; - $_$125 : do { - if ($438) { - var $rsize_3_lcssa_i = $rsize_2_i; - var $v_3_lcssa_i = $v_2_i; - } else { - var $t_224_i = $t_2_ph_i; - var $rsize_325_i = $rsize_2_i; - var $v_326_i = $v_2_i; - while (1) { - var $v_326_i; - var $rsize_325_i; - var $t_224_i; - var $439 = $t_224_i + 4 | 0; - var $440 = HEAP32[$439 >> 2]; - var $441 = $440 & -8; - var $442 = $441 - $342 | 0; - var $443 = $442 >>> 0 < $rsize_325_i >>> 0; - var $_rsize_3_i = $443 ? $442 : $rsize_325_i; - var $t_2_v_3_i = $443 ? $t_224_i : $v_326_i; - var $444 = $t_224_i + 16 | 0; - var $445 = HEAPU32[$444 >> 2]; - var $446 = ($445 | 0) == 0; - if (!$446) { - var $t_224_i = $445; - var $rsize_325_i = $_rsize_3_i; - var $v_326_i = $t_2_v_3_i; - continue; - } - var $447 = $t_224_i + 20 | 0; - var $448 = HEAPU32[$447 >> 2]; - var $449 = ($448 | 0) == 0; - if ($449) { - var $rsize_3_lcssa_i = $_rsize_3_i; - var $v_3_lcssa_i = $t_2_v_3_i; - break $_$125; - } - var $t_224_i = $448; - var $rsize_325_i = $_rsize_3_i; - var $v_326_i = $t_2_v_3_i; - } - } - } while (0); - var $v_3_lcssa_i; - var $rsize_3_lcssa_i; - var $450 = ($v_3_lcssa_i | 0) == 0; - if ($450) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $452 = HEAP32[(__gm_ + 8 | 0) >> 2]; - var $453 = $452 - $342 | 0; - var $454 = $rsize_3_lcssa_i >>> 0 < $453 >>> 0; - if (!$454) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $456 = $v_3_lcssa_i; - var $457 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $458 = $456 >>> 0 < $457 >>> 0; - do { - if (!$458) { - var $460 = $456 + $342 | 0; - var $461 = $460; - var $462 = $456 >>> 0 < $460 >>> 0; - if (!$462) { - break; - } - var $464 = $v_3_lcssa_i + 24 | 0; - var $465 = HEAPU32[$464 >> 2]; - var $466 = $v_3_lcssa_i + 12 | 0; - var $467 = HEAPU32[$466 >> 2]; - var $468 = ($467 | 0) == ($v_3_lcssa_i | 0); - do { - if ($468) { - var $479 = $v_3_lcssa_i + 20 | 0; - var $480 = HEAP32[$479 >> 2]; - var $481 = ($480 | 0) == 0; - if ($481) { - var $483 = $v_3_lcssa_i + 16 | 0; - var $484 = HEAP32[$483 >> 2]; - var $485 = ($484 | 0) == 0; - if ($485) { - var $R_1_i19 = 0; - break; - } - var $RP_0_i17 = $483; - var $R_0_i16 = $484; - } else { - var $RP_0_i17 = $479; - var $R_0_i16 = $480; - __label__ = 103; - } - while (1) { - var $R_0_i16; - var $RP_0_i17; - var $486 = $R_0_i16 + 20 | 0; - var $487 = HEAP32[$486 >> 2]; - var $488 = ($487 | 0) == 0; - if (!$488) { - var $RP_0_i17 = $486; - var $R_0_i16 = $487; - continue; - } - var $490 = $R_0_i16 + 16 | 0; - var $491 = HEAPU32[$490 >> 2]; - var $492 = ($491 | 0) == 0; - if ($492) { - break; - } - var $RP_0_i17 = $490; - var $R_0_i16 = $491; - } - var $494 = $RP_0_i17; - var $495 = $494 >>> 0 < $457 >>> 0; - if ($495) { - _abort(); - } else { - HEAP32[$RP_0_i17 >> 2] = 0; - var $R_1_i19 = $R_0_i16; - } - } else { - var $470 = $v_3_lcssa_i + 8 | 0; - var $471 = HEAPU32[$470 >> 2]; - var $472 = $471; - var $473 = $472 >>> 0 < $457 >>> 0; - if ($473) { - _abort(); - } else { - var $475 = $471 + 12 | 0; - HEAP32[$475 >> 2] = $467; - var $476 = $467 + 8 | 0; - HEAP32[$476 >> 2] = $471; - var $R_1_i19 = $467; - } - } - } while (0); - var $R_1_i19; - var $499 = ($465 | 0) == 0; - $_$151 : do { - if (!$499) { - var $501 = $v_3_lcssa_i + 28 | 0; - var $502 = HEAP32[$501 >> 2]; - var $503 = __gm_ + 304 + ($502 << 2) | 0; - var $504 = HEAP32[$503 >> 2]; - var $505 = ($v_3_lcssa_i | 0) == ($504 | 0); - do { - if ($505) { - HEAP32[$503 >> 2] = $R_1_i19; - var $cond_i20 = ($R_1_i19 | 0) == 0; - if (!$cond_i20) { - break; - } - var $507 = HEAP32[$501 >> 2]; - var $508 = 1 << $507; - var $509 = $508 ^ -1; - var $510 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $511 = $510 & $509; - HEAP32[(__gm_ + 4 | 0) >> 2] = $511; - break $_$151; - } - var $513 = $465; - var $514 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $515 = $513 >>> 0 < $514 >>> 0; - if ($515) { - _abort(); - } else { - var $517 = $465 + 16 | 0; - var $518 = HEAP32[$517 >> 2]; - var $519 = ($518 | 0) == ($v_3_lcssa_i | 0); - if ($519) { - HEAP32[$517 >> 2] = $R_1_i19; - } else { - var $522 = $465 + 20 | 0; - HEAP32[$522 >> 2] = $R_1_i19; - } - var $525 = ($R_1_i19 | 0) == 0; - if ($525) { - break $_$151; - } - } - } while (0); - var $527 = $R_1_i19; - var $528 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $529 = $527 >>> 0 < $528 >>> 0; - if ($529) { - _abort(); - } else { - var $531 = $R_1_i19 + 24 | 0; - HEAP32[$531 >> 2] = $465; - var $532 = $v_3_lcssa_i + 16 | 0; - var $533 = HEAPU32[$532 >> 2]; - var $534 = ($533 | 0) == 0; - if (!$534) { - var $536 = $533; - var $537 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $538 = $536 >>> 0 < $537 >>> 0; - if ($538) { - _abort(); - } else { - var $540 = $R_1_i19 + 16 | 0; - HEAP32[$540 >> 2] = $533; - var $541 = $533 + 24 | 0; - HEAP32[$541 >> 2] = $R_1_i19; - } - } - var $544 = $v_3_lcssa_i + 20 | 0; - var $545 = HEAPU32[$544 >> 2]; - var $546 = ($545 | 0) == 0; - if ($546) { - break; - } - var $548 = $545; - var $549 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $550 = $548 >>> 0 < $549 >>> 0; - if ($550) { - _abort(); - } else { - var $552 = $R_1_i19 + 20 | 0; - HEAP32[$552 >> 2] = $545; - var $553 = $545 + 24 | 0; - HEAP32[$553 >> 2] = $R_1_i19; - } - } - } - } while (0); - var $557 = $rsize_3_lcssa_i >>> 0 < 16; - $_$179 : do { - if ($557) { - var $559 = $rsize_3_lcssa_i + $342 | 0; - var $560 = $559 | 3; - var $561 = $v_3_lcssa_i + 4 | 0; - HEAP32[$561 >> 2] = $560; - var $_sum18_i = $559 + 4 | 0; - var $562 = $456 + $_sum18_i | 0; - var $563 = $562; - var $564 = HEAP32[$563 >> 2]; - var $565 = $564 | 1; - HEAP32[$563 >> 2] = $565; - } else { - var $567 = $342 | 3; - var $568 = $v_3_lcssa_i + 4 | 0; - HEAP32[$568 >> 2] = $567; - var $569 = $rsize_3_lcssa_i | 1; - var $_sum_i2232 = $342 | 4; - var $570 = $456 + $_sum_i2232 | 0; - var $571 = $570; - HEAP32[$571 >> 2] = $569; - var $_sum1_i23 = $rsize_3_lcssa_i + $342 | 0; - var $572 = $456 + $_sum1_i23 | 0; - var $573 = $572; - HEAP32[$573 >> 2] = $rsize_3_lcssa_i; - var $574 = $rsize_3_lcssa_i >>> 0 < 256; - if ($574) { - var $576 = $rsize_3_lcssa_i >>> 3; - var $577 = $rsize_3_lcssa_i >>> 2; - var $578 = $577 & 1073741822; - var $579 = __gm_ + 40 + ($578 << 2) | 0; - var $580 = $579; - var $581 = HEAPU32[(__gm_ | 0) >> 2]; - var $582 = 1 << $576; - var $583 = $581 & $582; - var $584 = ($583 | 0) == 0; - do { - if ($584) { - var $586 = $581 | $582; - HEAP32[(__gm_ | 0) >> 2] = $586; - var $_sum14_pre_i = $578 + 2 | 0; - var $_pre_i24 = __gm_ + 40 + ($_sum14_pre_i << 2) | 0; - var $F5_0_i = $580; - var $_pre_phi_i25 = $_pre_i24; - } else { - var $_sum17_i = $578 + 2 | 0; - var $588 = __gm_ + 40 + ($_sum17_i << 2) | 0; - var $589 = HEAPU32[$588 >> 2]; - var $590 = $589; - var $591 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $592 = $590 >>> 0 < $591 >>> 0; - if (!$592) { - var $F5_0_i = $589; - var $_pre_phi_i25 = $588; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i25; - var $F5_0_i; - HEAP32[$_pre_phi_i25 >> 2] = $461; - var $595 = $F5_0_i + 12 | 0; - HEAP32[$595 >> 2] = $461; - var $_sum15_i = $342 + 8 | 0; - var $596 = $456 + $_sum15_i | 0; - var $597 = $596; - HEAP32[$597 >> 2] = $F5_0_i; - var $_sum16_i = $342 + 12 | 0; - var $598 = $456 + $_sum16_i | 0; - var $599 = $598; - HEAP32[$599 >> 2] = $580; - } else { - var $601 = $460; - var $602 = $rsize_3_lcssa_i >>> 8; - var $603 = ($602 | 0) == 0; - do { - if ($603) { - var $I7_0_i = 0; - } else { - var $605 = $rsize_3_lcssa_i >>> 0 > 16777215; - if ($605) { - var $I7_0_i = 31; - break; - } - var $607 = $602 + 1048320 | 0; - var $608 = $607 >>> 16; - var $609 = $608 & 8; - var $610 = $602 << $609; - var $611 = $610 + 520192 | 0; - var $612 = $611 >>> 16; - var $613 = $612 & 4; - var $614 = $610 << $613; - var $615 = $614 + 245760 | 0; - var $616 = $615 >>> 16; - var $617 = $616 & 2; - var $618 = $613 | $609; - var $619 = $618 | $617; - var $620 = 14 - $619 | 0; - var $621 = $614 << $617; - var $622 = $621 >>> 15; - var $623 = $620 + $622 | 0; - var $624 = $623 << 1; - var $625 = $623 + 7 | 0; - var $626 = $rsize_3_lcssa_i >>> ($625 >>> 0); - var $627 = $626 & 1; - var $628 = $627 | $624; - var $I7_0_i = $628; - } - } while (0); - var $I7_0_i; - var $630 = __gm_ + 304 + ($I7_0_i << 2) | 0; - var $_sum2_i = $342 + 28 | 0; - var $631 = $456 + $_sum2_i | 0; - var $632 = $631; - HEAP32[$632 >> 2] = $I7_0_i; - var $_sum3_i26 = $342 + 16 | 0; - var $633 = $456 + $_sum3_i26 | 0; - var $_sum4_i27 = $342 + 20 | 0; - var $634 = $456 + $_sum4_i27 | 0; - var $635 = $634; - HEAP32[$635 >> 2] = 0; - var $636 = $633; - HEAP32[$636 >> 2] = 0; - var $637 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $638 = 1 << $I7_0_i; - var $639 = $637 & $638; - var $640 = ($639 | 0) == 0; - if ($640) { - var $642 = $637 | $638; - HEAP32[(__gm_ + 4 | 0) >> 2] = $642; - HEAP32[$630 >> 2] = $601; - var $643 = $630; - var $_sum5_i = $342 + 24 | 0; - var $644 = $456 + $_sum5_i | 0; - var $645 = $644; - HEAP32[$645 >> 2] = $643; - var $_sum6_i = $342 + 12 | 0; - var $646 = $456 + $_sum6_i | 0; - var $647 = $646; - HEAP32[$647 >> 2] = $601; - var $_sum7_i = $342 + 8 | 0; - var $648 = $456 + $_sum7_i | 0; - var $649 = $648; - HEAP32[$649 >> 2] = $601; - } else { - var $651 = HEAP32[$630 >> 2]; - var $652 = ($I7_0_i | 0) == 31; - if ($652) { - var $657 = 0; - } else { - var $654 = $I7_0_i >>> 1; - var $655 = 25 - $654 | 0; - var $657 = $655; - } - var $657; - var $658 = $rsize_3_lcssa_i << $657; - var $K12_0_i = $658; - var $T_0_i = $651; - while (1) { - var $T_0_i; - var $K12_0_i; - var $660 = $T_0_i + 4 | 0; - var $661 = HEAP32[$660 >> 2]; - var $662 = $661 & -8; - var $663 = ($662 | 0) == ($rsize_3_lcssa_i | 0); - if ($663) { - var $683 = $T_0_i + 8 | 0; - var $684 = HEAPU32[$683 >> 2]; - var $685 = $T_0_i; - var $686 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $687 = $685 >>> 0 < $686 >>> 0; - do { - if (!$687) { - var $689 = $684; - var $690 = $689 >>> 0 < $686 >>> 0; - if ($690) { - break; - } - var $692 = $684 + 12 | 0; - HEAP32[$692 >> 2] = $601; - HEAP32[$683 >> 2] = $601; - var $_sum8_i = $342 + 8 | 0; - var $693 = $456 + $_sum8_i | 0; - var $694 = $693; - HEAP32[$694 >> 2] = $684; - var $_sum9_i = $342 + 12 | 0; - var $695 = $456 + $_sum9_i | 0; - var $696 = $695; - HEAP32[$696 >> 2] = $T_0_i; - var $_sum10_i = $342 + 24 | 0; - var $697 = $456 + $_sum10_i | 0; - var $698 = $697; - HEAP32[$698 >> 2] = 0; - break $_$179; - } - } while (0); - _abort(); - } else { - var $665 = $K12_0_i >>> 31; - var $666 = $T_0_i + 16 + ($665 << 2) | 0; - var $667 = HEAPU32[$666 >> 2]; - var $668 = ($667 | 0) == 0; - var $669 = $K12_0_i << 1; - if (!$668) { - var $K12_0_i = $669; - var $T_0_i = $667; - continue; - } - var $671 = $666; - var $672 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $673 = $671 >>> 0 < $672 >>> 0; - if (!$673) { - HEAP32[$666 >> 2] = $601; - var $_sum11_i = $342 + 24 | 0; - var $675 = $456 + $_sum11_i | 0; - var $676 = $675; - HEAP32[$676 >> 2] = $T_0_i; - var $_sum12_i = $342 + 12 | 0; - var $677 = $456 + $_sum12_i | 0; - var $678 = $677; - HEAP32[$678 >> 2] = $601; - var $_sum13_i = $342 + 8 | 0; - var $679 = $456 + $_sum13_i | 0; - var $680 = $679; - HEAP32[$680 >> 2] = $601; - break $_$179; - } - _abort(); - } - } - } - } - } - } while (0); - var $700 = $v_3_lcssa_i + 8 | 0; - var $701 = $700; - var $702 = ($700 | 0) == 0; - if ($702) { - var $nb_0 = $342; - __label__ = 155; - break $_$2; - } - var $mem_0 = $701; - __label__ = 331; - break $_$2; - } - } while (0); - _abort(); - } - } while (0); - $_$215 : do { - if (__label__ == 155) { - var $nb_0; - var $703 = HEAPU32[(__gm_ + 8 | 0) >> 2]; - var $704 = $nb_0 >>> 0 > $703 >>> 0; - if ($704) { - var $732 = HEAPU32[(__gm_ + 12 | 0) >> 2]; - var $733 = $nb_0 >>> 0 < $732 >>> 0; - if ($733) { - var $735 = $732 - $nb_0 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $735; - var $736 = HEAPU32[(__gm_ + 24 | 0) >> 2]; - var $737 = $736; - var $738 = $737 + $nb_0 | 0; - var $739 = $738; - HEAP32[(__gm_ + 24 | 0) >> 2] = $739; - var $740 = $735 | 1; - var $_sum = $nb_0 + 4 | 0; - var $741 = $737 + $_sum | 0; - var $742 = $741; - HEAP32[$742 >> 2] = $740; - var $743 = $nb_0 | 3; - var $744 = $736 + 4 | 0; - HEAP32[$744 >> 2] = $743; - var $745 = $736 + 8 | 0; - var $746 = $745; - var $mem_0 = $746; - } else { - var $748 = HEAP32[(_mparams | 0) >> 2]; - var $749 = ($748 | 0) == 0; - do { - if ($749) { - var $751 = HEAP32[(_mparams | 0) >> 2]; - var $752 = ($751 | 0) == 0; - if (!$752) { - break; - } - var $754 = _sysconf(8); - var $755 = $754 - 1 | 0; - var $756 = $755 & $754; - var $757 = ($756 | 0) == 0; - if ($757) { - HEAP32[(_mparams + 8 | 0) >> 2] = $754; - HEAP32[(_mparams + 4 | 0) >> 2] = $754; - HEAP32[(_mparams + 12 | 0) >> 2] = -1; - HEAP32[(_mparams + 16 | 0) >> 2] = 2097152; - HEAP32[(_mparams + 20 | 0) >> 2] = 0; - HEAP32[(__gm_ + 440 | 0) >> 2] = 0; - var $760 = _time(0); - var $761 = $760 & -16; - var $762 = $761 ^ 1431655768; - HEAP32[(_mparams | 0) >> 2] = $762; - } else { - _abort(); - } - } - } while (0); - var $763 = HEAP32[(__gm_ + 440 | 0) >> 2]; - var $764 = $763 & 4; - var $765 = ($764 | 0) == 0; - $_$234 : do { - if ($765) { - var $767 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $768 = ($767 | 0) == 0; - $_$236 : do { - if (!$768) { - var $770 = $767; - var $sp_0_i_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i_i; - var $772 = $sp_0_i_i | 0; - var $773 = HEAPU32[$772 >> 2]; - var $774 = $773 >>> 0 > $770 >>> 0; - if (!$774) { - var $776 = $sp_0_i_i + 4 | 0; - var $777 = HEAP32[$776 >> 2]; - var $778 = $773 + $777 | 0; - var $779 = $778 >>> 0 > $770 >>> 0; - if ($779) { - break; - } - } - var $781 = $sp_0_i_i + 8 | 0; - var $782 = HEAPU32[$781 >> 2]; - var $783 = ($782 | 0) == 0; - if ($783) { - __label__ = 174; - break $_$236; - } - var $sp_0_i_i = $782; - } - var $784 = ($sp_0_i_i | 0) == 0; - if ($784) { - __label__ = 174; - break; - } - var $810 = HEAP32[(__gm_ + 12 | 0) >> 2]; - var $811 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $812 = $nb_0 + 47 | 0; - var $813 = $812 - $810 | 0; - var $814 = $813 + $811 | 0; - var $815 = -$811 | 0; - var $816 = $814 & $815; - var $817 = $816 >>> 0 < 2147483647; - if (!$817) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $819 = _sbrk($816); - var $820 = HEAP32[$772 >> 2]; - var $821 = HEAP32[$776 >> 2]; - var $822 = $820 + $821 | 0; - var $823 = ($819 | 0) == ($822 | 0); - var $_1_i = $823 ? $816 : 0; - var $_2_i = $823 ? $819 : -1; - var $tbase_0_i = $_2_i; - var $tsize_0_i = $_1_i; - var $asize_1_i = $816; - var $br_0_i = $819; - __label__ = 181; - break; - } - __label__ = 174; - } while (0); - do { - if (__label__ == 174) { - var $785 = _sbrk(0); - var $786 = ($785 | 0) == -1; - if ($786) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $788 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $789 = $nb_0 + 47 | 0; - var $790 = $789 + $788 | 0; - var $791 = -$788 | 0; - var $792 = $790 & $791; - var $793 = $785; - var $794 = HEAP32[(_mparams + 4 | 0) >> 2]; - var $795 = $794 - 1 | 0; - var $796 = $795 & $793; - var $797 = ($796 | 0) == 0; - if ($797) { - var $asize_0_i = $792; - } else { - var $799 = $795 + $793 | 0; - var $800 = -$794 | 0; - var $801 = $799 & $800; - var $802 = $792 - $793 | 0; - var $803 = $802 + $801 | 0; - var $asize_0_i = $803; - } - var $asize_0_i; - var $805 = $asize_0_i >>> 0 < 2147483647; - if (!$805) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $807 = _sbrk($asize_0_i); - var $808 = ($807 | 0) == ($785 | 0); - var $asize_0__i = $808 ? $asize_0_i : 0; - var $__i = $808 ? $785 : -1; - var $tbase_0_i = $__i; - var $tsize_0_i = $asize_0__i; - var $asize_1_i = $asize_0_i; - var $br_0_i = $807; - __label__ = 181; - break; - } - } while (0); - $_$253 : do { - if (__label__ == 181) { - var $br_0_i; - var $asize_1_i; - var $tsize_0_i; - var $tbase_0_i; - var $825 = -$asize_1_i | 0; - var $826 = ($tbase_0_i | 0) == -1; - if (!$826) { - var $tsize_242_i = $tsize_0_i; - var $tbase_243_i = $tbase_0_i; - __label__ = 194; - break $_$234; - } - var $828 = ($br_0_i | 0) != -1; - var $829 = $asize_1_i >>> 0 < 2147483647; - var $or_cond_i28 = $828 & $829; - do { - if ($or_cond_i28) { - var $831 = $nb_0 + 48 | 0; - var $832 = $asize_1_i >>> 0 < $831 >>> 0; - if (!$832) { - var $asize_2_i = $asize_1_i; - break; - } - var $834 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $835 = $nb_0 + 47 | 0; - var $836 = $835 - $asize_1_i | 0; - var $837 = $836 + $834 | 0; - var $838 = -$834 | 0; - var $839 = $837 & $838; - var $840 = $839 >>> 0 < 2147483647; - if (!$840) { - var $asize_2_i = $asize_1_i; - break; - } - var $842 = _sbrk($839); - var $843 = ($842 | 0) == -1; - if ($843) { - var $847 = _sbrk($825); - var $tsize_0242932_ph_i = $tsize_0_i; - break $_$253; - } - var $845 = $839 + $asize_1_i | 0; - var $asize_2_i = $845; - } else { - var $asize_2_i = $asize_1_i; - } - } while (0); - var $asize_2_i; - var $849 = ($br_0_i | 0) == -1; - if (!$849) { - var $tsize_242_i = $asize_2_i; - var $tbase_243_i = $br_0_i; - __label__ = 194; - break $_$234; - } - var $852 = HEAP32[(__gm_ + 440 | 0) >> 2]; - var $853 = $852 | 4; - HEAP32[(__gm_ + 440 | 0) >> 2] = $853; - var $tsize_137_i = $tsize_0_i; - __label__ = 191; - break $_$234; - } - } while (0); - var $tsize_0242932_ph_i; - var $850 = HEAP32[(__gm_ + 440 | 0) >> 2]; - var $851 = $850 | 4; - HEAP32[(__gm_ + 440 | 0) >> 2] = $851; - var $tsize_137_i = $tsize_0242932_ph_i; - __label__ = 191; - break; - } - var $tsize_137_i = 0; - __label__ = 191; - } while (0); - do { - if (__label__ == 191) { - var $tsize_137_i; - var $854 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $855 = $nb_0 + 47 | 0; - var $856 = $855 + $854 | 0; - var $857 = -$854 | 0; - var $858 = $856 & $857; - var $859 = $858 >>> 0 < 2147483647; - if (!$859) { - __label__ = 330; - break; - } - var $861 = _sbrk($858); - var $862 = _sbrk(0); - var $notlhs_i = ($861 | 0) != -1; - var $notrhs_i = ($862 | 0) != -1; - var $or_cond3_not_i = $notrhs_i & $notlhs_i; - var $863 = $861 >>> 0 < $862 >>> 0; - var $or_cond4_i = $or_cond3_not_i & $863; - if (!$or_cond4_i) { - __label__ = 330; - break; - } - var $864 = $862; - var $865 = $861; - var $866 = $864 - $865 | 0; - var $867 = $nb_0 + 40 | 0; - var $868 = $866 >>> 0 > $867 >>> 0; - var $_tsize_1_i = $868 ? $866 : $tsize_137_i; - var $_tbase_1_i = $868 ? $861 : -1; - var $869 = ($_tbase_1_i | 0) == -1; - if ($869) { - __label__ = 330; - break; - } - var $tsize_242_i = $_tsize_1_i; - var $tbase_243_i = $_tbase_1_i; - __label__ = 194; - break; - } - } while (0); - do { - if (__label__ == 194) { - var $tbase_243_i; - var $tsize_242_i; - var $870 = HEAP32[(__gm_ + 432 | 0) >> 2]; - var $871 = $870 + $tsize_242_i | 0; - HEAP32[(__gm_ + 432 | 0) >> 2] = $871; - var $872 = HEAPU32[(__gm_ + 436 | 0) >> 2]; - var $873 = $871 >>> 0 > $872 >>> 0; - if ($873) { - HEAP32[(__gm_ + 436 | 0) >> 2] = $871; - } - var $876 = HEAPU32[(__gm_ + 24 | 0) >> 2]; - var $877 = ($876 | 0) == 0; - $_$275 : do { - if ($877) { - var $879 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $880 = ($879 | 0) == 0; - var $881 = $tbase_243_i >>> 0 < $879 >>> 0; - var $or_cond5_i = $880 | $881; - if ($or_cond5_i) { - HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i; - } - HEAP32[(__gm_ + 444 | 0) >> 2] = $tbase_243_i; - HEAP32[(__gm_ + 448 | 0) >> 2] = $tsize_242_i; - HEAP32[(__gm_ + 456 | 0) >> 2] = 0; - var $884 = HEAP32[(_mparams | 0) >> 2]; - HEAP32[(__gm_ + 36 | 0) >> 2] = $884; - HEAP32[(__gm_ + 32 | 0) >> 2] = -1; - var $i_02_i_i = 0; - while (1) { - var $i_02_i_i; - var $886 = $i_02_i_i << 1; - var $887 = __gm_ + 40 + ($886 << 2) | 0; - var $888 = $887; - var $_sum_i_i = $886 + 3 | 0; - var $889 = __gm_ + 40 + ($_sum_i_i << 2) | 0; - HEAP32[$889 >> 2] = $888; - var $_sum1_i_i = $886 + 2 | 0; - var $890 = __gm_ + 40 + ($_sum1_i_i << 2) | 0; - HEAP32[$890 >> 2] = $888; - var $891 = $i_02_i_i + 1 | 0; - var $exitcond_i_i = ($891 | 0) == 32; - if ($exitcond_i_i) { - break; - } - var $i_02_i_i = $891; - } - var $892 = $tbase_243_i + 8 | 0; - var $893 = $892; - var $894 = $893 & 7; - var $895 = ($894 | 0) == 0; - if ($895) { - var $899 = 0; - } else { - var $897 = -$893 | 0; - var $898 = $897 & 7; - var $899 = $898; - } - var $899; - var $900 = $tbase_243_i + $899 | 0; - var $901 = $900; - var $902 = $tsize_242_i - 40 | 0; - var $903 = $902 - $899 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $901; - HEAP32[(__gm_ + 12 | 0) >> 2] = $903; - var $904 = $903 | 1; - var $_sum_i9_i = $899 + 4 | 0; - var $905 = $tbase_243_i + $_sum_i9_i | 0; - var $906 = $905; - HEAP32[$906 >> 2] = $904; - var $_sum2_i_i = $tsize_242_i - 36 | 0; - var $907 = $tbase_243_i + $_sum2_i_i | 0; - var $908 = $907; - HEAP32[$908 >> 2] = 40; - var $909 = HEAP32[(_mparams + 16 | 0) >> 2]; - HEAP32[(__gm_ + 28 | 0) >> 2] = $909; - } else { - var $sp_0_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i; - var $910 = ($sp_0_i | 0) == 0; - if ($910) { - break; - } - var $912 = $sp_0_i | 0; - var $913 = HEAPU32[$912 >> 2]; - var $914 = $sp_0_i + 4 | 0; - var $915 = HEAPU32[$914 >> 2]; - var $916 = $913 + $915 | 0; - var $917 = ($tbase_243_i | 0) == ($916 | 0); - if ($917) { - var $921 = $sp_0_i + 12 | 0; - var $922 = HEAP32[$921 >> 2]; - var $923 = $922 & 8; - var $924 = ($923 | 0) == 0; - if (!$924) { - break; - } - var $926 = $876; - var $927 = $926 >>> 0 >= $913 >>> 0; - var $928 = $926 >>> 0 < $tbase_243_i >>> 0; - var $or_cond44_i = $927 & $928; - if (!$or_cond44_i) { - break; - } - var $930 = $915 + $tsize_242_i | 0; - HEAP32[$914 >> 2] = $930; - var $931 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $932 = HEAP32[(__gm_ + 12 | 0) >> 2]; - var $933 = $932 + $tsize_242_i | 0; - var $934 = $931; - var $935 = $931 + 8 | 0; - var $936 = $935; - var $937 = $936 & 7; - var $938 = ($937 | 0) == 0; - if ($938) { - var $942 = 0; - } else { - var $940 = -$936 | 0; - var $941 = $940 & 7; - var $942 = $941; - } - var $942; - var $943 = $934 + $942 | 0; - var $944 = $943; - var $945 = $933 - $942 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $944; - HEAP32[(__gm_ + 12 | 0) >> 2] = $945; - var $946 = $945 | 1; - var $_sum_i13_i = $942 + 4 | 0; - var $947 = $934 + $_sum_i13_i | 0; - var $948 = $947; - HEAP32[$948 >> 2] = $946; - var $_sum2_i14_i = $933 + 4 | 0; - var $949 = $934 + $_sum2_i14_i | 0; - var $950 = $949; - HEAP32[$950 >> 2] = 40; - var $951 = HEAP32[(_mparams + 16 | 0) >> 2]; - HEAP32[(__gm_ + 28 | 0) >> 2] = $951; - break $_$275; - } - var $919 = $sp_0_i + 8 | 0; - var $920 = HEAP32[$919 >> 2]; - var $sp_0_i = $920; - } - var $952 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $953 = $tbase_243_i >>> 0 < $952 >>> 0; - if ($953) { - HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i; - } - var $955 = $tbase_243_i + $tsize_242_i | 0; - var $sp_1_i = __gm_ + 444 | 0; - while (1) { - var $sp_1_i; - var $957 = ($sp_1_i | 0) == 0; - if ($957) { - __label__ = 293; - break; - } - var $959 = $sp_1_i | 0; - var $960 = HEAP32[$959 >> 2]; - var $961 = ($960 | 0) == ($955 | 0); - if ($961) { - __label__ = 218; - break; - } - var $963 = $sp_1_i + 8 | 0; - var $964 = HEAP32[$963 >> 2]; - var $sp_1_i = $964; - } - do { - if (__label__ == 218) { - var $965 = $sp_1_i + 12 | 0; - var $966 = HEAP32[$965 >> 2]; - var $967 = $966 & 8; - var $968 = ($967 | 0) == 0; - if (!$968) { - break; - } - HEAP32[$959 >> 2] = $tbase_243_i; - var $970 = $sp_1_i + 4 | 0; - var $971 = HEAP32[$970 >> 2]; - var $972 = $971 + $tsize_242_i | 0; - HEAP32[$970 >> 2] = $972; - var $973 = $tbase_243_i + 8 | 0; - var $974 = $973; - var $975 = $974 & 7; - var $976 = ($975 | 0) == 0; - if ($976) { - var $981 = 0; - } else { - var $978 = -$974 | 0; - var $979 = $978 & 7; - var $981 = $979; - } - var $981; - var $982 = $tbase_243_i + $981 | 0; - var $_sum79_i = $tsize_242_i + 8 | 0; - var $983 = $tbase_243_i + $_sum79_i | 0; - var $984 = $983; - var $985 = $984 & 7; - var $986 = ($985 | 0) == 0; - if ($986) { - var $991 = 0; - } else { - var $988 = -$984 | 0; - var $989 = $988 & 7; - var $991 = $989; - } - var $991; - var $_sum80_i = $991 + $tsize_242_i | 0; - var $992 = $tbase_243_i + $_sum80_i | 0; - var $993 = $992; - var $994 = $992; - var $995 = $982; - var $996 = $994 - $995 | 0; - var $_sum_i16_i = $981 + $nb_0 | 0; - var $997 = $tbase_243_i + $_sum_i16_i | 0; - var $998 = $997; - var $999 = $996 - $nb_0 | 0; - var $1000 = $nb_0 | 3; - var $_sum1_i17_i = $981 + 4 | 0; - var $1001 = $tbase_243_i + $_sum1_i17_i | 0; - var $1002 = $1001; - HEAP32[$1002 >> 2] = $1000; - var $1003 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $1004 = ($993 | 0) == ($1003 | 0); - $_$314 : do { - if ($1004) { - var $1006 = HEAP32[(__gm_ + 12 | 0) >> 2]; - var $1007 = $1006 + $999 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1007; - HEAP32[(__gm_ + 24 | 0) >> 2] = $998; - var $1008 = $1007 | 1; - var $_sum42_i_i = $_sum_i16_i + 4 | 0; - var $1009 = $tbase_243_i + $_sum42_i_i | 0; - var $1010 = $1009; - HEAP32[$1010 >> 2] = $1008; - } else { - var $1012 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $1013 = ($993 | 0) == ($1012 | 0); - if ($1013) { - var $1015 = HEAP32[(__gm_ + 8 | 0) >> 2]; - var $1016 = $1015 + $999 | 0; - HEAP32[(__gm_ + 8 | 0) >> 2] = $1016; - HEAP32[(__gm_ + 20 | 0) >> 2] = $998; - var $1017 = $1016 | 1; - var $_sum40_i_i = $_sum_i16_i + 4 | 0; - var $1018 = $tbase_243_i + $_sum40_i_i | 0; - var $1019 = $1018; - HEAP32[$1019 >> 2] = $1017; - var $_sum41_i_i = $1016 + $_sum_i16_i | 0; - var $1020 = $tbase_243_i + $_sum41_i_i | 0; - var $1021 = $1020; - HEAP32[$1021 >> 2] = $1016; - } else { - var $_sum2_i18_i = $tsize_242_i + 4 | 0; - var $_sum81_i = $_sum2_i18_i + $991 | 0; - var $1023 = $tbase_243_i + $_sum81_i | 0; - var $1024 = $1023; - var $1025 = HEAPU32[$1024 >> 2]; - var $1026 = $1025 & 3; - var $1027 = ($1026 | 0) == 1; - if ($1027) { - var $1029 = $1025 & -8; - var $1030 = $1025 >>> 3; - var $1031 = $1025 >>> 0 < 256; - $_$322 : do { - if ($1031) { - var $_sum3738_i_i = $991 | 8; - var $_sum91_i = $_sum3738_i_i + $tsize_242_i | 0; - var $1033 = $tbase_243_i + $_sum91_i | 0; - var $1034 = $1033; - var $1035 = HEAPU32[$1034 >> 2]; - var $_sum39_i_i = $tsize_242_i + 12 | 0; - var $_sum92_i = $_sum39_i_i + $991 | 0; - var $1036 = $tbase_243_i + $_sum92_i | 0; - var $1037 = $1036; - var $1038 = HEAPU32[$1037 >> 2]; - var $1039 = ($1035 | 0) == ($1038 | 0); - if ($1039) { - var $1041 = 1 << $1030; - var $1042 = $1041 ^ -1; - var $1043 = HEAP32[(__gm_ | 0) >> 2]; - var $1044 = $1043 & $1042; - HEAP32[(__gm_ | 0) >> 2] = $1044; - } else { - var $1046 = $1025 >>> 2; - var $1047 = $1046 & 1073741822; - var $1048 = __gm_ + 40 + ($1047 << 2) | 0; - var $1049 = $1048; - var $1050 = ($1035 | 0) == ($1049 | 0); - do { - if ($1050) { - __label__ = 233; - } else { - var $1052 = $1035; - var $1053 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1054 = $1052 >>> 0 < $1053 >>> 0; - if ($1054) { - __label__ = 236; - break; - } - __label__ = 233; - break; - } - } while (0); - do { - if (__label__ == 233) { - var $1056 = ($1038 | 0) == ($1049 | 0); - if (!$1056) { - var $1058 = $1038; - var $1059 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1060 = $1058 >>> 0 < $1059 >>> 0; - if ($1060) { - break; - } - } - var $1061 = $1035 + 12 | 0; - HEAP32[$1061 >> 2] = $1038; - var $1062 = $1038 + 8 | 0; - HEAP32[$1062 >> 2] = $1035; - break $_$322; - } - } while (0); - _abort(); - } - } else { - var $1064 = $992; - var $_sum34_i_i = $991 | 24; - var $_sum82_i = $_sum34_i_i + $tsize_242_i | 0; - var $1065 = $tbase_243_i + $_sum82_i | 0; - var $1066 = $1065; - var $1067 = HEAPU32[$1066 >> 2]; - var $_sum5_i_i = $tsize_242_i + 12 | 0; - var $_sum83_i = $_sum5_i_i + $991 | 0; - var $1068 = $tbase_243_i + $_sum83_i | 0; - var $1069 = $1068; - var $1070 = HEAPU32[$1069 >> 2]; - var $1071 = ($1070 | 0) == ($1064 | 0); - do { - if ($1071) { - var $_sum67_i_i = $991 | 16; - var $_sum89_i = $_sum2_i18_i + $_sum67_i_i | 0; - var $1084 = $tbase_243_i + $_sum89_i | 0; - var $1085 = $1084; - var $1086 = HEAP32[$1085 >> 2]; - var $1087 = ($1086 | 0) == 0; - if ($1087) { - var $_sum90_i = $_sum67_i_i + $tsize_242_i | 0; - var $1089 = $tbase_243_i + $_sum90_i | 0; - var $1090 = $1089; - var $1091 = HEAP32[$1090 >> 2]; - var $1092 = ($1091 | 0) == 0; - if ($1092) { - var $R_1_i_i = 0; - break; - } - var $RP_0_i_i = $1090; - var $R_0_i_i = $1091; - } else { - var $RP_0_i_i = $1085; - var $R_0_i_i = $1086; - __label__ = 243; - } - while (1) { - var $R_0_i_i; - var $RP_0_i_i; - var $1093 = $R_0_i_i + 20 | 0; - var $1094 = HEAP32[$1093 >> 2]; - var $1095 = ($1094 | 0) == 0; - if (!$1095) { - var $RP_0_i_i = $1093; - var $R_0_i_i = $1094; - continue; - } - var $1097 = $R_0_i_i + 16 | 0; - var $1098 = HEAPU32[$1097 >> 2]; - var $1099 = ($1098 | 0) == 0; - if ($1099) { - break; - } - var $RP_0_i_i = $1097; - var $R_0_i_i = $1098; - } - var $1101 = $RP_0_i_i; - var $1102 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1103 = $1101 >>> 0 < $1102 >>> 0; - if ($1103) { - _abort(); - } else { - HEAP32[$RP_0_i_i >> 2] = 0; - var $R_1_i_i = $R_0_i_i; - } - } else { - var $_sum3536_i_i = $991 | 8; - var $_sum84_i = $_sum3536_i_i + $tsize_242_i | 0; - var $1073 = $tbase_243_i + $_sum84_i | 0; - var $1074 = $1073; - var $1075 = HEAPU32[$1074 >> 2]; - var $1076 = $1075; - var $1077 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1078 = $1076 >>> 0 < $1077 >>> 0; - if ($1078) { - _abort(); - } else { - var $1080 = $1075 + 12 | 0; - HEAP32[$1080 >> 2] = $1070; - var $1081 = $1070 + 8 | 0; - HEAP32[$1081 >> 2] = $1075; - var $R_1_i_i = $1070; - } - } - } while (0); - var $R_1_i_i; - var $1107 = ($1067 | 0) == 0; - if ($1107) { - break; - } - var $_sum30_i_i = $tsize_242_i + 28 | 0; - var $_sum85_i = $_sum30_i_i + $991 | 0; - var $1109 = $tbase_243_i + $_sum85_i | 0; - var $1110 = $1109; - var $1111 = HEAP32[$1110 >> 2]; - var $1112 = __gm_ + 304 + ($1111 << 2) | 0; - var $1113 = HEAP32[$1112 >> 2]; - var $1114 = ($1064 | 0) == ($1113 | 0); - do { - if ($1114) { - HEAP32[$1112 >> 2] = $R_1_i_i; - var $cond_i_i = ($R_1_i_i | 0) == 0; - if (!$cond_i_i) { - break; - } - var $1116 = HEAP32[$1110 >> 2]; - var $1117 = 1 << $1116; - var $1118 = $1117 ^ -1; - var $1119 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1120 = $1119 & $1118; - HEAP32[(__gm_ + 4 | 0) >> 2] = $1120; - break $_$322; - } - var $1122 = $1067; - var $1123 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1124 = $1122 >>> 0 < $1123 >>> 0; - if ($1124) { - _abort(); - } else { - var $1126 = $1067 + 16 | 0; - var $1127 = HEAP32[$1126 >> 2]; - var $1128 = ($1127 | 0) == ($1064 | 0); - if ($1128) { - HEAP32[$1126 >> 2] = $R_1_i_i; - } else { - var $1131 = $1067 + 20 | 0; - HEAP32[$1131 >> 2] = $R_1_i_i; - } - var $1134 = ($R_1_i_i | 0) == 0; - if ($1134) { - break $_$322; - } - } - } while (0); - var $1136 = $R_1_i_i; - var $1137 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1138 = $1136 >>> 0 < $1137 >>> 0; - if ($1138) { - _abort(); - } else { - var $1140 = $R_1_i_i + 24 | 0; - HEAP32[$1140 >> 2] = $1067; - var $_sum3132_i_i = $991 | 16; - var $_sum86_i = $_sum3132_i_i + $tsize_242_i | 0; - var $1141 = $tbase_243_i + $_sum86_i | 0; - var $1142 = $1141; - var $1143 = HEAPU32[$1142 >> 2]; - var $1144 = ($1143 | 0) == 0; - if (!$1144) { - var $1146 = $1143; - var $1147 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1148 = $1146 >>> 0 < $1147 >>> 0; - if ($1148) { - _abort(); - } else { - var $1150 = $R_1_i_i + 16 | 0; - HEAP32[$1150 >> 2] = $1143; - var $1151 = $1143 + 24 | 0; - HEAP32[$1151 >> 2] = $R_1_i_i; - } - } - var $_sum87_i = $_sum2_i18_i + $_sum3132_i_i | 0; - var $1154 = $tbase_243_i + $_sum87_i | 0; - var $1155 = $1154; - var $1156 = HEAPU32[$1155 >> 2]; - var $1157 = ($1156 | 0) == 0; - if ($1157) { - break; - } - var $1159 = $1156; - var $1160 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1161 = $1159 >>> 0 < $1160 >>> 0; - if ($1161) { - _abort(); - } else { - var $1163 = $R_1_i_i + 20 | 0; - HEAP32[$1163 >> 2] = $1156; - var $1164 = $1156 + 24 | 0; - HEAP32[$1164 >> 2] = $R_1_i_i; - } - } - } - } while (0); - var $_sum9_i_i = $1029 | $991; - var $_sum88_i = $_sum9_i_i + $tsize_242_i | 0; - var $1168 = $tbase_243_i + $_sum88_i | 0; - var $1169 = $1168; - var $1170 = $1029 + $999 | 0; - var $oldfirst_0_i_i = $1169; - var $qsize_0_i_i = $1170; - } else { - var $oldfirst_0_i_i = $993; - var $qsize_0_i_i = $999; - } - var $qsize_0_i_i; - var $oldfirst_0_i_i; - var $1172 = $oldfirst_0_i_i + 4 | 0; - var $1173 = HEAP32[$1172 >> 2]; - var $1174 = $1173 & -2; - HEAP32[$1172 >> 2] = $1174; - var $1175 = $qsize_0_i_i | 1; - var $_sum10_i_i = $_sum_i16_i + 4 | 0; - var $1176 = $tbase_243_i + $_sum10_i_i | 0; - var $1177 = $1176; - HEAP32[$1177 >> 2] = $1175; - var $_sum11_i19_i = $qsize_0_i_i + $_sum_i16_i | 0; - var $1178 = $tbase_243_i + $_sum11_i19_i | 0; - var $1179 = $1178; - HEAP32[$1179 >> 2] = $qsize_0_i_i; - var $1180 = $qsize_0_i_i >>> 0 < 256; - if ($1180) { - var $1182 = $qsize_0_i_i >>> 3; - var $1183 = $qsize_0_i_i >>> 2; - var $1184 = $1183 & 1073741822; - var $1185 = __gm_ + 40 + ($1184 << 2) | 0; - var $1186 = $1185; - var $1187 = HEAPU32[(__gm_ | 0) >> 2]; - var $1188 = 1 << $1182; - var $1189 = $1187 & $1188; - var $1190 = ($1189 | 0) == 0; - do { - if ($1190) { - var $1192 = $1187 | $1188; - HEAP32[(__gm_ | 0) >> 2] = $1192; - var $_sum26_pre_i_i = $1184 + 2 | 0; - var $_pre_i_i = __gm_ + 40 + ($_sum26_pre_i_i << 2) | 0; - var $F4_0_i_i = $1186; - var $_pre_phi_i20_i = $_pre_i_i; - } else { - var $_sum29_i_i = $1184 + 2 | 0; - var $1194 = __gm_ + 40 + ($_sum29_i_i << 2) | 0; - var $1195 = HEAPU32[$1194 >> 2]; - var $1196 = $1195; - var $1197 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1198 = $1196 >>> 0 < $1197 >>> 0; - if (!$1198) { - var $F4_0_i_i = $1195; - var $_pre_phi_i20_i = $1194; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i20_i; - var $F4_0_i_i; - HEAP32[$_pre_phi_i20_i >> 2] = $998; - var $1201 = $F4_0_i_i + 12 | 0; - HEAP32[$1201 >> 2] = $998; - var $_sum27_i_i = $_sum_i16_i + 8 | 0; - var $1202 = $tbase_243_i + $_sum27_i_i | 0; - var $1203 = $1202; - HEAP32[$1203 >> 2] = $F4_0_i_i; - var $_sum28_i_i = $_sum_i16_i + 12 | 0; - var $1204 = $tbase_243_i + $_sum28_i_i | 0; - var $1205 = $1204; - HEAP32[$1205 >> 2] = $1186; - } else { - var $1207 = $997; - var $1208 = $qsize_0_i_i >>> 8; - var $1209 = ($1208 | 0) == 0; - do { - if ($1209) { - var $I7_0_i_i = 0; - } else { - var $1211 = $qsize_0_i_i >>> 0 > 16777215; - if ($1211) { - var $I7_0_i_i = 31; - break; - } - var $1213 = $1208 + 1048320 | 0; - var $1214 = $1213 >>> 16; - var $1215 = $1214 & 8; - var $1216 = $1208 << $1215; - var $1217 = $1216 + 520192 | 0; - var $1218 = $1217 >>> 16; - var $1219 = $1218 & 4; - var $1220 = $1216 << $1219; - var $1221 = $1220 + 245760 | 0; - var $1222 = $1221 >>> 16; - var $1223 = $1222 & 2; - var $1224 = $1219 | $1215; - var $1225 = $1224 | $1223; - var $1226 = 14 - $1225 | 0; - var $1227 = $1220 << $1223; - var $1228 = $1227 >>> 15; - var $1229 = $1226 + $1228 | 0; - var $1230 = $1229 << 1; - var $1231 = $1229 + 7 | 0; - var $1232 = $qsize_0_i_i >>> ($1231 >>> 0); - var $1233 = $1232 & 1; - var $1234 = $1233 | $1230; - var $I7_0_i_i = $1234; - } - } while (0); - var $I7_0_i_i; - var $1236 = __gm_ + 304 + ($I7_0_i_i << 2) | 0; - var $_sum12_i_i = $_sum_i16_i + 28 | 0; - var $1237 = $tbase_243_i + $_sum12_i_i | 0; - var $1238 = $1237; - HEAP32[$1238 >> 2] = $I7_0_i_i; - var $_sum13_i_i = $_sum_i16_i + 16 | 0; - var $1239 = $tbase_243_i + $_sum13_i_i | 0; - var $_sum14_i_i = $_sum_i16_i + 20 | 0; - var $1240 = $tbase_243_i + $_sum14_i_i | 0; - var $1241 = $1240; - HEAP32[$1241 >> 2] = 0; - var $1242 = $1239; - HEAP32[$1242 >> 2] = 0; - var $1243 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1244 = 1 << $I7_0_i_i; - var $1245 = $1243 & $1244; - var $1246 = ($1245 | 0) == 0; - if ($1246) { - var $1248 = $1243 | $1244; - HEAP32[(__gm_ + 4 | 0) >> 2] = $1248; - HEAP32[$1236 >> 2] = $1207; - var $1249 = $1236; - var $_sum15_i_i = $_sum_i16_i + 24 | 0; - var $1250 = $tbase_243_i + $_sum15_i_i | 0; - var $1251 = $1250; - HEAP32[$1251 >> 2] = $1249; - var $_sum16_i_i = $_sum_i16_i + 12 | 0; - var $1252 = $tbase_243_i + $_sum16_i_i | 0; - var $1253 = $1252; - HEAP32[$1253 >> 2] = $1207; - var $_sum17_i_i = $_sum_i16_i + 8 | 0; - var $1254 = $tbase_243_i + $_sum17_i_i | 0; - var $1255 = $1254; - HEAP32[$1255 >> 2] = $1207; - } else { - var $1257 = HEAP32[$1236 >> 2]; - var $1258 = ($I7_0_i_i | 0) == 31; - if ($1258) { - var $1263 = 0; - } else { - var $1260 = $I7_0_i_i >>> 1; - var $1261 = 25 - $1260 | 0; - var $1263 = $1261; - } - var $1263; - var $1264 = $qsize_0_i_i << $1263; - var $K8_0_i_i = $1264; - var $T_0_i21_i = $1257; - while (1) { - var $T_0_i21_i; - var $K8_0_i_i; - var $1266 = $T_0_i21_i + 4 | 0; - var $1267 = HEAP32[$1266 >> 2]; - var $1268 = $1267 & -8; - var $1269 = ($1268 | 0) == ($qsize_0_i_i | 0); - if ($1269) { - var $1289 = $T_0_i21_i + 8 | 0; - var $1290 = HEAPU32[$1289 >> 2]; - var $1291 = $T_0_i21_i; - var $1292 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1293 = $1291 >>> 0 < $1292 >>> 0; - do { - if (!$1293) { - var $1295 = $1290; - var $1296 = $1295 >>> 0 < $1292 >>> 0; - if ($1296) { - break; - } - var $1298 = $1290 + 12 | 0; - HEAP32[$1298 >> 2] = $1207; - HEAP32[$1289 >> 2] = $1207; - var $_sum20_i_i = $_sum_i16_i + 8 | 0; - var $1299 = $tbase_243_i + $_sum20_i_i | 0; - var $1300 = $1299; - HEAP32[$1300 >> 2] = $1290; - var $_sum21_i_i = $_sum_i16_i + 12 | 0; - var $1301 = $tbase_243_i + $_sum21_i_i | 0; - var $1302 = $1301; - HEAP32[$1302 >> 2] = $T_0_i21_i; - var $_sum22_i_i = $_sum_i16_i + 24 | 0; - var $1303 = $tbase_243_i + $_sum22_i_i | 0; - var $1304 = $1303; - HEAP32[$1304 >> 2] = 0; - break $_$314; - } - } while (0); - _abort(); - } else { - var $1271 = $K8_0_i_i >>> 31; - var $1272 = $T_0_i21_i + 16 + ($1271 << 2) | 0; - var $1273 = HEAPU32[$1272 >> 2]; - var $1274 = ($1273 | 0) == 0; - var $1275 = $K8_0_i_i << 1; - if (!$1274) { - var $K8_0_i_i = $1275; - var $T_0_i21_i = $1273; - continue; - } - var $1277 = $1272; - var $1278 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1279 = $1277 >>> 0 < $1278 >>> 0; - if (!$1279) { - HEAP32[$1272 >> 2] = $1207; - var $_sum23_i_i = $_sum_i16_i + 24 | 0; - var $1281 = $tbase_243_i + $_sum23_i_i | 0; - var $1282 = $1281; - HEAP32[$1282 >> 2] = $T_0_i21_i; - var $_sum24_i_i = $_sum_i16_i + 12 | 0; - var $1283 = $tbase_243_i + $_sum24_i_i | 0; - var $1284 = $1283; - HEAP32[$1284 >> 2] = $1207; - var $_sum25_i_i = $_sum_i16_i + 8 | 0; - var $1285 = $tbase_243_i + $_sum25_i_i | 0; - var $1286 = $1285; - HEAP32[$1286 >> 2] = $1207; - break $_$314; - } - _abort(); - } - } - } - } - } - } - } while (0); - var $_sum1819_i_i = $981 | 8; - var $1305 = $tbase_243_i + $_sum1819_i_i | 0; - var $mem_0 = $1305; - break $_$215; - } - } while (0); - var $1306 = $876; - var $sp_0_i_i_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i_i_i; - var $1308 = $sp_0_i_i_i | 0; - var $1309 = HEAPU32[$1308 >> 2]; - var $1310 = $1309 >>> 0 > $1306 >>> 0; - if (!$1310) { - var $1312 = $sp_0_i_i_i + 4 | 0; - var $1313 = HEAPU32[$1312 >> 2]; - var $1314 = $1309 + $1313 | 0; - var $1315 = $1314 >>> 0 > $1306 >>> 0; - if ($1315) { - var $1321 = $1309; - var $1320 = $1313; - break; - } - } - var $1317 = $sp_0_i_i_i + 8 | 0; - var $1318 = HEAPU32[$1317 >> 2]; - var $1319 = ($1318 | 0) == 0; - if (!$1319) { - var $sp_0_i_i_i = $1318; - continue; - } - var $_pre14_i_i = 4; - var $1321 = 0; - var $1320 = $_pre14_i_i; - break; - } - var $1320; - var $1321; - var $1322 = $1321 + $1320 | 0; - var $_sum1_i10_i = $1320 - 39 | 0; - var $1323 = $1321 + $_sum1_i10_i | 0; - var $1324 = $1323; - var $1325 = $1324 & 7; - var $1326 = ($1325 | 0) == 0; - if ($1326) { - var $1331 = 0; - } else { - var $1328 = -$1324 | 0; - var $1329 = $1328 & 7; - var $1331 = $1329; - } - var $1331; - var $_sum_i11_i = $1320 - 47 | 0; - var $_sum2_i12_i = $_sum_i11_i + $1331 | 0; - var $1332 = $1321 + $_sum2_i12_i | 0; - var $1333 = $876 + 16 | 0; - var $1334 = $1333; - var $1335 = $1332 >>> 0 < $1334 >>> 0; - var $1336 = $1335 ? $1306 : $1332; - var $1337 = $1336 + 8 | 0; - var $1338 = $1337; - var $1339 = $tbase_243_i + 8 | 0; - var $1340 = $1339; - var $1341 = $1340 & 7; - var $1342 = ($1341 | 0) == 0; - if ($1342) { - var $1346 = 0; - } else { - var $1344 = -$1340 | 0; - var $1345 = $1344 & 7; - var $1346 = $1345; - } - var $1346; - var $1347 = $tbase_243_i + $1346 | 0; - var $1348 = $1347; - var $1349 = $tsize_242_i - 40 | 0; - var $1350 = $1349 - $1346 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $1348; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1350; - var $1351 = $1350 | 1; - var $_sum_i_i_i = $1346 + 4 | 0; - var $1352 = $tbase_243_i + $_sum_i_i_i | 0; - var $1353 = $1352; - HEAP32[$1353 >> 2] = $1351; - var $_sum2_i_i_i = $tsize_242_i - 36 | 0; - var $1354 = $tbase_243_i + $_sum2_i_i_i | 0; - var $1355 = $1354; - HEAP32[$1355 >> 2] = 40; - var $1356 = HEAP32[(_mparams + 16 | 0) >> 2]; - HEAP32[(__gm_ + 28 | 0) >> 2] = $1356; - var $1357 = $1336 + 4 | 0; - var $1358 = $1357; - HEAP32[$1358 >> 2] = 27; - HEAP32[$1337 >> 2] = HEAP32[(__gm_ + 444 | 0) >> 2]; - HEAP32[$1337 + 4 >> 2] = HEAP32[(__gm_ + 444 | 0) + 4 >> 2]; - HEAP32[$1337 + 8 >> 2] = HEAP32[(__gm_ + 444 | 0) + 8 >> 2]; - HEAP32[$1337 + 12 >> 2] = HEAP32[(__gm_ + 444 | 0) + 12 >> 2]; - HEAP32[(__gm_ + 444 | 0) >> 2] = $tbase_243_i; - HEAP32[(__gm_ + 448 | 0) >> 2] = $tsize_242_i; - HEAP32[(__gm_ + 456 | 0) >> 2] = 0; - HEAP32[(__gm_ + 452 | 0) >> 2] = $1338; - var $1359 = $1336 + 28 | 0; - var $1360 = $1359; - HEAP32[$1360 >> 2] = 7; - var $1361 = $1336 + 32 | 0; - var $1362 = $1361 >>> 0 < $1322 >>> 0; - $_$426 : do { - if ($1362) { - var $1363 = $1360; - while (1) { - var $1363; - var $1364 = $1363 + 4 | 0; - HEAP32[$1364 >> 2] = 7; - var $1365 = $1363 + 8 | 0; - var $1366 = $1365; - var $1367 = $1366 >>> 0 < $1322 >>> 0; - if (!$1367) { - break $_$426; - } - var $1363 = $1364; - } - } - } while (0); - var $1368 = ($1336 | 0) == ($1306 | 0); - if ($1368) { - break; - } - var $1370 = $1336; - var $1371 = $876; - var $1372 = $1370 - $1371 | 0; - var $1373 = $1306 + $1372 | 0; - var $_sum3_i_i = $1372 + 4 | 0; - var $1374 = $1306 + $_sum3_i_i | 0; - var $1375 = $1374; - var $1376 = HEAP32[$1375 >> 2]; - var $1377 = $1376 & -2; - HEAP32[$1375 >> 2] = $1377; - var $1378 = $1372 | 1; - var $1379 = $876 + 4 | 0; - HEAP32[$1379 >> 2] = $1378; - var $1380 = $1373; - HEAP32[$1380 >> 2] = $1372; - var $1381 = $1372 >>> 0 < 256; - if ($1381) { - var $1383 = $1372 >>> 3; - var $1384 = $1372 >>> 2; - var $1385 = $1384 & 1073741822; - var $1386 = __gm_ + 40 + ($1385 << 2) | 0; - var $1387 = $1386; - var $1388 = HEAPU32[(__gm_ | 0) >> 2]; - var $1389 = 1 << $1383; - var $1390 = $1388 & $1389; - var $1391 = ($1390 | 0) == 0; - do { - if ($1391) { - var $1393 = $1388 | $1389; - HEAP32[(__gm_ | 0) >> 2] = $1393; - var $_sum10_pre_i_i = $1385 + 2 | 0; - var $_pre15_i_i = __gm_ + 40 + ($_sum10_pre_i_i << 2) | 0; - var $F_0_i_i = $1387; - var $_pre_phi_i_i = $_pre15_i_i; - } else { - var $_sum11_i_i = $1385 + 2 | 0; - var $1395 = __gm_ + 40 + ($_sum11_i_i << 2) | 0; - var $1396 = HEAPU32[$1395 >> 2]; - var $1397 = $1396; - var $1398 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1399 = $1397 >>> 0 < $1398 >>> 0; - if (!$1399) { - var $F_0_i_i = $1396; - var $_pre_phi_i_i = $1395; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i_i; - var $F_0_i_i; - HEAP32[$_pre_phi_i_i >> 2] = $876; - var $1402 = $F_0_i_i + 12 | 0; - HEAP32[$1402 >> 2] = $876; - var $1403 = $876 + 8 | 0; - HEAP32[$1403 >> 2] = $F_0_i_i; - var $1404 = $876 + 12 | 0; - HEAP32[$1404 >> 2] = $1387; - } else { - var $1406 = $876; - var $1407 = $1372 >>> 8; - var $1408 = ($1407 | 0) == 0; - do { - if ($1408) { - var $I1_0_i_i = 0; - } else { - var $1410 = $1372 >>> 0 > 16777215; - if ($1410) { - var $I1_0_i_i = 31; - break; - } - var $1412 = $1407 + 1048320 | 0; - var $1413 = $1412 >>> 16; - var $1414 = $1413 & 8; - var $1415 = $1407 << $1414; - var $1416 = $1415 + 520192 | 0; - var $1417 = $1416 >>> 16; - var $1418 = $1417 & 4; - var $1419 = $1415 << $1418; - var $1420 = $1419 + 245760 | 0; - var $1421 = $1420 >>> 16; - var $1422 = $1421 & 2; - var $1423 = $1418 | $1414; - var $1424 = $1423 | $1422; - var $1425 = 14 - $1424 | 0; - var $1426 = $1419 << $1422; - var $1427 = $1426 >>> 15; - var $1428 = $1425 + $1427 | 0; - var $1429 = $1428 << 1; - var $1430 = $1428 + 7 | 0; - var $1431 = $1372 >>> ($1430 >>> 0); - var $1432 = $1431 & 1; - var $1433 = $1432 | $1429; - var $I1_0_i_i = $1433; - } - } while (0); - var $I1_0_i_i; - var $1435 = __gm_ + 304 + ($I1_0_i_i << 2) | 0; - var $1436 = $876 + 28 | 0; - var $I1_0_c_i_i = $I1_0_i_i; - HEAP32[$1436 >> 2] = $I1_0_c_i_i; - var $1437 = $876 + 20 | 0; - HEAP32[$1437 >> 2] = 0; - var $1438 = $876 + 16 | 0; - HEAP32[$1438 >> 2] = 0; - var $1439 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1440 = 1 << $I1_0_i_i; - var $1441 = $1439 & $1440; - var $1442 = ($1441 | 0) == 0; - if ($1442) { - var $1444 = $1439 | $1440; - HEAP32[(__gm_ + 4 | 0) >> 2] = $1444; - HEAP32[$1435 >> 2] = $1406; - var $1445 = $876 + 24 | 0; - var $_c_i_i = $1435; - HEAP32[$1445 >> 2] = $_c_i_i; - var $1446 = $876 + 12 | 0; - HEAP32[$1446 >> 2] = $876; - var $1447 = $876 + 8 | 0; - HEAP32[$1447 >> 2] = $876; - } else { - var $1449 = HEAP32[$1435 >> 2]; - var $1450 = ($I1_0_i_i | 0) == 31; - if ($1450) { - var $1455 = 0; - } else { - var $1452 = $I1_0_i_i >>> 1; - var $1453 = 25 - $1452 | 0; - var $1455 = $1453; - } - var $1455; - var $1456 = $1372 << $1455; - var $K2_0_i_i = $1456; - var $T_0_i_i = $1449; - while (1) { - var $T_0_i_i; - var $K2_0_i_i; - var $1458 = $T_0_i_i + 4 | 0; - var $1459 = HEAP32[$1458 >> 2]; - var $1460 = $1459 & -8; - var $1461 = ($1460 | 0) == ($1372 | 0); - if ($1461) { - var $1478 = $T_0_i_i + 8 | 0; - var $1479 = HEAPU32[$1478 >> 2]; - var $1480 = $T_0_i_i; - var $1481 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1482 = $1480 >>> 0 < $1481 >>> 0; - do { - if (!$1482) { - var $1484 = $1479; - var $1485 = $1484 >>> 0 < $1481 >>> 0; - if ($1485) { - break; - } - var $1487 = $1479 + 12 | 0; - HEAP32[$1487 >> 2] = $1406; - HEAP32[$1478 >> 2] = $1406; - var $1488 = $876 + 8 | 0; - var $_c6_i_i = $1479; - HEAP32[$1488 >> 2] = $_c6_i_i; - var $1489 = $876 + 12 | 0; - var $T_0_c_i_i = $T_0_i_i; - HEAP32[$1489 >> 2] = $T_0_c_i_i; - var $1490 = $876 + 24 | 0; - HEAP32[$1490 >> 2] = 0; - break $_$275; - } - } while (0); - _abort(); - } else { - var $1463 = $K2_0_i_i >>> 31; - var $1464 = $T_0_i_i + 16 + ($1463 << 2) | 0; - var $1465 = HEAPU32[$1464 >> 2]; - var $1466 = ($1465 | 0) == 0; - var $1467 = $K2_0_i_i << 1; - if (!$1466) { - var $K2_0_i_i = $1467; - var $T_0_i_i = $1465; - continue; - } - var $1469 = $1464; - var $1470 = HEAPU32[(__gm_ + 16 | 0) >> 2]; - var $1471 = $1469 >>> 0 < $1470 >>> 0; - if (!$1471) { - HEAP32[$1464 >> 2] = $1406; - var $1473 = $876 + 24 | 0; - var $T_0_c7_i_i = $T_0_i_i; - HEAP32[$1473 >> 2] = $T_0_c7_i_i; - var $1474 = $876 + 12 | 0; - HEAP32[$1474 >> 2] = $876; - var $1475 = $876 + 8 | 0; - HEAP32[$1475 >> 2] = $876; - break $_$275; - } - _abort(); - } - } - } - } - } - } while (0); - var $1491 = HEAPU32[(__gm_ + 12 | 0) >> 2]; - var $1492 = $1491 >>> 0 > $nb_0 >>> 0; - if (!$1492) { - break; - } - var $1494 = $1491 - $nb_0 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1494; - var $1495 = HEAPU32[(__gm_ + 24 | 0) >> 2]; - var $1496 = $1495; - var $1497 = $1496 + $nb_0 | 0; - var $1498 = $1497; - HEAP32[(__gm_ + 24 | 0) >> 2] = $1498; - var $1499 = $1494 | 1; - var $_sum_i30 = $nb_0 + 4 | 0; - var $1500 = $1496 + $_sum_i30 | 0; - var $1501 = $1500; - HEAP32[$1501 >> 2] = $1499; - var $1502 = $nb_0 | 3; - var $1503 = $1495 + 4 | 0; - HEAP32[$1503 >> 2] = $1502; - var $1504 = $1495 + 8 | 0; - var $1505 = $1504; - var $mem_0 = $1505; - break $_$215; - } - } while (0); - var $1506 = ___errno(); - HEAP32[$1506 >> 2] = 12; - var $mem_0 = 0; - } - } else { - var $706 = $703 - $nb_0 | 0; - var $707 = HEAPU32[(__gm_ + 20 | 0) >> 2]; - var $708 = $706 >>> 0 > 15; - if ($708) { - var $710 = $707; - var $711 = $710 + $nb_0 | 0; - var $712 = $711; - HEAP32[(__gm_ + 20 | 0) >> 2] = $712; - HEAP32[(__gm_ + 8 | 0) >> 2] = $706; - var $713 = $706 | 1; - var $_sum2 = $nb_0 + 4 | 0; - var $714 = $710 + $_sum2 | 0; - var $715 = $714; - HEAP32[$715 >> 2] = $713; - var $716 = $710 + $703 | 0; - var $717 = $716; - HEAP32[$717 >> 2] = $706; - var $718 = $nb_0 | 3; - var $719 = $707 + 4 | 0; - HEAP32[$719 >> 2] = $718; - } else { - HEAP32[(__gm_ + 8 | 0) >> 2] = 0; - HEAP32[(__gm_ + 20 | 0) >> 2] = 0; - var $721 = $703 | 3; - var $722 = $707 + 4 | 0; - HEAP32[$722 >> 2] = $721; - var $723 = $707; - var $_sum1 = $703 + 4 | 0; - var $724 = $723 + $_sum1 | 0; - var $725 = $724; - var $726 = HEAP32[$725 >> 2]; - var $727 = $726 | 1; - HEAP32[$725 >> 2] = $727; - } - var $729 = $707 + 8 | 0; - var $730 = $729; - var $mem_0 = $730; - } - } - } while (0); - var $mem_0; - return $mem_0; - return null; -} -function _mallocNoU($bytes) { - var __label__; - var $1 = $bytes >>> 0 < 245; - $_$2 : do { - if ($1) { - var $3 = $bytes >>> 0 < 11; - if ($3) { - var $8 = 16; - } else { - var $5 = $bytes + 11 | 0; - var $6 = $5 & -8; - var $8 = $6; - } - var $8; - var $9 = $8 >>> 3; - var $10 = HEAP32[(__gm_ | 0) >> 2]; - var $11 = $10 >>> ($9 >>> 0); - var $12 = $11 & 3; - var $13 = ($12 | 0) == 0; - if (!$13) { - var $15 = $11 & 1; - var $16 = $15 ^ 1; - var $17 = $16 + $9 | 0; - var $18 = $17 << 1; - var $19 = __gm_ + 40 + ($18 << 2) | 0; - var $20 = $19; - var $_sum10 = $18 + 2 | 0; - var $21 = __gm_ + 40 + ($_sum10 << 2) | 0; - var $22 = HEAP32[$21 >> 2]; - var $23 = $22 + 8 | 0; - var $24 = HEAP32[$23 >> 2]; - var $25 = ($20 | 0) == ($24 | 0); - if ($25) { - var $27 = 1 << $17; - var $28 = $27 ^ -1; - var $29 = $10 & $28; - HEAP32[(__gm_ | 0) >> 2] = $29; - } else { - var $31 = $24; - var $32 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $33 = $31 >>> 0 < $32 >>> 0; - if ($33) { - _abort(); - } else { - HEAP32[$21 >> 2] = $24; - var $35 = $24 + 12 | 0; - HEAP32[$35 >> 2] = $20; - } - } - var $38 = $17 << 3; - var $39 = $38 | 3; - var $40 = $22 + 4 | 0; - HEAP32[$40 >> 2] = $39; - var $41 = $22; - var $_sum1112 = $38 | 4; - var $42 = $41 + $_sum1112 | 0; - var $43 = $42; - var $44 = HEAP32[$43 >> 2]; - var $45 = $44 | 1; - HEAP32[$43 >> 2] = $45; - var $46 = $23; - var $mem_0 = $46; - __label__ = 331; - break; - } - var $48 = HEAP32[(__gm_ + 8 | 0) >> 2]; - var $49 = $8 >>> 0 > $48 >>> 0; - if (!$49) { - var $nb_0 = $8; - __label__ = 155; - break; - } - var $51 = ($11 | 0) == 0; - if (!$51) { - var $53 = $11 << $9; - var $54 = 2 << $9; - var $55 = -$54 | 0; - var $56 = $54 | $55; - var $57 = $53 & $56; - var $58 = -$57 | 0; - var $59 = $57 & $58; - var $60 = $59 - 1 | 0; - var $61 = $60 >>> 12; - var $62 = $61 & 16; - var $63 = $60 >>> ($62 >>> 0); - var $64 = $63 >>> 5; - var $65 = $64 & 8; - var $66 = $63 >>> ($65 >>> 0); - var $67 = $66 >>> 2; - var $68 = $67 & 4; - var $69 = $66 >>> ($68 >>> 0); - var $70 = $69 >>> 1; - var $71 = $70 & 2; - var $72 = $69 >>> ($71 >>> 0); - var $73 = $72 >>> 1; - var $74 = $73 & 1; - var $75 = $65 | $62; - var $76 = $75 | $68; - var $77 = $76 | $71; - var $78 = $77 | $74; - var $79 = $72 >>> ($74 >>> 0); - var $80 = $78 + $79 | 0; - var $81 = $80 << 1; - var $82 = __gm_ + 40 + ($81 << 2) | 0; - var $83 = $82; - var $_sum4 = $81 + 2 | 0; - var $84 = __gm_ + 40 + ($_sum4 << 2) | 0; - var $85 = HEAP32[$84 >> 2]; - var $86 = $85 + 8 | 0; - var $87 = HEAP32[$86 >> 2]; - var $88 = ($83 | 0) == ($87 | 0); - if ($88) { - var $90 = 1 << $80; - var $91 = $90 ^ -1; - var $92 = $10 & $91; - HEAP32[(__gm_ | 0) >> 2] = $92; - } else { - var $94 = $87; - var $95 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $96 = $94 >>> 0 < $95 >>> 0; - if ($96) { - _abort(); - } else { - HEAP32[$84 >> 2] = $87; - var $98 = $87 + 12 | 0; - HEAP32[$98 >> 2] = $83; - } - } - var $101 = $80 << 3; - var $102 = $101 - $8 | 0; - var $103 = $8 | 3; - var $104 = $85 + 4 | 0; - HEAP32[$104 >> 2] = $103; - var $105 = $85; - var $106 = $105 + $8 | 0; - var $107 = $106; - var $108 = $102 | 1; - var $_sum56 = $8 | 4; - var $109 = $105 + $_sum56 | 0; - var $110 = $109; - HEAP32[$110 >> 2] = $108; - var $111 = $105 + $101 | 0; - var $112 = $111; - HEAP32[$112 >> 2] = $102; - var $113 = HEAP32[(__gm_ + 8 | 0) >> 2]; - var $114 = ($113 | 0) == 0; - if (!$114) { - var $116 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $117 = $113 >>> 3; - var $118 = $113 >>> 2; - var $119 = $118 & 1073741822; - var $120 = __gm_ + 40 + ($119 << 2) | 0; - var $121 = $120; - var $122 = HEAP32[(__gm_ | 0) >> 2]; - var $123 = 1 << $117; - var $124 = $122 & $123; - var $125 = ($124 | 0) == 0; - do { - if ($125) { - var $127 = $122 | $123; - HEAP32[(__gm_ | 0) >> 2] = $127; - var $_sum8_pre = $119 + 2 | 0; - var $_pre = __gm_ + 40 + ($_sum8_pre << 2) | 0; - var $F4_0 = $121; - var $_pre_phi = $_pre; - } else { - var $_sum9 = $119 + 2 | 0; - var $129 = __gm_ + 40 + ($_sum9 << 2) | 0; - var $130 = HEAP32[$129 >> 2]; - var $131 = $130; - var $132 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $133 = $131 >>> 0 < $132 >>> 0; - if (!$133) { - var $F4_0 = $130; - var $_pre_phi = $129; - break; - } - _abort(); - } - } while (0); - var $_pre_phi; - var $F4_0; - HEAP32[$_pre_phi >> 2] = $116; - var $136 = $F4_0 + 12 | 0; - HEAP32[$136 >> 2] = $116; - var $137 = $116 + 8 | 0; - HEAP32[$137 >> 2] = $F4_0; - var $138 = $116 + 12 | 0; - HEAP32[$138 >> 2] = $121; - } - HEAP32[(__gm_ + 8 | 0) >> 2] = $102; - HEAP32[(__gm_ + 20 | 0) >> 2] = $107; - var $140 = $86; - var $mem_0 = $140; - __label__ = 331; - break; - } - var $142 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $143 = ($142 | 0) == 0; - if ($143) { - var $nb_0 = $8; - __label__ = 155; - break; - } - var $145 = -$142 | 0; - var $146 = $142 & $145; - var $147 = $146 - 1 | 0; - var $148 = $147 >>> 12; - var $149 = $148 & 16; - var $150 = $147 >>> ($149 >>> 0); - var $151 = $150 >>> 5; - var $152 = $151 & 8; - var $153 = $150 >>> ($152 >>> 0); - var $154 = $153 >>> 2; - var $155 = $154 & 4; - var $156 = $153 >>> ($155 >>> 0); - var $157 = $156 >>> 1; - var $158 = $157 & 2; - var $159 = $156 >>> ($158 >>> 0); - var $160 = $159 >>> 1; - var $161 = $160 & 1; - var $162 = $152 | $149; - var $163 = $162 | $155; - var $164 = $163 | $158; - var $165 = $164 | $161; - var $166 = $159 >>> ($161 >>> 0); - var $167 = $165 + $166 | 0; - var $168 = __gm_ + 304 + ($167 << 2) | 0; - var $169 = HEAP32[$168 >> 2]; - var $170 = $169 + 4 | 0; - var $171 = HEAP32[$170 >> 2]; - var $172 = $171 & -8; - var $173 = $172 - $8 | 0; - var $t_0_i = $169; - var $v_0_i = $169; - var $rsize_0_i = $173; - while (1) { - var $rsize_0_i; - var $v_0_i; - var $t_0_i; - var $175 = $t_0_i + 16 | 0; - var $176 = HEAP32[$175 >> 2]; - var $177 = ($176 | 0) == 0; - if ($177) { - var $179 = $t_0_i + 20 | 0; - var $180 = HEAP32[$179 >> 2]; - var $181 = ($180 | 0) == 0; - if ($181) { - break; - } - var $182 = $180; - } else { - var $182 = $176; - } - var $182; - var $183 = $182 + 4 | 0; - var $184 = HEAP32[$183 >> 2]; - var $185 = $184 & -8; - var $186 = $185 - $8 | 0; - var $187 = $186 >>> 0 < $rsize_0_i >>> 0; - var $_rsize_0_i = $187 ? $186 : $rsize_0_i; - var $_v_0_i = $187 ? $182 : $v_0_i; - var $t_0_i = $182; - var $v_0_i = $_v_0_i; - var $rsize_0_i = $_rsize_0_i; - } - var $189 = $v_0_i; - var $190 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $191 = $189 >>> 0 < $190 >>> 0; - do { - if (!$191) { - var $193 = $189 + $8 | 0; - var $194 = $193; - var $195 = $189 >>> 0 < $193 >>> 0; - if (!$195) { - break; - } - var $197 = $v_0_i + 24 | 0; - var $198 = HEAP32[$197 >> 2]; - var $199 = $v_0_i + 12 | 0; - var $200 = HEAP32[$199 >> 2]; - var $201 = ($200 | 0) == ($v_0_i | 0); - do { - if ($201) { - var $212 = $v_0_i + 20 | 0; - var $213 = HEAP32[$212 >> 2]; - var $214 = ($213 | 0) == 0; - if ($214) { - var $216 = $v_0_i + 16 | 0; - var $217 = HEAP32[$216 >> 2]; - var $218 = ($217 | 0) == 0; - if ($218) { - var $R_1_i = 0; - break; - } - var $RP_0_i = $216; - var $R_0_i = $217; - } else { - var $RP_0_i = $212; - var $R_0_i = $213; - __label__ = 39; - } - while (1) { - var $R_0_i; - var $RP_0_i; - var $219 = $R_0_i + 20 | 0; - var $220 = HEAP32[$219 >> 2]; - var $221 = ($220 | 0) == 0; - if (!$221) { - var $RP_0_i = $219; - var $R_0_i = $220; - continue; - } - var $223 = $R_0_i + 16 | 0; - var $224 = HEAP32[$223 >> 2]; - var $225 = ($224 | 0) == 0; - if ($225) { - break; - } - var $RP_0_i = $223; - var $R_0_i = $224; - } - var $227 = $RP_0_i; - var $228 = $227 >>> 0 < $190 >>> 0; - if ($228) { - _abort(); - } else { - HEAP32[$RP_0_i >> 2] = 0; - var $R_1_i = $R_0_i; - } - } else { - var $203 = $v_0_i + 8 | 0; - var $204 = HEAP32[$203 >> 2]; - var $205 = $204; - var $206 = $205 >>> 0 < $190 >>> 0; - if ($206) { - _abort(); - } else { - var $208 = $204 + 12 | 0; - HEAP32[$208 >> 2] = $200; - var $209 = $200 + 8 | 0; - HEAP32[$209 >> 2] = $204; - var $R_1_i = $200; - } - } - } while (0); - var $R_1_i; - var $232 = ($198 | 0) == 0; - $_$62 : do { - if (!$232) { - var $234 = $v_0_i + 28 | 0; - var $235 = HEAP32[$234 >> 2]; - var $236 = __gm_ + 304 + ($235 << 2) | 0; - var $237 = HEAP32[$236 >> 2]; - var $238 = ($v_0_i | 0) == ($237 | 0); - do { - if ($238) { - HEAP32[$236 >> 2] = $R_1_i; - var $cond_i = ($R_1_i | 0) == 0; - if (!$cond_i) { - break; - } - var $240 = HEAP32[$234 >> 2]; - var $241 = 1 << $240; - var $242 = $241 ^ -1; - var $243 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $244 = $243 & $242; - HEAP32[(__gm_ + 4 | 0) >> 2] = $244; - break $_$62; - } - var $246 = $198; - var $247 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $248 = $246 >>> 0 < $247 >>> 0; - if ($248) { - _abort(); - } else { - var $250 = $198 + 16 | 0; - var $251 = HEAP32[$250 >> 2]; - var $252 = ($251 | 0) == ($v_0_i | 0); - if ($252) { - HEAP32[$250 >> 2] = $R_1_i; - } else { - var $255 = $198 + 20 | 0; - HEAP32[$255 >> 2] = $R_1_i; - } - var $258 = ($R_1_i | 0) == 0; - if ($258) { - break $_$62; - } - } - } while (0); - var $260 = $R_1_i; - var $261 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $262 = $260 >>> 0 < $261 >>> 0; - if ($262) { - _abort(); - } else { - var $264 = $R_1_i + 24 | 0; - HEAP32[$264 >> 2] = $198; - var $265 = $v_0_i + 16 | 0; - var $266 = HEAP32[$265 >> 2]; - var $267 = ($266 | 0) == 0; - if (!$267) { - var $269 = $266; - var $270 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $271 = $269 >>> 0 < $270 >>> 0; - if ($271) { - _abort(); - } else { - var $273 = $R_1_i + 16 | 0; - HEAP32[$273 >> 2] = $266; - var $274 = $266 + 24 | 0; - HEAP32[$274 >> 2] = $R_1_i; - } - } - var $277 = $v_0_i + 20 | 0; - var $278 = HEAP32[$277 >> 2]; - var $279 = ($278 | 0) == 0; - if ($279) { - break; - } - var $281 = $278; - var $282 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $283 = $281 >>> 0 < $282 >>> 0; - if ($283) { - _abort(); - } else { - var $285 = $R_1_i + 20 | 0; - HEAP32[$285 >> 2] = $278; - var $286 = $278 + 24 | 0; - HEAP32[$286 >> 2] = $R_1_i; - } - } - } - } while (0); - var $290 = $rsize_0_i >>> 0 < 16; - if ($290) { - var $292 = $rsize_0_i + $8 | 0; - var $293 = $292 | 3; - var $294 = $v_0_i + 4 | 0; - HEAP32[$294 >> 2] = $293; - var $_sum4_i = $292 + 4 | 0; - var $295 = $189 + $_sum4_i | 0; - var $296 = $295; - var $297 = HEAP32[$296 >> 2]; - var $298 = $297 | 1; - HEAP32[$296 >> 2] = $298; - } else { - var $300 = $8 | 3; - var $301 = $v_0_i + 4 | 0; - HEAP32[$301 >> 2] = $300; - var $302 = $rsize_0_i | 1; - var $_sum_i33 = $8 | 4; - var $303 = $189 + $_sum_i33 | 0; - var $304 = $303; - HEAP32[$304 >> 2] = $302; - var $_sum1_i = $rsize_0_i + $8 | 0; - var $305 = $189 + $_sum1_i | 0; - var $306 = $305; - HEAP32[$306 >> 2] = $rsize_0_i; - var $307 = HEAP32[(__gm_ + 8 | 0) >> 2]; - var $308 = ($307 | 0) == 0; - if (!$308) { - var $310 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $311 = $307 >>> 3; - var $312 = $307 >>> 2; - var $313 = $312 & 1073741822; - var $314 = __gm_ + 40 + ($313 << 2) | 0; - var $315 = $314; - var $316 = HEAP32[(__gm_ | 0) >> 2]; - var $317 = 1 << $311; - var $318 = $316 & $317; - var $319 = ($318 | 0) == 0; - do { - if ($319) { - var $321 = $316 | $317; - HEAP32[(__gm_ | 0) >> 2] = $321; - var $_sum2_pre_i = $313 + 2 | 0; - var $_pre_i = __gm_ + 40 + ($_sum2_pre_i << 2) | 0; - var $F1_0_i = $315; - var $_pre_phi_i = $_pre_i; - } else { - var $_sum3_i = $313 + 2 | 0; - var $323 = __gm_ + 40 + ($_sum3_i << 2) | 0; - var $324 = HEAP32[$323 >> 2]; - var $325 = $324; - var $326 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $327 = $325 >>> 0 < $326 >>> 0; - if (!$327) { - var $F1_0_i = $324; - var $_pre_phi_i = $323; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i; - var $F1_0_i; - HEAP32[$_pre_phi_i >> 2] = $310; - var $330 = $F1_0_i + 12 | 0; - HEAP32[$330 >> 2] = $310; - var $331 = $310 + 8 | 0; - HEAP32[$331 >> 2] = $F1_0_i; - var $332 = $310 + 12 | 0; - HEAP32[$332 >> 2] = $315; - } - HEAP32[(__gm_ + 8 | 0) >> 2] = $rsize_0_i; - HEAP32[(__gm_ + 20 | 0) >> 2] = $194; - } - var $335 = $v_0_i + 8 | 0; - var $336 = $335; - var $337 = ($335 | 0) == 0; - if ($337) { - var $nb_0 = $8; - __label__ = 155; - break $_$2; - } - var $mem_0 = $336; - __label__ = 331; - break $_$2; - } - } while (0); - _abort(); - } else { - var $339 = $bytes >>> 0 > 4294967231; - if ($339) { - var $nb_0 = -1; - __label__ = 155; - break; - } - var $341 = $bytes + 11 | 0; - var $342 = $341 & -8; - var $343 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $344 = ($343 | 0) == 0; - if ($344) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $346 = -$342 | 0; - var $347 = $341 >>> 8; - var $348 = ($347 | 0) == 0; - do { - if ($348) { - var $idx_0_i = 0; - } else { - var $350 = $342 >>> 0 > 16777215; - if ($350) { - var $idx_0_i = 31; - break; - } - var $352 = $347 + 1048320 | 0; - var $353 = $352 >>> 16; - var $354 = $353 & 8; - var $355 = $347 << $354; - var $356 = $355 + 520192 | 0; - var $357 = $356 >>> 16; - var $358 = $357 & 4; - var $359 = $355 << $358; - var $360 = $359 + 245760 | 0; - var $361 = $360 >>> 16; - var $362 = $361 & 2; - var $363 = $358 | $354; - var $364 = $363 | $362; - var $365 = 14 - $364 | 0; - var $366 = $359 << $362; - var $367 = $366 >>> 15; - var $368 = $365 + $367 | 0; - var $369 = $368 << 1; - var $370 = $368 + 7 | 0; - var $371 = $342 >>> ($370 >>> 0); - var $372 = $371 & 1; - var $373 = $372 | $369; - var $idx_0_i = $373; - } - } while (0); - var $idx_0_i; - var $375 = __gm_ + 304 + ($idx_0_i << 2) | 0; - var $376 = HEAP32[$375 >> 2]; - var $377 = ($376 | 0) == 0; - $_$110 : do { - if ($377) { - var $v_2_i = 0; - var $rsize_2_i = $346; - var $t_1_i = 0; - } else { - var $379 = ($idx_0_i | 0) == 31; - if ($379) { - var $384 = 0; - } else { - var $381 = $idx_0_i >>> 1; - var $382 = 25 - $381 | 0; - var $384 = $382; - } - var $384; - var $385 = $342 << $384; - var $v_0_i15 = 0; - var $rsize_0_i14 = $346; - var $t_0_i13 = $376; - var $sizebits_0_i = $385; - var $rst_0_i = 0; - while (1) { - var $rst_0_i; - var $sizebits_0_i; - var $t_0_i13; - var $rsize_0_i14; - var $v_0_i15; - var $387 = $t_0_i13 + 4 | 0; - var $388 = HEAP32[$387 >> 2]; - var $389 = $388 & -8; - var $390 = $389 - $342 | 0; - var $391 = $390 >>> 0 < $rsize_0_i14 >>> 0; - if ($391) { - var $393 = ($389 | 0) == ($342 | 0); - if ($393) { - var $v_2_i = $t_0_i13; - var $rsize_2_i = $390; - var $t_1_i = $t_0_i13; - break $_$110; - } - var $v_1_i = $t_0_i13; - var $rsize_1_i = $390; - } else { - var $v_1_i = $v_0_i15; - var $rsize_1_i = $rsize_0_i14; - } - var $rsize_1_i; - var $v_1_i; - var $395 = $t_0_i13 + 20 | 0; - var $396 = HEAP32[$395 >> 2]; - var $397 = $sizebits_0_i >>> 31; - var $398 = $t_0_i13 + 16 + ($397 << 2) | 0; - var $399 = HEAP32[$398 >> 2]; - var $400 = ($396 | 0) == 0; - var $401 = ($396 | 0) == ($399 | 0); - var $or_cond_i = $400 | $401; - var $rst_1_i = $or_cond_i ? $rst_0_i : $396; - var $402 = ($399 | 0) == 0; - var $403 = $sizebits_0_i << 1; - if ($402) { - var $v_2_i = $v_1_i; - var $rsize_2_i = $rsize_1_i; - var $t_1_i = $rst_1_i; - break $_$110; - } - var $v_0_i15 = $v_1_i; - var $rsize_0_i14 = $rsize_1_i; - var $t_0_i13 = $399; - var $sizebits_0_i = $403; - var $rst_0_i = $rst_1_i; - } - } - } while (0); - var $t_1_i; - var $rsize_2_i; - var $v_2_i; - var $404 = ($t_1_i | 0) == 0; - var $405 = ($v_2_i | 0) == 0; - var $or_cond19_i = $404 & $405; - if ($or_cond19_i) { - var $407 = 2 << $idx_0_i; - var $408 = -$407 | 0; - var $409 = $407 | $408; - var $410 = $343 & $409; - var $411 = ($410 | 0) == 0; - if ($411) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $413 = -$410 | 0; - var $414 = $410 & $413; - var $415 = $414 - 1 | 0; - var $416 = $415 >>> 12; - var $417 = $416 & 16; - var $418 = $415 >>> ($417 >>> 0); - var $419 = $418 >>> 5; - var $420 = $419 & 8; - var $421 = $418 >>> ($420 >>> 0); - var $422 = $421 >>> 2; - var $423 = $422 & 4; - var $424 = $421 >>> ($423 >>> 0); - var $425 = $424 >>> 1; - var $426 = $425 & 2; - var $427 = $424 >>> ($426 >>> 0); - var $428 = $427 >>> 1; - var $429 = $428 & 1; - var $430 = $420 | $417; - var $431 = $430 | $423; - var $432 = $431 | $426; - var $433 = $432 | $429; - var $434 = $427 >>> ($429 >>> 0); - var $435 = $433 + $434 | 0; - var $436 = __gm_ + 304 + ($435 << 2) | 0; - var $437 = HEAP32[$436 >> 2]; - var $t_2_ph_i = $437; - } else { - var $t_2_ph_i = $t_1_i; - } - var $t_2_ph_i; - var $438 = ($t_2_ph_i | 0) == 0; - $_$125 : do { - if ($438) { - var $rsize_3_lcssa_i = $rsize_2_i; - var $v_3_lcssa_i = $v_2_i; - } else { - var $t_224_i = $t_2_ph_i; - var $rsize_325_i = $rsize_2_i; - var $v_326_i = $v_2_i; - while (1) { - var $v_326_i; - var $rsize_325_i; - var $t_224_i; - var $439 = $t_224_i + 4 | 0; - var $440 = HEAP32[$439 >> 2]; - var $441 = $440 & -8; - var $442 = $441 - $342 | 0; - var $443 = $442 >>> 0 < $rsize_325_i >>> 0; - var $_rsize_3_i = $443 ? $442 : $rsize_325_i; - var $t_2_v_3_i = $443 ? $t_224_i : $v_326_i; - var $444 = $t_224_i + 16 | 0; - var $445 = HEAP32[$444 >> 2]; - var $446 = ($445 | 0) == 0; - if (!$446) { - var $t_224_i = $445; - var $rsize_325_i = $_rsize_3_i; - var $v_326_i = $t_2_v_3_i; - continue; - } - var $447 = $t_224_i + 20 | 0; - var $448 = HEAP32[$447 >> 2]; - var $449 = ($448 | 0) == 0; - if ($449) { - var $rsize_3_lcssa_i = $_rsize_3_i; - var $v_3_lcssa_i = $t_2_v_3_i; - break $_$125; - } - var $t_224_i = $448; - var $rsize_325_i = $_rsize_3_i; - var $v_326_i = $t_2_v_3_i; - } - } - } while (0); - var $v_3_lcssa_i; - var $rsize_3_lcssa_i; - var $450 = ($v_3_lcssa_i | 0) == 0; - if ($450) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $452 = HEAP32[(__gm_ + 8 | 0) >> 2]; - var $453 = $452 - $342 | 0; - var $454 = $rsize_3_lcssa_i >>> 0 < $453 >>> 0; - if (!$454) { - var $nb_0 = $342; - __label__ = 155; - break; - } - var $456 = $v_3_lcssa_i; - var $457 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $458 = $456 >>> 0 < $457 >>> 0; - do { - if (!$458) { - var $460 = $456 + $342 | 0; - var $461 = $460; - var $462 = $456 >>> 0 < $460 >>> 0; - if (!$462) { - break; - } - var $464 = $v_3_lcssa_i + 24 | 0; - var $465 = HEAP32[$464 >> 2]; - var $466 = $v_3_lcssa_i + 12 | 0; - var $467 = HEAP32[$466 >> 2]; - var $468 = ($467 | 0) == ($v_3_lcssa_i | 0); - do { - if ($468) { - var $479 = $v_3_lcssa_i + 20 | 0; - var $480 = HEAP32[$479 >> 2]; - var $481 = ($480 | 0) == 0; - if ($481) { - var $483 = $v_3_lcssa_i + 16 | 0; - var $484 = HEAP32[$483 >> 2]; - var $485 = ($484 | 0) == 0; - if ($485) { - var $R_1_i19 = 0; - break; - } - var $RP_0_i17 = $483; - var $R_0_i16 = $484; - } else { - var $RP_0_i17 = $479; - var $R_0_i16 = $480; - __label__ = 103; - } - while (1) { - var $R_0_i16; - var $RP_0_i17; - var $486 = $R_0_i16 + 20 | 0; - var $487 = HEAP32[$486 >> 2]; - var $488 = ($487 | 0) == 0; - if (!$488) { - var $RP_0_i17 = $486; - var $R_0_i16 = $487; - continue; - } - var $490 = $R_0_i16 + 16 | 0; - var $491 = HEAP32[$490 >> 2]; - var $492 = ($491 | 0) == 0; - if ($492) { - break; - } - var $RP_0_i17 = $490; - var $R_0_i16 = $491; - } - var $494 = $RP_0_i17; - var $495 = $494 >>> 0 < $457 >>> 0; - if ($495) { - _abort(); - } else { - HEAP32[$RP_0_i17 >> 2] = 0; - var $R_1_i19 = $R_0_i16; - } - } else { - var $470 = $v_3_lcssa_i + 8 | 0; - var $471 = HEAP32[$470 >> 2]; - var $472 = $471; - var $473 = $472 >>> 0 < $457 >>> 0; - if ($473) { - _abort(); - } else { - var $475 = $471 + 12 | 0; - HEAP32[$475 >> 2] = $467; - var $476 = $467 + 8 | 0; - HEAP32[$476 >> 2] = $471; - var $R_1_i19 = $467; - } - } - } while (0); - var $R_1_i19; - var $499 = ($465 | 0) == 0; - $_$151 : do { - if (!$499) { - var $501 = $v_3_lcssa_i + 28 | 0; - var $502 = HEAP32[$501 >> 2]; - var $503 = __gm_ + 304 + ($502 << 2) | 0; - var $504 = HEAP32[$503 >> 2]; - var $505 = ($v_3_lcssa_i | 0) == ($504 | 0); - do { - if ($505) { - HEAP32[$503 >> 2] = $R_1_i19; - var $cond_i20 = ($R_1_i19 | 0) == 0; - if (!$cond_i20) { - break; - } - var $507 = HEAP32[$501 >> 2]; - var $508 = 1 << $507; - var $509 = $508 ^ -1; - var $510 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $511 = $510 & $509; - HEAP32[(__gm_ + 4 | 0) >> 2] = $511; - break $_$151; - } - var $513 = $465; - var $514 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $515 = $513 >>> 0 < $514 >>> 0; - if ($515) { - _abort(); - } else { - var $517 = $465 + 16 | 0; - var $518 = HEAP32[$517 >> 2]; - var $519 = ($518 | 0) == ($v_3_lcssa_i | 0); - if ($519) { - HEAP32[$517 >> 2] = $R_1_i19; - } else { - var $522 = $465 + 20 | 0; - HEAP32[$522 >> 2] = $R_1_i19; - } - var $525 = ($R_1_i19 | 0) == 0; - if ($525) { - break $_$151; - } - } - } while (0); - var $527 = $R_1_i19; - var $528 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $529 = $527 >>> 0 < $528 >>> 0; - if ($529) { - _abort(); - } else { - var $531 = $R_1_i19 + 24 | 0; - HEAP32[$531 >> 2] = $465; - var $532 = $v_3_lcssa_i + 16 | 0; - var $533 = HEAP32[$532 >> 2]; - var $534 = ($533 | 0) == 0; - if (!$534) { - var $536 = $533; - var $537 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $538 = $536 >>> 0 < $537 >>> 0; - if ($538) { - _abort(); - } else { - var $540 = $R_1_i19 + 16 | 0; - HEAP32[$540 >> 2] = $533; - var $541 = $533 + 24 | 0; - HEAP32[$541 >> 2] = $R_1_i19; - } - } - var $544 = $v_3_lcssa_i + 20 | 0; - var $545 = HEAP32[$544 >> 2]; - var $546 = ($545 | 0) == 0; - if ($546) { - break; - } - var $548 = $545; - var $549 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $550 = $548 >>> 0 < $549 >>> 0; - if ($550) { - _abort(); - } else { - var $552 = $R_1_i19 + 20 | 0; - HEAP32[$552 >> 2] = $545; - var $553 = $545 + 24 | 0; - HEAP32[$553 >> 2] = $R_1_i19; - } - } - } - } while (0); - var $557 = $rsize_3_lcssa_i >>> 0 < 16; - $_$179 : do { - if ($557) { - var $559 = $rsize_3_lcssa_i + $342 | 0; - var $560 = $559 | 3; - var $561 = $v_3_lcssa_i + 4 | 0; - HEAP32[$561 >> 2] = $560; - var $_sum18_i = $559 + 4 | 0; - var $562 = $456 + $_sum18_i | 0; - var $563 = $562; - var $564 = HEAP32[$563 >> 2]; - var $565 = $564 | 1; - HEAP32[$563 >> 2] = $565; - } else { - var $567 = $342 | 3; - var $568 = $v_3_lcssa_i + 4 | 0; - HEAP32[$568 >> 2] = $567; - var $569 = $rsize_3_lcssa_i | 1; - var $_sum_i2232 = $342 | 4; - var $570 = $456 + $_sum_i2232 | 0; - var $571 = $570; - HEAP32[$571 >> 2] = $569; - var $_sum1_i23 = $rsize_3_lcssa_i + $342 | 0; - var $572 = $456 + $_sum1_i23 | 0; - var $573 = $572; - HEAP32[$573 >> 2] = $rsize_3_lcssa_i; - var $574 = $rsize_3_lcssa_i >>> 0 < 256; - if ($574) { - var $576 = $rsize_3_lcssa_i >>> 3; - var $577 = $rsize_3_lcssa_i >>> 2; - var $578 = $577 & 1073741822; - var $579 = __gm_ + 40 + ($578 << 2) | 0; - var $580 = $579; - var $581 = HEAP32[(__gm_ | 0) >> 2]; - var $582 = 1 << $576; - var $583 = $581 & $582; - var $584 = ($583 | 0) == 0; - do { - if ($584) { - var $586 = $581 | $582; - HEAP32[(__gm_ | 0) >> 2] = $586; - var $_sum14_pre_i = $578 + 2 | 0; - var $_pre_i24 = __gm_ + 40 + ($_sum14_pre_i << 2) | 0; - var $F5_0_i = $580; - var $_pre_phi_i25 = $_pre_i24; - } else { - var $_sum17_i = $578 + 2 | 0; - var $588 = __gm_ + 40 + ($_sum17_i << 2) | 0; - var $589 = HEAP32[$588 >> 2]; - var $590 = $589; - var $591 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $592 = $590 >>> 0 < $591 >>> 0; - if (!$592) { - var $F5_0_i = $589; - var $_pre_phi_i25 = $588; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i25; - var $F5_0_i; - HEAP32[$_pre_phi_i25 >> 2] = $461; - var $595 = $F5_0_i + 12 | 0; - HEAP32[$595 >> 2] = $461; - var $_sum15_i = $342 + 8 | 0; - var $596 = $456 + $_sum15_i | 0; - var $597 = $596; - HEAP32[$597 >> 2] = $F5_0_i; - var $_sum16_i = $342 + 12 | 0; - var $598 = $456 + $_sum16_i | 0; - var $599 = $598; - HEAP32[$599 >> 2] = $580; - } else { - var $601 = $460; - var $602 = $rsize_3_lcssa_i >>> 8; - var $603 = ($602 | 0) == 0; - do { - if ($603) { - var $I7_0_i = 0; - } else { - var $605 = $rsize_3_lcssa_i >>> 0 > 16777215; - if ($605) { - var $I7_0_i = 31; - break; - } - var $607 = $602 + 1048320 | 0; - var $608 = $607 >>> 16; - var $609 = $608 & 8; - var $610 = $602 << $609; - var $611 = $610 + 520192 | 0; - var $612 = $611 >>> 16; - var $613 = $612 & 4; - var $614 = $610 << $613; - var $615 = $614 + 245760 | 0; - var $616 = $615 >>> 16; - var $617 = $616 & 2; - var $618 = $613 | $609; - var $619 = $618 | $617; - var $620 = 14 - $619 | 0; - var $621 = $614 << $617; - var $622 = $621 >>> 15; - var $623 = $620 + $622 | 0; - var $624 = $623 << 1; - var $625 = $623 + 7 | 0; - var $626 = $rsize_3_lcssa_i >>> ($625 >>> 0); - var $627 = $626 & 1; - var $628 = $627 | $624; - var $I7_0_i = $628; - } - } while (0); - var $I7_0_i; - var $630 = __gm_ + 304 + ($I7_0_i << 2) | 0; - var $_sum2_i = $342 + 28 | 0; - var $631 = $456 + $_sum2_i | 0; - var $632 = $631; - HEAP32[$632 >> 2] = $I7_0_i; - var $_sum3_i26 = $342 + 16 | 0; - var $633 = $456 + $_sum3_i26 | 0; - var $_sum4_i27 = $342 + 20 | 0; - var $634 = $456 + $_sum4_i27 | 0; - var $635 = $634; - HEAP32[$635 >> 2] = 0; - var $636 = $633; - HEAP32[$636 >> 2] = 0; - var $637 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $638 = 1 << $I7_0_i; - var $639 = $637 & $638; - var $640 = ($639 | 0) == 0; - if ($640) { - var $642 = $637 | $638; - HEAP32[(__gm_ + 4 | 0) >> 2] = $642; - HEAP32[$630 >> 2] = $601; - var $643 = $630; - var $_sum5_i = $342 + 24 | 0; - var $644 = $456 + $_sum5_i | 0; - var $645 = $644; - HEAP32[$645 >> 2] = $643; - var $_sum6_i = $342 + 12 | 0; - var $646 = $456 + $_sum6_i | 0; - var $647 = $646; - HEAP32[$647 >> 2] = $601; - var $_sum7_i = $342 + 8 | 0; - var $648 = $456 + $_sum7_i | 0; - var $649 = $648; - HEAP32[$649 >> 2] = $601; - } else { - var $651 = HEAP32[$630 >> 2]; - var $652 = ($I7_0_i | 0) == 31; - if ($652) { - var $657 = 0; - } else { - var $654 = $I7_0_i >>> 1; - var $655 = 25 - $654 | 0; - var $657 = $655; - } - var $657; - var $658 = $rsize_3_lcssa_i << $657; - var $K12_0_i = $658; - var $T_0_i = $651; - while (1) { - var $T_0_i; - var $K12_0_i; - var $660 = $T_0_i + 4 | 0; - var $661 = HEAP32[$660 >> 2]; - var $662 = $661 & -8; - var $663 = ($662 | 0) == ($rsize_3_lcssa_i | 0); - if ($663) { - var $683 = $T_0_i + 8 | 0; - var $684 = HEAP32[$683 >> 2]; - var $685 = $T_0_i; - var $686 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $687 = $685 >>> 0 < $686 >>> 0; - do { - if (!$687) { - var $689 = $684; - var $690 = $689 >>> 0 < $686 >>> 0; - if ($690) { - break; - } - var $692 = $684 + 12 | 0; - HEAP32[$692 >> 2] = $601; - HEAP32[$683 >> 2] = $601; - var $_sum8_i = $342 + 8 | 0; - var $693 = $456 + $_sum8_i | 0; - var $694 = $693; - HEAP32[$694 >> 2] = $684; - var $_sum9_i = $342 + 12 | 0; - var $695 = $456 + $_sum9_i | 0; - var $696 = $695; - HEAP32[$696 >> 2] = $T_0_i; - var $_sum10_i = $342 + 24 | 0; - var $697 = $456 + $_sum10_i | 0; - var $698 = $697; - HEAP32[$698 >> 2] = 0; - break $_$179; - } - } while (0); - _abort(); - } else { - var $665 = $K12_0_i >>> 31; - var $666 = $T_0_i + 16 + ($665 << 2) | 0; - var $667 = HEAP32[$666 >> 2]; - var $668 = ($667 | 0) == 0; - var $669 = $K12_0_i << 1; - if (!$668) { - var $K12_0_i = $669; - var $T_0_i = $667; - continue; - } - var $671 = $666; - var $672 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $673 = $671 >>> 0 < $672 >>> 0; - if (!$673) { - HEAP32[$666 >> 2] = $601; - var $_sum11_i = $342 + 24 | 0; - var $675 = $456 + $_sum11_i | 0; - var $676 = $675; - HEAP32[$676 >> 2] = $T_0_i; - var $_sum12_i = $342 + 12 | 0; - var $677 = $456 + $_sum12_i | 0; - var $678 = $677; - HEAP32[$678 >> 2] = $601; - var $_sum13_i = $342 + 8 | 0; - var $679 = $456 + $_sum13_i | 0; - var $680 = $679; - HEAP32[$680 >> 2] = $601; - break $_$179; - } - _abort(); - } - } - } - } - } - } while (0); - var $700 = $v_3_lcssa_i + 8 | 0; - var $701 = $700; - var $702 = ($700 | 0) == 0; - if ($702) { - var $nb_0 = $342; - __label__ = 155; - break $_$2; - } - var $mem_0 = $701; - __label__ = 331; - break $_$2; - } - } while (0); - _abort(); - } - } while (0); - $_$215 : do { - if (__label__ == 155) { - var $nb_0; - var $703 = HEAP32[(__gm_ + 8 | 0) >> 2]; - var $704 = $nb_0 >>> 0 > $703 >>> 0; - if ($704) { - var $732 = HEAP32[(__gm_ + 12 | 0) >> 2]; - var $733 = $nb_0 >>> 0 < $732 >>> 0; - if ($733) { - var $735 = $732 - $nb_0 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $735; - var $736 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $737 = $736; - var $738 = $737 + $nb_0 | 0; - var $739 = $738; - HEAP32[(__gm_ + 24 | 0) >> 2] = $739; - var $740 = $735 | 1; - var $_sum = $nb_0 + 4 | 0; - var $741 = $737 + $_sum | 0; - var $742 = $741; - HEAP32[$742 >> 2] = $740; - var $743 = $nb_0 | 3; - var $744 = $736 + 4 | 0; - HEAP32[$744 >> 2] = $743; - var $745 = $736 + 8 | 0; - var $746 = $745; - var $mem_0 = $746; - } else { - var $748 = HEAP32[(_mparams | 0) >> 2]; - var $749 = ($748 | 0) == 0; - do { - if ($749) { - var $751 = HEAP32[(_mparams | 0) >> 2]; - var $752 = ($751 | 0) == 0; - if (!$752) { - break; - } - var $754 = _sysconf(8); - var $755 = $754 - 1 | 0; - var $756 = $755 & $754; - var $757 = ($756 | 0) == 0; - if ($757) { - HEAP32[(_mparams + 8 | 0) >> 2] = $754; - HEAP32[(_mparams + 4 | 0) >> 2] = $754; - HEAP32[(_mparams + 12 | 0) >> 2] = -1; - HEAP32[(_mparams + 16 | 0) >> 2] = 2097152; - HEAP32[(_mparams + 20 | 0) >> 2] = 0; - HEAP32[(__gm_ + 440 | 0) >> 2] = 0; - var $760 = _time(0); - var $761 = $760 & -16; - var $762 = $761 ^ 1431655768; - HEAP32[(_mparams | 0) >> 2] = $762; - } else { - _abort(); - } - } - } while (0); - var $763 = HEAP32[(__gm_ + 440 | 0) >> 2]; - var $764 = $763 & 4; - var $765 = ($764 | 0) == 0; - $_$234 : do { - if ($765) { - var $767 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $768 = ($767 | 0) == 0; - $_$236 : do { - if (!$768) { - var $770 = $767; - var $sp_0_i_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i_i; - var $772 = $sp_0_i_i | 0; - var $773 = HEAP32[$772 >> 2]; - var $774 = $773 >>> 0 > $770 >>> 0; - if (!$774) { - var $776 = $sp_0_i_i + 4 | 0; - var $777 = HEAP32[$776 >> 2]; - var $778 = $773 + $777 | 0; - var $779 = $778 >>> 0 > $770 >>> 0; - if ($779) { - break; - } - } - var $781 = $sp_0_i_i + 8 | 0; - var $782 = HEAP32[$781 >> 2]; - var $783 = ($782 | 0) == 0; - if ($783) { - __label__ = 174; - break $_$236; - } - var $sp_0_i_i = $782; - } - var $784 = ($sp_0_i_i | 0) == 0; - if ($784) { - __label__ = 174; - break; - } - var $810 = HEAP32[(__gm_ + 12 | 0) >> 2]; - var $811 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $812 = $nb_0 + 47 | 0; - var $813 = $812 - $810 | 0; - var $814 = $813 + $811 | 0; - var $815 = -$811 | 0; - var $816 = $814 & $815; - var $817 = $816 >>> 0 < 2147483647; - if (!$817) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $819 = _sbrk($816); - var $820 = HEAP32[$772 >> 2]; - var $821 = HEAP32[$776 >> 2]; - var $822 = $820 + $821 | 0; - var $823 = ($819 | 0) == ($822 | 0); - var $_1_i = $823 ? $816 : 0; - var $_2_i = $823 ? $819 : -1; - var $tbase_0_i = $_2_i; - var $tsize_0_i = $_1_i; - var $asize_1_i = $816; - var $br_0_i = $819; - __label__ = 181; - break; - } - __label__ = 174; - } while (0); - do { - if (__label__ == 174) { - var $785 = _sbrk(0); - var $786 = ($785 | 0) == -1; - if ($786) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $788 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $789 = $nb_0 + 47 | 0; - var $790 = $789 + $788 | 0; - var $791 = -$788 | 0; - var $792 = $790 & $791; - var $793 = $785; - var $794 = HEAP32[(_mparams + 4 | 0) >> 2]; - var $795 = $794 - 1 | 0; - var $796 = $795 & $793; - var $797 = ($796 | 0) == 0; - if ($797) { - var $asize_0_i = $792; - } else { - var $799 = $795 + $793 | 0; - var $800 = -$794 | 0; - var $801 = $799 & $800; - var $802 = $792 - $793 | 0; - var $803 = $802 + $801 | 0; - var $asize_0_i = $803; - } - var $asize_0_i; - var $805 = $asize_0_i >>> 0 < 2147483647; - if (!$805) { - var $tsize_0242932_ph_i = 0; - __label__ = 189; - break; - } - var $807 = _sbrk($asize_0_i); - var $808 = ($807 | 0) == ($785 | 0); - var $asize_0__i = $808 ? $asize_0_i : 0; - var $__i = $808 ? $785 : -1; - var $tbase_0_i = $__i; - var $tsize_0_i = $asize_0__i; - var $asize_1_i = $asize_0_i; - var $br_0_i = $807; - __label__ = 181; - break; - } - } while (0); - $_$253 : do { - if (__label__ == 181) { - var $br_0_i; - var $asize_1_i; - var $tsize_0_i; - var $tbase_0_i; - var $825 = -$asize_1_i | 0; - var $826 = ($tbase_0_i | 0) == -1; - if (!$826) { - var $tsize_242_i = $tsize_0_i; - var $tbase_243_i = $tbase_0_i; - __label__ = 194; - break $_$234; - } - var $828 = ($br_0_i | 0) != -1; - var $829 = $asize_1_i >>> 0 < 2147483647; - var $or_cond_i28 = $828 & $829; - do { - if ($or_cond_i28) { - var $831 = $nb_0 + 48 | 0; - var $832 = $asize_1_i >>> 0 < $831 >>> 0; - if (!$832) { - var $asize_2_i = $asize_1_i; - break; - } - var $834 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $835 = $nb_0 + 47 | 0; - var $836 = $835 - $asize_1_i | 0; - var $837 = $836 + $834 | 0; - var $838 = -$834 | 0; - var $839 = $837 & $838; - var $840 = $839 >>> 0 < 2147483647; - if (!$840) { - var $asize_2_i = $asize_1_i; - break; - } - var $842 = _sbrk($839); - var $843 = ($842 | 0) == -1; - if ($843) { - var $847 = _sbrk($825); - var $tsize_0242932_ph_i = $tsize_0_i; - break $_$253; - } - var $845 = $839 + $asize_1_i | 0; - var $asize_2_i = $845; - } else { - var $asize_2_i = $asize_1_i; - } - } while (0); - var $asize_2_i; - var $849 = ($br_0_i | 0) == -1; - if (!$849) { - var $tsize_242_i = $asize_2_i; - var $tbase_243_i = $br_0_i; - __label__ = 194; - break $_$234; - } - var $852 = HEAP32[(__gm_ + 440 | 0) >> 2]; - var $853 = $852 | 4; - HEAP32[(__gm_ + 440 | 0) >> 2] = $853; - var $tsize_137_i = $tsize_0_i; - __label__ = 191; - break $_$234; - } - } while (0); - var $tsize_0242932_ph_i; - var $850 = HEAP32[(__gm_ + 440 | 0) >> 2]; - var $851 = $850 | 4; - HEAP32[(__gm_ + 440 | 0) >> 2] = $851; - var $tsize_137_i = $tsize_0242932_ph_i; - __label__ = 191; - break; - } - var $tsize_137_i = 0; - __label__ = 191; - } while (0); - do { - if (__label__ == 191) { - var $tsize_137_i; - var $854 = HEAP32[(_mparams + 8 | 0) >> 2]; - var $855 = $nb_0 + 47 | 0; - var $856 = $855 + $854 | 0; - var $857 = -$854 | 0; - var $858 = $856 & $857; - var $859 = $858 >>> 0 < 2147483647; - if (!$859) { - __label__ = 330; - break; - } - var $861 = _sbrk($858); - var $862 = _sbrk(0); - var $notlhs_i = ($861 | 0) != -1; - var $notrhs_i = ($862 | 0) != -1; - var $or_cond3_not_i = $notrhs_i & $notlhs_i; - var $863 = $861 >>> 0 < $862 >>> 0; - var $or_cond4_i = $or_cond3_not_i & $863; - if (!$or_cond4_i) { - __label__ = 330; - break; - } - var $864 = $862; - var $865 = $861; - var $866 = $864 - $865 | 0; - var $867 = $nb_0 + 40 | 0; - var $868 = $866 >>> 0 > $867 >>> 0; - var $_tsize_1_i = $868 ? $866 : $tsize_137_i; - var $_tbase_1_i = $868 ? $861 : -1; - var $869 = ($_tbase_1_i | 0) == -1; - if ($869) { - __label__ = 330; - break; - } - var $tsize_242_i = $_tsize_1_i; - var $tbase_243_i = $_tbase_1_i; - __label__ = 194; - break; - } - } while (0); - do { - if (__label__ == 194) { - var $tbase_243_i; - var $tsize_242_i; - var $870 = HEAP32[(__gm_ + 432 | 0) >> 2]; - var $871 = $870 + $tsize_242_i | 0; - HEAP32[(__gm_ + 432 | 0) >> 2] = $871; - var $872 = HEAP32[(__gm_ + 436 | 0) >> 2]; - var $873 = $871 >>> 0 > $872 >>> 0; - if ($873) { - HEAP32[(__gm_ + 436 | 0) >> 2] = $871; - } - var $876 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $877 = ($876 | 0) == 0; - $_$275 : do { - if ($877) { - var $879 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $880 = ($879 | 0) == 0; - var $881 = $tbase_243_i >>> 0 < $879 >>> 0; - var $or_cond5_i = $880 | $881; - if ($or_cond5_i) { - HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i; - } - HEAP32[(__gm_ + 444 | 0) >> 2] = $tbase_243_i; - HEAP32[(__gm_ + 448 | 0) >> 2] = $tsize_242_i; - HEAP32[(__gm_ + 456 | 0) >> 2] = 0; - var $884 = HEAP32[(_mparams | 0) >> 2]; - HEAP32[(__gm_ + 36 | 0) >> 2] = $884; - HEAP32[(__gm_ + 32 | 0) >> 2] = -1; - var $i_02_i_i = 0; - while (1) { - var $i_02_i_i; - var $886 = $i_02_i_i << 1; - var $887 = __gm_ + 40 + ($886 << 2) | 0; - var $888 = $887; - var $_sum_i_i = $886 + 3 | 0; - var $889 = __gm_ + 40 + ($_sum_i_i << 2) | 0; - HEAP32[$889 >> 2] = $888; - var $_sum1_i_i = $886 + 2 | 0; - var $890 = __gm_ + 40 + ($_sum1_i_i << 2) | 0; - HEAP32[$890 >> 2] = $888; - var $891 = $i_02_i_i + 1 | 0; - var $exitcond_i_i = ($891 | 0) == 32; - if ($exitcond_i_i) { - break; - } - var $i_02_i_i = $891; - } - var $892 = $tbase_243_i + 8 | 0; - var $893 = $892; - var $894 = $893 & 7; - var $895 = ($894 | 0) == 0; - if ($895) { - var $899 = 0; - } else { - var $897 = -$893 | 0; - var $898 = $897 & 7; - var $899 = $898; - } - var $899; - var $900 = $tbase_243_i + $899 | 0; - var $901 = $900; - var $902 = $tsize_242_i - 40 | 0; - var $903 = $902 - $899 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $901; - HEAP32[(__gm_ + 12 | 0) >> 2] = $903; - var $904 = $903 | 1; - var $_sum_i9_i = $899 + 4 | 0; - var $905 = $tbase_243_i + $_sum_i9_i | 0; - var $906 = $905; - HEAP32[$906 >> 2] = $904; - var $_sum2_i_i = $tsize_242_i - 36 | 0; - var $907 = $tbase_243_i + $_sum2_i_i | 0; - var $908 = $907; - HEAP32[$908 >> 2] = 40; - var $909 = HEAP32[(_mparams + 16 | 0) >> 2]; - HEAP32[(__gm_ + 28 | 0) >> 2] = $909; - } else { - var $sp_0_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i; - var $910 = ($sp_0_i | 0) == 0; - if ($910) { - break; - } - var $912 = $sp_0_i | 0; - var $913 = HEAP32[$912 >> 2]; - var $914 = $sp_0_i + 4 | 0; - var $915 = HEAP32[$914 >> 2]; - var $916 = $913 + $915 | 0; - var $917 = ($tbase_243_i | 0) == ($916 | 0); - if ($917) { - var $921 = $sp_0_i + 12 | 0; - var $922 = HEAP32[$921 >> 2]; - var $923 = $922 & 8; - var $924 = ($923 | 0) == 0; - if (!$924) { - break; - } - var $926 = $876; - var $927 = $926 >>> 0 >= $913 >>> 0; - var $928 = $926 >>> 0 < $tbase_243_i >>> 0; - var $or_cond44_i = $927 & $928; - if (!$or_cond44_i) { - break; - } - var $930 = $915 + $tsize_242_i | 0; - HEAP32[$914 >> 2] = $930; - var $931 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $932 = HEAP32[(__gm_ + 12 | 0) >> 2]; - var $933 = $932 + $tsize_242_i | 0; - var $934 = $931; - var $935 = $931 + 8 | 0; - var $936 = $935; - var $937 = $936 & 7; - var $938 = ($937 | 0) == 0; - if ($938) { - var $942 = 0; - } else { - var $940 = -$936 | 0; - var $941 = $940 & 7; - var $942 = $941; - } - var $942; - var $943 = $934 + $942 | 0; - var $944 = $943; - var $945 = $933 - $942 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $944; - HEAP32[(__gm_ + 12 | 0) >> 2] = $945; - var $946 = $945 | 1; - var $_sum_i13_i = $942 + 4 | 0; - var $947 = $934 + $_sum_i13_i | 0; - var $948 = $947; - HEAP32[$948 >> 2] = $946; - var $_sum2_i14_i = $933 + 4 | 0; - var $949 = $934 + $_sum2_i14_i | 0; - var $950 = $949; - HEAP32[$950 >> 2] = 40; - var $951 = HEAP32[(_mparams + 16 | 0) >> 2]; - HEAP32[(__gm_ + 28 | 0) >> 2] = $951; - break $_$275; - } - var $919 = $sp_0_i + 8 | 0; - var $920 = HEAP32[$919 >> 2]; - var $sp_0_i = $920; - } - var $952 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $953 = $tbase_243_i >>> 0 < $952 >>> 0; - if ($953) { - HEAP32[(__gm_ + 16 | 0) >> 2] = $tbase_243_i; - } - var $955 = $tbase_243_i + $tsize_242_i | 0; - var $sp_1_i = __gm_ + 444 | 0; - while (1) { - var $sp_1_i; - var $957 = ($sp_1_i | 0) == 0; - if ($957) { - __label__ = 293; - break; - } - var $959 = $sp_1_i | 0; - var $960 = HEAP32[$959 >> 2]; - var $961 = ($960 | 0) == ($955 | 0); - if ($961) { - __label__ = 218; - break; - } - var $963 = $sp_1_i + 8 | 0; - var $964 = HEAP32[$963 >> 2]; - var $sp_1_i = $964; - } - do { - if (__label__ == 218) { - var $965 = $sp_1_i + 12 | 0; - var $966 = HEAP32[$965 >> 2]; - var $967 = $966 & 8; - var $968 = ($967 | 0) == 0; - if (!$968) { - break; - } - HEAP32[$959 >> 2] = $tbase_243_i; - var $970 = $sp_1_i + 4 | 0; - var $971 = HEAP32[$970 >> 2]; - var $972 = $971 + $tsize_242_i | 0; - HEAP32[$970 >> 2] = $972; - var $973 = $tbase_243_i + 8 | 0; - var $974 = $973; - var $975 = $974 & 7; - var $976 = ($975 | 0) == 0; - if ($976) { - var $981 = 0; - } else { - var $978 = -$974 | 0; - var $979 = $978 & 7; - var $981 = $979; - } - var $981; - var $982 = $tbase_243_i + $981 | 0; - var $_sum79_i = $tsize_242_i + 8 | 0; - var $983 = $tbase_243_i + $_sum79_i | 0; - var $984 = $983; - var $985 = $984 & 7; - var $986 = ($985 | 0) == 0; - if ($986) { - var $991 = 0; - } else { - var $988 = -$984 | 0; - var $989 = $988 & 7; - var $991 = $989; - } - var $991; - var $_sum80_i = $991 + $tsize_242_i | 0; - var $992 = $tbase_243_i + $_sum80_i | 0; - var $993 = $992; - var $994 = $992; - var $995 = $982; - var $996 = $994 - $995 | 0; - var $_sum_i16_i = $981 + $nb_0 | 0; - var $997 = $tbase_243_i + $_sum_i16_i | 0; - var $998 = $997; - var $999 = $996 - $nb_0 | 0; - var $1000 = $nb_0 | 3; - var $_sum1_i17_i = $981 + 4 | 0; - var $1001 = $tbase_243_i + $_sum1_i17_i | 0; - var $1002 = $1001; - HEAP32[$1002 >> 2] = $1000; - var $1003 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $1004 = ($993 | 0) == ($1003 | 0); - $_$314 : do { - if ($1004) { - var $1006 = HEAP32[(__gm_ + 12 | 0) >> 2]; - var $1007 = $1006 + $999 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1007; - HEAP32[(__gm_ + 24 | 0) >> 2] = $998; - var $1008 = $1007 | 1; - var $_sum42_i_i = $_sum_i16_i + 4 | 0; - var $1009 = $tbase_243_i + $_sum42_i_i | 0; - var $1010 = $1009; - HEAP32[$1010 >> 2] = $1008; - } else { - var $1012 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $1013 = ($993 | 0) == ($1012 | 0); - if ($1013) { - var $1015 = HEAP32[(__gm_ + 8 | 0) >> 2]; - var $1016 = $1015 + $999 | 0; - HEAP32[(__gm_ + 8 | 0) >> 2] = $1016; - HEAP32[(__gm_ + 20 | 0) >> 2] = $998; - var $1017 = $1016 | 1; - var $_sum40_i_i = $_sum_i16_i + 4 | 0; - var $1018 = $tbase_243_i + $_sum40_i_i | 0; - var $1019 = $1018; - HEAP32[$1019 >> 2] = $1017; - var $_sum41_i_i = $1016 + $_sum_i16_i | 0; - var $1020 = $tbase_243_i + $_sum41_i_i | 0; - var $1021 = $1020; - HEAP32[$1021 >> 2] = $1016; - } else { - var $_sum2_i18_i = $tsize_242_i + 4 | 0; - var $_sum81_i = $_sum2_i18_i + $991 | 0; - var $1023 = $tbase_243_i + $_sum81_i | 0; - var $1024 = $1023; - var $1025 = HEAP32[$1024 >> 2]; - var $1026 = $1025 & 3; - var $1027 = ($1026 | 0) == 1; - if ($1027) { - var $1029 = $1025 & -8; - var $1030 = $1025 >>> 3; - var $1031 = $1025 >>> 0 < 256; - $_$322 : do { - if ($1031) { - var $_sum3738_i_i = $991 | 8; - var $_sum91_i = $_sum3738_i_i + $tsize_242_i | 0; - var $1033 = $tbase_243_i + $_sum91_i | 0; - var $1034 = $1033; - var $1035 = HEAP32[$1034 >> 2]; - var $_sum39_i_i = $tsize_242_i + 12 | 0; - var $_sum92_i = $_sum39_i_i + $991 | 0; - var $1036 = $tbase_243_i + $_sum92_i | 0; - var $1037 = $1036; - var $1038 = HEAP32[$1037 >> 2]; - var $1039 = ($1035 | 0) == ($1038 | 0); - if ($1039) { - var $1041 = 1 << $1030; - var $1042 = $1041 ^ -1; - var $1043 = HEAP32[(__gm_ | 0) >> 2]; - var $1044 = $1043 & $1042; - HEAP32[(__gm_ | 0) >> 2] = $1044; - } else { - var $1046 = $1025 >>> 2; - var $1047 = $1046 & 1073741822; - var $1048 = __gm_ + 40 + ($1047 << 2) | 0; - var $1049 = $1048; - var $1050 = ($1035 | 0) == ($1049 | 0); - do { - if ($1050) { - __label__ = 233; - } else { - var $1052 = $1035; - var $1053 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1054 = $1052 >>> 0 < $1053 >>> 0; - if ($1054) { - __label__ = 236; - break; - } - __label__ = 233; - break; - } - } while (0); - do { - if (__label__ == 233) { - var $1056 = ($1038 | 0) == ($1049 | 0); - if (!$1056) { - var $1058 = $1038; - var $1059 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1060 = $1058 >>> 0 < $1059 >>> 0; - if ($1060) { - break; - } - } - var $1061 = $1035 + 12 | 0; - HEAP32[$1061 >> 2] = $1038; - var $1062 = $1038 + 8 | 0; - HEAP32[$1062 >> 2] = $1035; - break $_$322; - } - } while (0); - _abort(); - } - } else { - var $1064 = $992; - var $_sum34_i_i = $991 | 24; - var $_sum82_i = $_sum34_i_i + $tsize_242_i | 0; - var $1065 = $tbase_243_i + $_sum82_i | 0; - var $1066 = $1065; - var $1067 = HEAP32[$1066 >> 2]; - var $_sum5_i_i = $tsize_242_i + 12 | 0; - var $_sum83_i = $_sum5_i_i + $991 | 0; - var $1068 = $tbase_243_i + $_sum83_i | 0; - var $1069 = $1068; - var $1070 = HEAP32[$1069 >> 2]; - var $1071 = ($1070 | 0) == ($1064 | 0); - do { - if ($1071) { - var $_sum67_i_i = $991 | 16; - var $_sum89_i = $_sum2_i18_i + $_sum67_i_i | 0; - var $1084 = $tbase_243_i + $_sum89_i | 0; - var $1085 = $1084; - var $1086 = HEAP32[$1085 >> 2]; - var $1087 = ($1086 | 0) == 0; - if ($1087) { - var $_sum90_i = $_sum67_i_i + $tsize_242_i | 0; - var $1089 = $tbase_243_i + $_sum90_i | 0; - var $1090 = $1089; - var $1091 = HEAP32[$1090 >> 2]; - var $1092 = ($1091 | 0) == 0; - if ($1092) { - var $R_1_i_i = 0; - break; - } - var $RP_0_i_i = $1090; - var $R_0_i_i = $1091; - } else { - var $RP_0_i_i = $1085; - var $R_0_i_i = $1086; - __label__ = 243; - } - while (1) { - var $R_0_i_i; - var $RP_0_i_i; - var $1093 = $R_0_i_i + 20 | 0; - var $1094 = HEAP32[$1093 >> 2]; - var $1095 = ($1094 | 0) == 0; - if (!$1095) { - var $RP_0_i_i = $1093; - var $R_0_i_i = $1094; - continue; - } - var $1097 = $R_0_i_i + 16 | 0; - var $1098 = HEAP32[$1097 >> 2]; - var $1099 = ($1098 | 0) == 0; - if ($1099) { - break; - } - var $RP_0_i_i = $1097; - var $R_0_i_i = $1098; - } - var $1101 = $RP_0_i_i; - var $1102 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1103 = $1101 >>> 0 < $1102 >>> 0; - if ($1103) { - _abort(); - } else { - HEAP32[$RP_0_i_i >> 2] = 0; - var $R_1_i_i = $R_0_i_i; - } - } else { - var $_sum3536_i_i = $991 | 8; - var $_sum84_i = $_sum3536_i_i + $tsize_242_i | 0; - var $1073 = $tbase_243_i + $_sum84_i | 0; - var $1074 = $1073; - var $1075 = HEAP32[$1074 >> 2]; - var $1076 = $1075; - var $1077 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1078 = $1076 >>> 0 < $1077 >>> 0; - if ($1078) { - _abort(); - } else { - var $1080 = $1075 + 12 | 0; - HEAP32[$1080 >> 2] = $1070; - var $1081 = $1070 + 8 | 0; - HEAP32[$1081 >> 2] = $1075; - var $R_1_i_i = $1070; - } - } - } while (0); - var $R_1_i_i; - var $1107 = ($1067 | 0) == 0; - if ($1107) { - break; - } - var $_sum30_i_i = $tsize_242_i + 28 | 0; - var $_sum85_i = $_sum30_i_i + $991 | 0; - var $1109 = $tbase_243_i + $_sum85_i | 0; - var $1110 = $1109; - var $1111 = HEAP32[$1110 >> 2]; - var $1112 = __gm_ + 304 + ($1111 << 2) | 0; - var $1113 = HEAP32[$1112 >> 2]; - var $1114 = ($1064 | 0) == ($1113 | 0); - do { - if ($1114) { - HEAP32[$1112 >> 2] = $R_1_i_i; - var $cond_i_i = ($R_1_i_i | 0) == 0; - if (!$cond_i_i) { - break; - } - var $1116 = HEAP32[$1110 >> 2]; - var $1117 = 1 << $1116; - var $1118 = $1117 ^ -1; - var $1119 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1120 = $1119 & $1118; - HEAP32[(__gm_ + 4 | 0) >> 2] = $1120; - break $_$322; - } - var $1122 = $1067; - var $1123 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1124 = $1122 >>> 0 < $1123 >>> 0; - if ($1124) { - _abort(); - } else { - var $1126 = $1067 + 16 | 0; - var $1127 = HEAP32[$1126 >> 2]; - var $1128 = ($1127 | 0) == ($1064 | 0); - if ($1128) { - HEAP32[$1126 >> 2] = $R_1_i_i; - } else { - var $1131 = $1067 + 20 | 0; - HEAP32[$1131 >> 2] = $R_1_i_i; - } - var $1134 = ($R_1_i_i | 0) == 0; - if ($1134) { - break $_$322; - } - } - } while (0); - var $1136 = $R_1_i_i; - var $1137 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1138 = $1136 >>> 0 < $1137 >>> 0; - if ($1138) { - _abort(); - } else { - var $1140 = $R_1_i_i + 24 | 0; - HEAP32[$1140 >> 2] = $1067; - var $_sum3132_i_i = $991 | 16; - var $_sum86_i = $_sum3132_i_i + $tsize_242_i | 0; - var $1141 = $tbase_243_i + $_sum86_i | 0; - var $1142 = $1141; - var $1143 = HEAP32[$1142 >> 2]; - var $1144 = ($1143 | 0) == 0; - if (!$1144) { - var $1146 = $1143; - var $1147 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1148 = $1146 >>> 0 < $1147 >>> 0; - if ($1148) { - _abort(); - } else { - var $1150 = $R_1_i_i + 16 | 0; - HEAP32[$1150 >> 2] = $1143; - var $1151 = $1143 + 24 | 0; - HEAP32[$1151 >> 2] = $R_1_i_i; - } - } - var $_sum87_i = $_sum2_i18_i + $_sum3132_i_i | 0; - var $1154 = $tbase_243_i + $_sum87_i | 0; - var $1155 = $1154; - var $1156 = HEAP32[$1155 >> 2]; - var $1157 = ($1156 | 0) == 0; - if ($1157) { - break; - } - var $1159 = $1156; - var $1160 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1161 = $1159 >>> 0 < $1160 >>> 0; - if ($1161) { - _abort(); - } else { - var $1163 = $R_1_i_i + 20 | 0; - HEAP32[$1163 >> 2] = $1156; - var $1164 = $1156 + 24 | 0; - HEAP32[$1164 >> 2] = $R_1_i_i; - } - } - } - } while (0); - var $_sum9_i_i = $1029 | $991; - var $_sum88_i = $_sum9_i_i + $tsize_242_i | 0; - var $1168 = $tbase_243_i + $_sum88_i | 0; - var $1169 = $1168; - var $1170 = $1029 + $999 | 0; - var $oldfirst_0_i_i = $1169; - var $qsize_0_i_i = $1170; - } else { - var $oldfirst_0_i_i = $993; - var $qsize_0_i_i = $999; - } - var $qsize_0_i_i; - var $oldfirst_0_i_i; - var $1172 = $oldfirst_0_i_i + 4 | 0; - var $1173 = HEAP32[$1172 >> 2]; - var $1174 = $1173 & -2; - HEAP32[$1172 >> 2] = $1174; - var $1175 = $qsize_0_i_i | 1; - var $_sum10_i_i = $_sum_i16_i + 4 | 0; - var $1176 = $tbase_243_i + $_sum10_i_i | 0; - var $1177 = $1176; - HEAP32[$1177 >> 2] = $1175; - var $_sum11_i19_i = $qsize_0_i_i + $_sum_i16_i | 0; - var $1178 = $tbase_243_i + $_sum11_i19_i | 0; - var $1179 = $1178; - HEAP32[$1179 >> 2] = $qsize_0_i_i; - var $1180 = $qsize_0_i_i >>> 0 < 256; - if ($1180) { - var $1182 = $qsize_0_i_i >>> 3; - var $1183 = $qsize_0_i_i >>> 2; - var $1184 = $1183 & 1073741822; - var $1185 = __gm_ + 40 + ($1184 << 2) | 0; - var $1186 = $1185; - var $1187 = HEAP32[(__gm_ | 0) >> 2]; - var $1188 = 1 << $1182; - var $1189 = $1187 & $1188; - var $1190 = ($1189 | 0) == 0; - do { - if ($1190) { - var $1192 = $1187 | $1188; - HEAP32[(__gm_ | 0) >> 2] = $1192; - var $_sum26_pre_i_i = $1184 + 2 | 0; - var $_pre_i_i = __gm_ + 40 + ($_sum26_pre_i_i << 2) | 0; - var $F4_0_i_i = $1186; - var $_pre_phi_i20_i = $_pre_i_i; - } else { - var $_sum29_i_i = $1184 + 2 | 0; - var $1194 = __gm_ + 40 + ($_sum29_i_i << 2) | 0; - var $1195 = HEAP32[$1194 >> 2]; - var $1196 = $1195; - var $1197 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1198 = $1196 >>> 0 < $1197 >>> 0; - if (!$1198) { - var $F4_0_i_i = $1195; - var $_pre_phi_i20_i = $1194; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i20_i; - var $F4_0_i_i; - HEAP32[$_pre_phi_i20_i >> 2] = $998; - var $1201 = $F4_0_i_i + 12 | 0; - HEAP32[$1201 >> 2] = $998; - var $_sum27_i_i = $_sum_i16_i + 8 | 0; - var $1202 = $tbase_243_i + $_sum27_i_i | 0; - var $1203 = $1202; - HEAP32[$1203 >> 2] = $F4_0_i_i; - var $_sum28_i_i = $_sum_i16_i + 12 | 0; - var $1204 = $tbase_243_i + $_sum28_i_i | 0; - var $1205 = $1204; - HEAP32[$1205 >> 2] = $1186; - } else { - var $1207 = $997; - var $1208 = $qsize_0_i_i >>> 8; - var $1209 = ($1208 | 0) == 0; - do { - if ($1209) { - var $I7_0_i_i = 0; - } else { - var $1211 = $qsize_0_i_i >>> 0 > 16777215; - if ($1211) { - var $I7_0_i_i = 31; - break; - } - var $1213 = $1208 + 1048320 | 0; - var $1214 = $1213 >>> 16; - var $1215 = $1214 & 8; - var $1216 = $1208 << $1215; - var $1217 = $1216 + 520192 | 0; - var $1218 = $1217 >>> 16; - var $1219 = $1218 & 4; - var $1220 = $1216 << $1219; - var $1221 = $1220 + 245760 | 0; - var $1222 = $1221 >>> 16; - var $1223 = $1222 & 2; - var $1224 = $1219 | $1215; - var $1225 = $1224 | $1223; - var $1226 = 14 - $1225 | 0; - var $1227 = $1220 << $1223; - var $1228 = $1227 >>> 15; - var $1229 = $1226 + $1228 | 0; - var $1230 = $1229 << 1; - var $1231 = $1229 + 7 | 0; - var $1232 = $qsize_0_i_i >>> ($1231 >>> 0); - var $1233 = $1232 & 1; - var $1234 = $1233 | $1230; - var $I7_0_i_i = $1234; - } - } while (0); - var $I7_0_i_i; - var $1236 = __gm_ + 304 + ($I7_0_i_i << 2) | 0; - var $_sum12_i_i = $_sum_i16_i + 28 | 0; - var $1237 = $tbase_243_i + $_sum12_i_i | 0; - var $1238 = $1237; - HEAP32[$1238 >> 2] = $I7_0_i_i; - var $_sum13_i_i = $_sum_i16_i + 16 | 0; - var $1239 = $tbase_243_i + $_sum13_i_i | 0; - var $_sum14_i_i = $_sum_i16_i + 20 | 0; - var $1240 = $tbase_243_i + $_sum14_i_i | 0; - var $1241 = $1240; - HEAP32[$1241 >> 2] = 0; - var $1242 = $1239; - HEAP32[$1242 >> 2] = 0; - var $1243 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1244 = 1 << $I7_0_i_i; - var $1245 = $1243 & $1244; - var $1246 = ($1245 | 0) == 0; - if ($1246) { - var $1248 = $1243 | $1244; - HEAP32[(__gm_ + 4 | 0) >> 2] = $1248; - HEAP32[$1236 >> 2] = $1207; - var $1249 = $1236; - var $_sum15_i_i = $_sum_i16_i + 24 | 0; - var $1250 = $tbase_243_i + $_sum15_i_i | 0; - var $1251 = $1250; - HEAP32[$1251 >> 2] = $1249; - var $_sum16_i_i = $_sum_i16_i + 12 | 0; - var $1252 = $tbase_243_i + $_sum16_i_i | 0; - var $1253 = $1252; - HEAP32[$1253 >> 2] = $1207; - var $_sum17_i_i = $_sum_i16_i + 8 | 0; - var $1254 = $tbase_243_i + $_sum17_i_i | 0; - var $1255 = $1254; - HEAP32[$1255 >> 2] = $1207; - } else { - var $1257 = HEAP32[$1236 >> 2]; - var $1258 = ($I7_0_i_i | 0) == 31; - if ($1258) { - var $1263 = 0; - } else { - var $1260 = $I7_0_i_i >>> 1; - var $1261 = 25 - $1260 | 0; - var $1263 = $1261; - } - var $1263; - var $1264 = $qsize_0_i_i << $1263; - var $K8_0_i_i = $1264; - var $T_0_i21_i = $1257; - while (1) { - var $T_0_i21_i; - var $K8_0_i_i; - var $1266 = $T_0_i21_i + 4 | 0; - var $1267 = HEAP32[$1266 >> 2]; - var $1268 = $1267 & -8; - var $1269 = ($1268 | 0) == ($qsize_0_i_i | 0); - if ($1269) { - var $1289 = $T_0_i21_i + 8 | 0; - var $1290 = HEAP32[$1289 >> 2]; - var $1291 = $T_0_i21_i; - var $1292 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1293 = $1291 >>> 0 < $1292 >>> 0; - do { - if (!$1293) { - var $1295 = $1290; - var $1296 = $1295 >>> 0 < $1292 >>> 0; - if ($1296) { - break; - } - var $1298 = $1290 + 12 | 0; - HEAP32[$1298 >> 2] = $1207; - HEAP32[$1289 >> 2] = $1207; - var $_sum20_i_i = $_sum_i16_i + 8 | 0; - var $1299 = $tbase_243_i + $_sum20_i_i | 0; - var $1300 = $1299; - HEAP32[$1300 >> 2] = $1290; - var $_sum21_i_i = $_sum_i16_i + 12 | 0; - var $1301 = $tbase_243_i + $_sum21_i_i | 0; - var $1302 = $1301; - HEAP32[$1302 >> 2] = $T_0_i21_i; - var $_sum22_i_i = $_sum_i16_i + 24 | 0; - var $1303 = $tbase_243_i + $_sum22_i_i | 0; - var $1304 = $1303; - HEAP32[$1304 >> 2] = 0; - break $_$314; - } - } while (0); - _abort(); - } else { - var $1271 = $K8_0_i_i >>> 31; - var $1272 = $T_0_i21_i + 16 + ($1271 << 2) | 0; - var $1273 = HEAP32[$1272 >> 2]; - var $1274 = ($1273 | 0) == 0; - var $1275 = $K8_0_i_i << 1; - if (!$1274) { - var $K8_0_i_i = $1275; - var $T_0_i21_i = $1273; - continue; - } - var $1277 = $1272; - var $1278 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1279 = $1277 >>> 0 < $1278 >>> 0; - if (!$1279) { - HEAP32[$1272 >> 2] = $1207; - var $_sum23_i_i = $_sum_i16_i + 24 | 0; - var $1281 = $tbase_243_i + $_sum23_i_i | 0; - var $1282 = $1281; - HEAP32[$1282 >> 2] = $T_0_i21_i; - var $_sum24_i_i = $_sum_i16_i + 12 | 0; - var $1283 = $tbase_243_i + $_sum24_i_i | 0; - var $1284 = $1283; - HEAP32[$1284 >> 2] = $1207; - var $_sum25_i_i = $_sum_i16_i + 8 | 0; - var $1285 = $tbase_243_i + $_sum25_i_i | 0; - var $1286 = $1285; - HEAP32[$1286 >> 2] = $1207; - break $_$314; - } - _abort(); - } - } - } - } - } - } - } while (0); - var $_sum1819_i_i = $981 | 8; - var $1305 = $tbase_243_i + $_sum1819_i_i | 0; - var $mem_0 = $1305; - break $_$215; - } - } while (0); - var $1306 = $876; - var $sp_0_i_i_i = __gm_ + 444 | 0; - while (1) { - var $sp_0_i_i_i; - var $1308 = $sp_0_i_i_i | 0; - var $1309 = HEAP32[$1308 >> 2]; - var $1310 = $1309 >>> 0 > $1306 >>> 0; - if (!$1310) { - var $1312 = $sp_0_i_i_i + 4 | 0; - var $1313 = HEAP32[$1312 >> 2]; - var $1314 = $1309 + $1313 | 0; - var $1315 = $1314 >>> 0 > $1306 >>> 0; - if ($1315) { - var $1321 = $1309; - var $1320 = $1313; - break; - } - } - var $1317 = $sp_0_i_i_i + 8 | 0; - var $1318 = HEAP32[$1317 >> 2]; - var $1319 = ($1318 | 0) == 0; - if (!$1319) { - var $sp_0_i_i_i = $1318; - continue; - } - var $_pre14_i_i = 4; - var $1321 = 0; - var $1320 = $_pre14_i_i; - break; - } - var $1320; - var $1321; - var $1322 = $1321 + $1320 | 0; - var $_sum1_i10_i = $1320 - 39 | 0; - var $1323 = $1321 + $_sum1_i10_i | 0; - var $1324 = $1323; - var $1325 = $1324 & 7; - var $1326 = ($1325 | 0) == 0; - if ($1326) { - var $1331 = 0; - } else { - var $1328 = -$1324 | 0; - var $1329 = $1328 & 7; - var $1331 = $1329; - } - var $1331; - var $_sum_i11_i = $1320 - 47 | 0; - var $_sum2_i12_i = $_sum_i11_i + $1331 | 0; - var $1332 = $1321 + $_sum2_i12_i | 0; - var $1333 = $876 + 16 | 0; - var $1334 = $1333; - var $1335 = $1332 >>> 0 < $1334 >>> 0; - var $1336 = $1335 ? $1306 : $1332; - var $1337 = $1336 + 8 | 0; - var $1338 = $1337; - var $1339 = $tbase_243_i + 8 | 0; - var $1340 = $1339; - var $1341 = $1340 & 7; - var $1342 = ($1341 | 0) == 0; - if ($1342) { - var $1346 = 0; - } else { - var $1344 = -$1340 | 0; - var $1345 = $1344 & 7; - var $1346 = $1345; - } - var $1346; - var $1347 = $tbase_243_i + $1346 | 0; - var $1348 = $1347; - var $1349 = $tsize_242_i - 40 | 0; - var $1350 = $1349 - $1346 | 0; - HEAP32[(__gm_ + 24 | 0) >> 2] = $1348; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1350; - var $1351 = $1350 | 1; - var $_sum_i_i_i = $1346 + 4 | 0; - var $1352 = $tbase_243_i + $_sum_i_i_i | 0; - var $1353 = $1352; - HEAP32[$1353 >> 2] = $1351; - var $_sum2_i_i_i = $tsize_242_i - 36 | 0; - var $1354 = $tbase_243_i + $_sum2_i_i_i | 0; - var $1355 = $1354; - HEAP32[$1355 >> 2] = 40; - var $1356 = HEAP32[(_mparams + 16 | 0) >> 2]; - HEAP32[(__gm_ + 28 | 0) >> 2] = $1356; - var $1357 = $1336 + 4 | 0; - var $1358 = $1357; - HEAP32[$1358 >> 2] = 27; - HEAP32[$1337 >> 2] = HEAP32[(__gm_ + 444 | 0) >> 2]; - HEAP32[$1337 + 4 >> 2] = HEAP32[(__gm_ + 444 | 0) + 4 >> 2]; - HEAP32[$1337 + 8 >> 2] = HEAP32[(__gm_ + 444 | 0) + 8 >> 2]; - HEAP32[$1337 + 12 >> 2] = HEAP32[(__gm_ + 444 | 0) + 12 >> 2]; - HEAP32[(__gm_ + 444 | 0) >> 2] = $tbase_243_i; - HEAP32[(__gm_ + 448 | 0) >> 2] = $tsize_242_i; - HEAP32[(__gm_ + 456 | 0) >> 2] = 0; - HEAP32[(__gm_ + 452 | 0) >> 2] = $1338; - var $1359 = $1336 + 28 | 0; - var $1360 = $1359; - HEAP32[$1360 >> 2] = 7; - var $1361 = $1336 + 32 | 0; - var $1362 = $1361 >>> 0 < $1322 >>> 0; - $_$426 : do { - if ($1362) { - var $1363 = $1360; - while (1) { - var $1363; - var $1364 = $1363 + 4 | 0; - HEAP32[$1364 >> 2] = 7; - var $1365 = $1363 + 8 | 0; - var $1366 = $1365; - var $1367 = $1366 >>> 0 < $1322 >>> 0; - if (!$1367) { - break $_$426; - } - var $1363 = $1364; - } - } - } while (0); - var $1368 = ($1336 | 0) == ($1306 | 0); - if ($1368) { - break; - } - var $1370 = $1336; - var $1371 = $876; - var $1372 = $1370 - $1371 | 0; - var $1373 = $1306 + $1372 | 0; - var $_sum3_i_i = $1372 + 4 | 0; - var $1374 = $1306 + $_sum3_i_i | 0; - var $1375 = $1374; - var $1376 = HEAP32[$1375 >> 2]; - var $1377 = $1376 & -2; - HEAP32[$1375 >> 2] = $1377; - var $1378 = $1372 | 1; - var $1379 = $876 + 4 | 0; - HEAP32[$1379 >> 2] = $1378; - var $1380 = $1373; - HEAP32[$1380 >> 2] = $1372; - var $1381 = $1372 >>> 0 < 256; - if ($1381) { - var $1383 = $1372 >>> 3; - var $1384 = $1372 >>> 2; - var $1385 = $1384 & 1073741822; - var $1386 = __gm_ + 40 + ($1385 << 2) | 0; - var $1387 = $1386; - var $1388 = HEAP32[(__gm_ | 0) >> 2]; - var $1389 = 1 << $1383; - var $1390 = $1388 & $1389; - var $1391 = ($1390 | 0) == 0; - do { - if ($1391) { - var $1393 = $1388 | $1389; - HEAP32[(__gm_ | 0) >> 2] = $1393; - var $_sum10_pre_i_i = $1385 + 2 | 0; - var $_pre15_i_i = __gm_ + 40 + ($_sum10_pre_i_i << 2) | 0; - var $F_0_i_i = $1387; - var $_pre_phi_i_i = $_pre15_i_i; - } else { - var $_sum11_i_i = $1385 + 2 | 0; - var $1395 = __gm_ + 40 + ($_sum11_i_i << 2) | 0; - var $1396 = HEAP32[$1395 >> 2]; - var $1397 = $1396; - var $1398 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1399 = $1397 >>> 0 < $1398 >>> 0; - if (!$1399) { - var $F_0_i_i = $1396; - var $_pre_phi_i_i = $1395; - break; - } - _abort(); - } - } while (0); - var $_pre_phi_i_i; - var $F_0_i_i; - HEAP32[$_pre_phi_i_i >> 2] = $876; - var $1402 = $F_0_i_i + 12 | 0; - HEAP32[$1402 >> 2] = $876; - var $1403 = $876 + 8 | 0; - HEAP32[$1403 >> 2] = $F_0_i_i; - var $1404 = $876 + 12 | 0; - HEAP32[$1404 >> 2] = $1387; - } else { - var $1406 = $876; - var $1407 = $1372 >>> 8; - var $1408 = ($1407 | 0) == 0; - do { - if ($1408) { - var $I1_0_i_i = 0; - } else { - var $1410 = $1372 >>> 0 > 16777215; - if ($1410) { - var $I1_0_i_i = 31; - break; - } - var $1412 = $1407 + 1048320 | 0; - var $1413 = $1412 >>> 16; - var $1414 = $1413 & 8; - var $1415 = $1407 << $1414; - var $1416 = $1415 + 520192 | 0; - var $1417 = $1416 >>> 16; - var $1418 = $1417 & 4; - var $1419 = $1415 << $1418; - var $1420 = $1419 + 245760 | 0; - var $1421 = $1420 >>> 16; - var $1422 = $1421 & 2; - var $1423 = $1418 | $1414; - var $1424 = $1423 | $1422; - var $1425 = 14 - $1424 | 0; - var $1426 = $1419 << $1422; - var $1427 = $1426 >>> 15; - var $1428 = $1425 + $1427 | 0; - var $1429 = $1428 << 1; - var $1430 = $1428 + 7 | 0; - var $1431 = $1372 >>> ($1430 >>> 0); - var $1432 = $1431 & 1; - var $1433 = $1432 | $1429; - var $I1_0_i_i = $1433; - } - } while (0); - var $I1_0_i_i; - var $1435 = __gm_ + 304 + ($I1_0_i_i << 2) | 0; - var $1436 = $876 + 28 | 0; - var $I1_0_c_i_i = $I1_0_i_i; - HEAP32[$1436 >> 2] = $I1_0_c_i_i; - var $1437 = $876 + 20 | 0; - HEAP32[$1437 >> 2] = 0; - var $1438 = $876 + 16 | 0; - HEAP32[$1438 >> 2] = 0; - var $1439 = HEAP32[(__gm_ + 4 | 0) >> 2]; - var $1440 = 1 << $I1_0_i_i; - var $1441 = $1439 & $1440; - var $1442 = ($1441 | 0) == 0; - if ($1442) { - var $1444 = $1439 | $1440; - HEAP32[(__gm_ + 4 | 0) >> 2] = $1444; - HEAP32[$1435 >> 2] = $1406; - var $1445 = $876 + 24 | 0; - var $_c_i_i = $1435; - HEAP32[$1445 >> 2] = $_c_i_i; - var $1446 = $876 + 12 | 0; - HEAP32[$1446 >> 2] = $876; - var $1447 = $876 + 8 | 0; - HEAP32[$1447 >> 2] = $876; - } else { - var $1449 = HEAP32[$1435 >> 2]; - var $1450 = ($I1_0_i_i | 0) == 31; - if ($1450) { - var $1455 = 0; - } else { - var $1452 = $I1_0_i_i >>> 1; - var $1453 = 25 - $1452 | 0; - var $1455 = $1453; - } - var $1455; - var $1456 = $1372 << $1455; - var $K2_0_i_i = $1456; - var $T_0_i_i = $1449; - while (1) { - var $T_0_i_i; - var $K2_0_i_i; - var $1458 = $T_0_i_i + 4 | 0; - var $1459 = HEAP32[$1458 >> 2]; - var $1460 = $1459 & -8; - var $1461 = ($1460 | 0) == ($1372 | 0); - if ($1461) { - var $1478 = $T_0_i_i + 8 | 0; - var $1479 = HEAP32[$1478 >> 2]; - var $1480 = $T_0_i_i; - var $1481 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1482 = $1480 >>> 0 < $1481 >>> 0; - do { - if (!$1482) { - var $1484 = $1479; - var $1485 = $1484 >>> 0 < $1481 >>> 0; - if ($1485) { - break; - } - var $1487 = $1479 + 12 | 0; - HEAP32[$1487 >> 2] = $1406; - HEAP32[$1478 >> 2] = $1406; - var $1488 = $876 + 8 | 0; - var $_c6_i_i = $1479; - HEAP32[$1488 >> 2] = $_c6_i_i; - var $1489 = $876 + 12 | 0; - var $T_0_c_i_i = $T_0_i_i; - HEAP32[$1489 >> 2] = $T_0_c_i_i; - var $1490 = $876 + 24 | 0; - HEAP32[$1490 >> 2] = 0; - break $_$275; - } - } while (0); - _abort(); - } else { - var $1463 = $K2_0_i_i >>> 31; - var $1464 = $T_0_i_i + 16 + ($1463 << 2) | 0; - var $1465 = HEAP32[$1464 >> 2]; - var $1466 = ($1465 | 0) == 0; - var $1467 = $K2_0_i_i << 1; - if (!$1466) { - var $K2_0_i_i = $1467; - var $T_0_i_i = $1465; - continue; - } - var $1469 = $1464; - var $1470 = HEAP32[(__gm_ + 16 | 0) >> 2]; - var $1471 = $1469 >>> 0 < $1470 >>> 0; - if (!$1471) { - HEAP32[$1464 >> 2] = $1406; - var $1473 = $876 + 24 | 0; - var $T_0_c7_i_i = $T_0_i_i; - HEAP32[$1473 >> 2] = $T_0_c7_i_i; - var $1474 = $876 + 12 | 0; - HEAP32[$1474 >> 2] = $876; - var $1475 = $876 + 8 | 0; - HEAP32[$1475 >> 2] = $876; - break $_$275; - } - _abort(); - } - } - } - } - } - } while (0); - var $1491 = HEAP32[(__gm_ + 12 | 0) >> 2]; - var $1492 = $1491 >>> 0 > $nb_0 >>> 0; - if (!$1492) { - break; - } - var $1494 = $1491 - $nb_0 | 0; - HEAP32[(__gm_ + 12 | 0) >> 2] = $1494; - var $1495 = HEAP32[(__gm_ + 24 | 0) >> 2]; - var $1496 = $1495; - var $1497 = $1496 + $nb_0 | 0; - var $1498 = $1497; - HEAP32[(__gm_ + 24 | 0) >> 2] = $1498; - var $1499 = $1494 | 1; - var $_sum_i30 = $nb_0 + 4 | 0; - var $1500 = $1496 + $_sum_i30 | 0; - var $1501 = $1500; - HEAP32[$1501 >> 2] = $1499; - var $1502 = $nb_0 | 3; - var $1503 = $1495 + 4 | 0; - HEAP32[$1503 >> 2] = $1502; - var $1504 = $1495 + 8 | 0; - var $1505 = $1504; - var $mem_0 = $1505; - break $_$215; - } - } while (0); - var $1506 = ___errno(); - HEAP32[$1506 >> 2] = 12; - var $mem_0 = 0; - } - } else { - var $706 = $703 - $nb_0 | 0; - var $707 = HEAP32[(__gm_ + 20 | 0) >> 2]; - var $708 = $706 >>> 0 > 15; - if ($708) { - var $710 = $707; - var $711 = $710 + $nb_0 | 0; - var $712 = $711; - HEAP32[(__gm_ + 20 | 0) >> 2] = $712; - HEAP32[(__gm_ + 8 | 0) >> 2] = $706; - var $713 = $706 | 1; - var $_sum2 = $nb_0 + 4 | 0; - var $714 = $710 + $_sum2 | 0; - var $715 = $714; - HEAP32[$715 >> 2] = $713; - var $716 = $710 + $703 | 0; - var $717 = $716; - HEAP32[$717 >> 2] = $706; - var $718 = $nb_0 | 3; - var $719 = $707 + 4 | 0; - HEAP32[$719 >> 2] = $718; - } else { - HEAP32[(__gm_ + 8 | 0) >> 2] = 0; - HEAP32[(__gm_ + 20 | 0) >> 2] = 0; - var $721 = $703 | 3; - var $722 = $707 + 4 | 0; - HEAP32[$722 >> 2] = $721; - var $723 = $707; - var $_sum1 = $703 + 4 | 0; - var $724 = $723 + $_sum1 | 0; - var $725 = $724; - var $726 = HEAP32[$725 >> 2]; - var $727 = $726 | 1; - HEAP32[$725 >> 2] = $727; - } - var $729 = $707 + 8 | 0; - var $730 = $729; - var $mem_0 = $730; - } - } - } while (0); - var $mem_0; - return $mem_0; - return null; -} -function asm(x, y) { // asm-style code, without special asm requested so will not be fully optimized - x = +x; - y = y|0; - var a = 0, b = +0, c = 0; - var label = 0; - a = cheez((y+~~x)|0)|0; - b = a*a; - fleefl(b|0, a|0); -} -function phi() { - if (wat()) { - var $10 = 1; - } else { - var $7=_init_mparams(); - var $8=(($7)|0)!=0; - var $10 = $8; - } - var $10; -} -function intoCond() { - var $115 = 22; - var $499 = __ZN4llvm15BitstreamCursor4ReadEj($117, 32); - var $NumWords = $499; - var $500 = $115; - var $501 = ($500 | 0) != 0; - if ($501) { - var $503 = $NumWords; - var $504 = $115; - HEAP32[$504 >> 2] = $503; - } -} -function math(a, b, c, d) { - var x, y, z, w; - x = a; - y = Math_abs(b); - z = Math_fround(c); - w = Math_imul(d); - print(x + y + z + w); -} -function td(x, y) { // tempDoublePtr should invalidate each other - HEAP32[tempDoublePtr>>2] = x; - var xf = HEAPF32[tempDoublePtr>>2]; - HEAP32[tempDoublePtr>>2] = y; - var yf = HEAPF32[tempDoublePtr>>2]; - func(xf, yf); - // - HEAPF64[tempDoublePtr>>3] = x; - var xl = HEAP32[tempDoublePtr>>2]; - var xh = HEAP32[tempDoublePtr>>2]; - HEAPF64[tempDoublePtr>>3] = y; - var yl = HEAP32[tempDoublePtr>>2]; - var yh = HEAP32[tempDoublePtr>>2]; - func(xl, xh, yl, yh); -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["a", "b", "c", "f", "g", "h", "py", "r", "t", "f2", "f3", "llvm3_1", "_inflate", "_malloc", "_mallocNoU", "asm", "phi", "intoCond", "math", "td"] - diff --git a/tests/optimizer/null_else-output.js b/tests/optimizer/null_else-output.js deleted file mode 100644 index a60712cf38f0a..0000000000000 --- a/tests/optimizer/null_else-output.js +++ /dev/null @@ -1 +0,0 @@ -function _main(){if(c())if(d())e()} diff --git a/tests/optimizer/null_else-output2.js b/tests/optimizer/null_else-output2.js deleted file mode 100644 index b981ba58b7482..0000000000000 --- a/tests/optimizer/null_else-output2.js +++ /dev/null @@ -1 +0,0 @@ -function _main(){if(c())if(d())e();else{}} diff --git a/tests/optimizer/null_else.js b/tests/optimizer/null_else.js deleted file mode 100644 index 45d6bdc96cc58..0000000000000 --- a/tests/optimizer/null_else.js +++ /dev/null @@ -1,12 +0,0 @@ -function _main() { - if (c()) { - if (d()) { - e(); - } else { - if (0) { - } - } - } -} -// EMSCRIPTEN_GENERATED_FUNCTIONS - diff --git a/tests/optimizer/null_if-output.js b/tests/optimizer/null_if-output.js deleted file mode 100644 index 23cb67dd01908..0000000000000 --- a/tests/optimizer/null_if-output.js +++ /dev/null @@ -1 +0,0 @@ -function _main(){} diff --git a/tests/optimizer/null_if-output2.js b/tests/optimizer/null_if-output2.js deleted file mode 100644 index 01ab890cc84c3..0000000000000 --- a/tests/optimizer/null_if-output2.js +++ /dev/null @@ -1,2 +0,0 @@ -function _main(){if(a){}} - diff --git a/tests/optimizer/null_if.js b/tests/optimizer/null_if.js deleted file mode 100644 index 003277d26fe00..0000000000000 --- a/tests/optimizer/null_if.js +++ /dev/null @@ -1,8 +0,0 @@ -function _main() { - if (a) { - if (b) { - } - } -} -// EMSCRIPTEN_GENERATED_FUNCTIONS - diff --git a/tests/optimizer/safe-eliminator-test-output.js b/tests/optimizer/safe-eliminator-test-output.js deleted file mode 100644 index 36b0bb1f9ab48..0000000000000 --- a/tests/optimizer/safe-eliminator-test-output.js +++ /dev/null @@ -1,85 +0,0 @@ -function a($directory) { - chak($directory + _strlen($directory) | 0); - var $210 = HEAP32[100]; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $210; - chak(); - var $210a = HEAP32[100]; - something(); - HEAP32[90] = $210a; - chak(); - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $hack; - chak(); - var $b = HEAP32[11] + 7 | 0; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $b; - chak(); - var $bb2 = HEAP32[11]; - HEAP32[111] = 321; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $bb2 + 7 | 0; - chak(); - HEAP32[1e3] = HEAP32[100]; - chak(); - var $e = func(); - HEAP32[1e3] = $e; - chak(); - tor(func()); - chak(); - tor(HEAP[9]); - barrier(); - var $$210, $$210a, $$b, $$bb2, $$e; - $$210 = HEAP32[100]; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$210; - chak(); - $$210a = HEAP32[100]; - something(); - HEAP32[90] = $$210a; - chak(); - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$hack; - chak(); - $$b = HEAP32[11] + 7 | 0; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$b; - chak(); - $$bb2 = HEAP32[11]; - HEAP32[111] = 321; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$bb2 + 7 | 0; - chak(); - HEAP32[1e3] = HEAP32[100]; - chak(); - $$e = func(); - HEAP32[1e3] = $$e; - chak(); - tor(func()); - chak(); - tor(HEAP[9]); - barrier(); - var $65, $image, $51$s2, $71; - var $71 = HEAP32[$65 >> 2] - _int_ceildiv(HEAP32[$image >> 2], HEAP32[$51$s2]) | 0; - HEAP32[$65 >> 2] = _int_ceildivpow2($71, HEAP32[$51$s2 + 10]); - barr(); - var ONCE = sheep(); - while (ONCE) { - work(); - } - var ONCEb = 75; - while (ONCEb) { - work(); - } - var $26 = __ZL3minIiET_S0_S0_12(4096, 4096 - $16 | 0); - print(FUNCTION_TABLE[$22]($18, $16 + ($this + 27) | 0, $26)); - chak(); - do { - print(10); - } while (0); - var zzz1 = 10; - do { - print(zzz1); - } while (1); -} - diff --git a/tests/optimizer/safe-eliminator-test.js b/tests/optimizer/safe-eliminator-test.js deleted file mode 100644 index d7bfdeccef021..0000000000000 --- a/tests/optimizer/safe-eliminator-test.js +++ /dev/null @@ -1,103 +0,0 @@ -function a($directory) { - var $1 = _strlen($directory); - var $p_0 = $directory + $1 | 0; - chak($p_0); - var $210 = HEAP32[100]; // heaps alias each other! so this cannot be eliminated - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $210; - chak(); - var $210a = HEAP32[100]; // function calls can also modify memory - something(); - HEAP32[90] = $210a; - chak(); - var $a = $hack; // no mem use (just a global), so ok to eliminate - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $a; - chak(); - var $bb = HEAP32[11]; // ok to eliminate - var $b = ($bb+7)|0; // ok to eliminate by itself, but not with inlined $bb which is mem-using! - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $b; - chak(); - var $bb2 = HEAP32[11]; - HEAP32[111] = 321; - var $b2 = ($bb2+7)|0; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $b2; - chak(); - var $d = HEAP32[100]; // alias on next line, but that is where we are consumed - so ok. - HEAP32[1e3] = $d; - chak(); - var $e = func(); - HEAP32[1e3] = $e; - chak(); - var $e2 = func(); - tor($e2); - chak(); - var $e3 = HEAP[9]; - tor($e3); - barrier(); // same stuff, but with a var on top and assigns as the first and only def - var $$210, $$210a, $$a, $$bb, $$b, $$bb2, $$b2, $$d, $$e, $$e2, $$e3; - $$210 = HEAP32[100]; // heaps alias each other! so this cannot be eliminated - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$210; - chak(); - $$210a = HEAP32[100]; // function calls can also modify memory - something(); - HEAP32[90] = $$210a; - chak(); - $$a = $$hack; // no mem use, so ok to eliminate - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$a; - chak(); - $$bb = HEAP32[11]; // ok to eliminate - $$b = ($$bb+7)|0; // ok to eliminate by itself, but not with inlined $$bb which is mem-using! - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$b; - chak(); - $$bb2 = HEAP32[11]; - HEAP32[111] = 321; - $$b2 = ($$bb2+7)|0; - HEAP32[1e3] = HEAP32[5]; - HEAP32[90] = $$b2; - chak(); - $$d = HEAP32[100]; // alias on next line, but that is where we are consumed - so ok. - HEAP32[1e3] = $$d; - chak(); - $$e = func(); - HEAP32[1e3] = $$e; - chak(); - $$e2 = func(); - tor($$e2); - chak(); - $$e3 = HEAP[9]; - tor($$e3); - barrier(); - var $65, $image, $51$s2, $71; - var $66 = HEAP32[$65 >> 2]; - var $71 = $66 - _int_ceildiv(HEAP32[$image >> 2], HEAP32[$51$s2]) | 0; - HEAP32[$65 >> 2] = _int_ceildivpow2($71, HEAP32[$51$s2 + 10]); - barr(); - var ONCE = sheep(); - while (ONCE) { - work(); - } - var ONCEb = 75; - while (ONCEb) { - work(); - } - var $26 = __ZL3minIiET_S0_S0_12(4096, 4096 - $16 | 0); // cannot eliminate this because the call might modify FUNCTION_TABLE - var $27 = FUNCTION_TABLE[$22]($18, $this + ($16 + 27) | 0, $26); - print($27); - chak(); - var zzz = 10; - do { - print(zzz); - } while (0); - var zzz1 = 10; - do { - print(zzz1); - } while (1); // cannot eliminate a do-while that is not one-time -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["a"] - diff --git a/tests/optimizer/safeLabelSetting-output.js b/tests/optimizer/safeLabelSetting-output.js deleted file mode 100644 index b1accfe51d23a..0000000000000 --- a/tests/optimizer/safeLabelSetting-output.js +++ /dev/null @@ -1,18 +0,0 @@ -function z1() { - var i = 0, j = 0; - print(i); -} -function z2() { - var i = 0, label = 0; - label = 0; - print(i); -} -function z3() { - var i = 0, label = 0; -} -function z4() { - var label = 0; - label = 0; - print(0); -} - diff --git a/tests/optimizer/safeLabelSetting.js b/tests/optimizer/safeLabelSetting.js deleted file mode 100644 index d3c30153706a5..0000000000000 --- a/tests/optimizer/safeLabelSetting.js +++ /dev/null @@ -1,17 +0,0 @@ -function z1() { - var i = 0, j = 0; - print(i); -} -function z2() { - var i = 0, label = 0; - print(i); -} -function z3() { - var i = 0, label = 0; -} -function z4() { - var label = 0; - print(0); -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["z1", "z2", "z3", "z4"] - diff --git a/tests/optimizer/test-function-eliminator-double-parsed-correctly-output.js b/tests/optimizer/test-function-eliminator-double-parsed-correctly-output.js deleted file mode 100644 index 4474be7ad1864..0000000000000 --- a/tests/optimizer/test-function-eliminator-double-parsed-correctly-output.js +++ /dev/null @@ -1,15 +0,0 @@ -// EMSCRIPTEN_START_ASM -var asm = (function(global, env, buffer) { - "use asm"; - var tempDouble = 0.0; - var e = 0; - -// EMSCRIPTEN_START_FUNCS -function a() { - var c = 0.0; - return 0; -} -// EMSCRIPTEN_END_FUNCS - var f = 0; -})(asmGlobalArg, asmLibraryArg, buffer); -// EMSCRIPTEN_END_ASM diff --git a/tests/optimizer/test-function-eliminator-double-parsed-correctly.js b/tests/optimizer/test-function-eliminator-double-parsed-correctly.js deleted file mode 100644 index b52c16a5b72f0..0000000000000 --- a/tests/optimizer/test-function-eliminator-double-parsed-correctly.js +++ /dev/null @@ -1,23 +0,0 @@ -// EMSCRIPTEN_START_ASM -var asm = (function(global, env, buffer) { - "use asm"; - var tempDouble = 0.0; - var e = 0; - -// EMSCRIPTEN_START_FUNCS - function a() { - var c = +0; - return 0; - } - function b() { - var c = +0; - return 0; - } -// EMSCRIPTEN_END_FUNCS - var f = 0; -})(asmGlobalArg, asmLibraryArg, buffer); -// EMSCRIPTEN_END_ASM -// EMSCRIPTEN_GENERATED_FUNCTIONS - - - diff --git a/tests/optimizer/test-function-eliminator-replace-array-value-output.js b/tests/optimizer/test-function-eliminator-replace-array-value-output.js deleted file mode 100644 index ef758c9666e1c..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-array-value-output.js +++ /dev/null @@ -1,25 +0,0 @@ -// EMSCRIPTEN_START_ASM -var asm = (function(global, env, buffer) { - "use asm"; - -// EMSCRIPTEN_START_FUNCS -function d() { - a(); - e(); - return; -} - -function c() { - a(); - return; -} - -function a() { - return 0; -} - -// EMSCRIPTEN_END_FUNCS - - var f = [ a ]; -})(asmGlobalArg, asmLibraryArg, buffer); -// EMSCRIPTEN_END_ASM diff --git a/tests/optimizer/test-function-eliminator-replace-array-value-with-hash-info.js b/tests/optimizer/test-function-eliminator-replace-array-value-with-hash-info.js deleted file mode 100644 index d7767ef98b05f..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-array-value-with-hash-info.js +++ /dev/null @@ -1,32 +0,0 @@ -var asm = (function(global, env, buffer) { -"use asm"; -function a() -{ -return 0; -} - -function b() -{ -return 0; -} - -function c() -{ - a(); - return; -} - -function d() -{ - b(); - - // We expect that b gets replaced by a below - var f = [b]; - e(); - - return; -} - -})(asmGlobalArg, asmLibraryArg, buffer); - -// {"b":"a"} diff --git a/tests/optimizer/test-function-eliminator-replace-array-value.js b/tests/optimizer/test-function-eliminator-replace-array-value.js deleted file mode 100644 index 97b3b1a05b8a9..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-array-value.js +++ /dev/null @@ -1,23 +0,0 @@ -// EMSCRIPTEN_START_ASM -var asm = (function(global, env, buffer) { - "use asm"; -// EMSCRIPTEN_START_FUNCS - function a() { - return 0; - } - function b() { - return 0; - } - function c() { - a(); - return; - } - function d() { - b(); - e(); - return; - } -// EMSCRIPTEN_END_FUNCS - var f = [ b ]; -})(asmGlobalArg, asmLibraryArg, buffer); -// EMSCRIPTEN_END_ASM \ No newline at end of file diff --git a/tests/optimizer/test-function-eliminator-replace-function-call-output-with-hash-info.js b/tests/optimizer/test-function-eliminator-replace-function-call-output-with-hash-info.js deleted file mode 100644 index 197477bf64997..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-function-call-output-with-hash-info.js +++ /dev/null @@ -1,22 +0,0 @@ -var asm = (function(global, env, buffer) { -"use asm"; -function a() -{ -return 0; -} - -function c() -{ - a(); - return; -} - -function d() -{ - a(); - return; -} - -})(asmGlobalArg, asmLibraryArg, buffer); - -// {"d":"c"} diff --git a/tests/optimizer/test-function-eliminator-replace-function-call-output.js b/tests/optimizer/test-function-eliminator-replace-function-call-output.js deleted file mode 100644 index dca1a35085fc0..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-function-call-output.js +++ /dev/null @@ -1,14 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function c() { - a(); - return; - } - function d() { - a(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); diff --git a/tests/optimizer/test-function-eliminator-replace-function-call-two-passes-output.js b/tests/optimizer/test-function-eliminator-replace-function-call-two-passes-output.js deleted file mode 100644 index eddf4d966bcdb..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-function-call-two-passes-output.js +++ /dev/null @@ -1,10 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function c() { - a(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); diff --git a/tests/optimizer/test-function-eliminator-replace-function-call-with-hash-info.js b/tests/optimizer/test-function-eliminator-replace-function-call-with-hash-info.js deleted file mode 100644 index b00f702b50f15..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-function-call-with-hash-info.js +++ /dev/null @@ -1,27 +0,0 @@ -var asm = (function(global, env, buffer) { -"use asm"; -function a() -{ -return 0; -} - -function b() -{ -return 0; -} - -function c() -{ - a(); - return; -} - -function d() -{ - b(); - return; -} - -})(asmGlobalArg, asmLibraryArg, buffer); - -// {"b":"a"} diff --git a/tests/optimizer/test-function-eliminator-replace-function-call.js b/tests/optimizer/test-function-eliminator-replace-function-call.js deleted file mode 100644 index 13c4e82b52476..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-function-call.js +++ /dev/null @@ -1,20 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function b() { - return 0; - } - function c() { - a(); - return; - } - function d() { - b(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); - - - diff --git a/tests/optimizer/test-function-eliminator-replace-object-value-assignment-output.js b/tests/optimizer/test-function-eliminator-replace-object-value-assignment-output.js deleted file mode 100644 index 408f35c715df5..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-object-value-assignment-output.js +++ /dev/null @@ -1,18 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function c() { - a(); - return; - } - function d() { - a(); - var f = { - g: a - }; - e(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); diff --git a/tests/optimizer/test-function-eliminator-replace-object-value-assignment-with-hash-info.js b/tests/optimizer/test-function-eliminator-replace-object-value-assignment-with-hash-info.js deleted file mode 100644 index 2353b2ab2a116..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-object-value-assignment-with-hash-info.js +++ /dev/null @@ -1,34 +0,0 @@ -var asm = (function(global, env, buffer) { -"use asm"; -function a() -{ -return 0; -} - -function b() -{ -return 0; -} - -function c() -{ - a(); - return; -} - -function d() -{ - b(); - - // We expect that b gets replaced by a below - var f = { - g: b - }; - e(); - - return; -} - -})(asmGlobalArg, asmLibraryArg, buffer); - -// {"b":"a"} diff --git a/tests/optimizer/test-function-eliminator-replace-object-value-assignment.js b/tests/optimizer/test-function-eliminator-replace-object-value-assignment.js deleted file mode 100644 index ad22470deb524..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-object-value-assignment.js +++ /dev/null @@ -1,24 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function b() { - return 0; - } - function c() { - a(); - return; - } - function d() { - b(); - var f = { - g: b - }; - e(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); - - - diff --git a/tests/optimizer/test-function-eliminator-replace-variable-value-output.js b/tests/optimizer/test-function-eliminator-replace-variable-value-output.js deleted file mode 100644 index 12ae7bddafa92..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-variable-value-output.js +++ /dev/null @@ -1,16 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function c() { - a(); - return; - } - function d() { - a(); - var e = a; - e(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); diff --git a/tests/optimizer/test-function-eliminator-replace-variable-value-with-hash-info.js b/tests/optimizer/test-function-eliminator-replace-variable-value-with-hash-info.js deleted file mode 100644 index b83bb87555306..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-variable-value-with-hash-info.js +++ /dev/null @@ -1,32 +0,0 @@ -var asm = (function(global, env, buffer) { -"use asm"; -function a() -{ -return 0; -} - -function b() -{ -return 0; -} - -function c() -{ - a(); - return; -} - -function d() -{ - b(); - - // We expect that b gets replaced by a below - var e = b; - e(); - - return; -} - -})(asmGlobalArg, asmLibraryArg, buffer); - -// {"b" : "a"} diff --git a/tests/optimizer/test-function-eliminator-replace-variable-value.js b/tests/optimizer/test-function-eliminator-replace-variable-value.js deleted file mode 100644 index 88857bc14b166..0000000000000 --- a/tests/optimizer/test-function-eliminator-replace-variable-value.js +++ /dev/null @@ -1,22 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function b() { - return 0; - } - function c() { - a(); - return; - } - function d() { - b(); - var e = b; - e(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); - - - diff --git a/tests/optimizer/test-function-eliminator-simple-output.js b/tests/optimizer/test-function-eliminator-simple-output.js deleted file mode 100644 index af36faa7fbadf..0000000000000 --- a/tests/optimizer/test-function-eliminator-simple-output.js +++ /dev/null @@ -1,6 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } -})(asmGlobalArg, asmLibraryArg, buffer); diff --git a/tests/optimizer/test-function-eliminator-simple-with-hash-info.js b/tests/optimizer/test-function-eliminator-simple-with-hash-info.js deleted file mode 100644 index db26163368b5a..0000000000000 --- a/tests/optimizer/test-function-eliminator-simple-with-hash-info.js +++ /dev/null @@ -1,15 +0,0 @@ -var asm = (function(global, env, buffer) { -"use asm"; -function a() -{ -return 0; -} - -function b() -{ -return 0; -} - -})(asmGlobalArg, asmLibraryArg, buffer); - -// {"b":"a"} diff --git a/tests/optimizer/test-function-eliminator-simple.js b/tests/optimizer/test-function-eliminator-simple.js deleted file mode 100644 index 0cce7dd7607cf..0000000000000 --- a/tests/optimizer/test-function-eliminator-simple.js +++ /dev/null @@ -1,12 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function b() { - return 0; - } -})(asmGlobalArg, asmLibraryArg, buffer); - - - diff --git a/tests/optimizer/test-function-eliminator-variable-clash-output.js b/tests/optimizer/test-function-eliminator-variable-clash-output.js deleted file mode 100644 index 6a57a9b06930e..0000000000000 --- a/tests/optimizer/test-function-eliminator-variable-clash-output.js +++ /dev/null @@ -1,18 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function b() { - return 0; - } - function c() { - a(); - return; - } - function d() { - var a = 0; - b(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); diff --git a/tests/optimizer/test-function-eliminator-variable-clash-with-hash-info.js b/tests/optimizer/test-function-eliminator-variable-clash-with-hash-info.js deleted file mode 100644 index c141252b5eebc..0000000000000 --- a/tests/optimizer/test-function-eliminator-variable-clash-with-hash-info.js +++ /dev/null @@ -1,31 +0,0 @@ -var asm = (function(global, env, buffer) { -"use asm"; -function a() -{ -return 0; -} - -function b() -{ -return 0; -} - -function c() -{ - a(); - return; -} - -function d() -{ - // Because a is used both as a variable and a function, we will - // not use a as a candidate for replacement, nor will we replace - // calls to b with a. - var a = 0; - b(); - return; -} - -})(asmGlobalArg, asmLibraryArg, buffer); - -// {} diff --git a/tests/optimizer/test-function-eliminator-variable-clash.js b/tests/optimizer/test-function-eliminator-variable-clash.js deleted file mode 100644 index 60effd4b6a4e5..0000000000000 --- a/tests/optimizer/test-function-eliminator-variable-clash.js +++ /dev/null @@ -1,21 +0,0 @@ -var asm = (function(global, env, buffer) { - "use asm"; - function a() { - return 0; - } - function b() { - return 0; - } - function c() { - a(); - return; - } - function d() { - var a = 0; - b(); - return; - } -})(asmGlobalArg, asmLibraryArg, buffer); - - - diff --git a/tests/optimizer/test-js-optimizer-asm-lastOpts-output.js b/tests/optimizer/test-js-optimizer-asm-lastOpts-output.js deleted file mode 100644 index c16a4eabd5b4e..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-lastOpts-output.js +++ /dev/null @@ -1,108 +0,0 @@ -function finall(x) { - x = +x; - var a = +5; - a = +x; - a = 17; - a = +44; - a = +44; - a = +44.9; - a = +1278e3; - a = +12e10; - a = -x; - a = -17; - a = -44; - a = -44; - a = -44.9; - a = -1278e3; - a = -12e10; - a = +-x; - a = +-17; - a = +-44; - a = +-44; - a = +-44.9; - a = +-1278e3; - a = +-12e10; - a = +0x8000000000000000; - a = +-0x8000000000000000; - a = -+0x8000000000000000; - a = -0x8000000000000000; - a = +0xffffffffffff; - a = +0xde0b6b000000000; - a = +-0xde0b6b000000000; - a = -+0xde0b6b000000000; - a = -0xde0b6b000000000; - a = +0x3ce7184d470dd60000; - f(g() | 0); - x = 1.7976931348623157e+308; - a = 9007199254740992; - a = 9007199254740992; - a = 9007199254740994; - return +12e10; -} -function looop() { - do do_it(); while (!condition()); - do do_it(); while (!(a > b)); - do do_it(); while (x()); - while (1) { - do_it(); - if (a()) continue; - if (!x()) break; - } - do { - do_it(); - do if (a()) continue; while (b()); - } while (x()); - do { - do_it(); - while (b()) if (a()) continue; - } while (x()); - X : while (1) { - do_it(); - while (b()) if (a()) continue X; - if (!x()) break; - } - do blah(); while (!shah()); - a = b; - LABELED : while (1) { - blah(); - if (shah()) { - c = d; - break; - } - } - while (1) { - blah(); - if (check) break; - if (shah()) { - e = f; - break; - } - } - do { - blah(); - while (1) if (check) break; - } while (!shah()); - g = h; - if (a) waka(); - if (a) waka(); else wala(); - if (a) if (a) waka(); else wala(); - if (a) { - if (a) waka(); - } else other(); - if (a) if (a) waka(); else wala(); else other(); -} -function conditions() { - if (HEAP32[$incdec_ptr71_i + 8 >> 2] | 0) shoo(); - if (x == 0) y(); - if (!x) y(); - if (!y) z(); - if (x != 0) y(); - if (x) y(); - if (y) z(); - if (x) y(); - if (!x) y(); - if (!(s() | 0)) z(); - if (x + 4 | 0) y(); - if (x & 4) y(); -} - diff --git a/tests/optimizer/test-js-optimizer-asm-lastOpts-output2.js b/tests/optimizer/test-js-optimizer-asm-lastOpts-output2.js deleted file mode 100644 index 5468859ecabc4..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-lastOpts-output2.js +++ /dev/null @@ -1,108 +0,0 @@ -function finall(x) { - x = +x; - var a = +5; - a = +x; - a = 17; - a = +44; - a = +44; - a = +44.9; - a = +1278e3; - a = +12e10; - a = -x; - a = -17; - a = -44; - a = -44; - a = -44.9; - a = -1278e3; - a = -12e10; - a = +-x; - a = +-17; - a = +-44; - a = +-44; - a = +-44.9; - a = +-1278e3; - a = +-12e10; - a = +0x8000000000000000; - a = +-0x8000000000000000; - a = -+0x8000000000000000; - a = -0x8000000000000000; - a = +0xffffffffffff; - a = +0xde0b6b000000000; - a = +-0xde0b6b000000000; - a = -+0xde0b6b000000000; - a = -0xde0b6b000000000; - a = +1123456789012345651200; - f(g() | 0); - x = 1797693134862315708145274e284; - a = 9007199254740992; - a = 9007199254740992; - a = 9007199254740994; - return +12e10; -} -function looop() { - do do_it(); while (!condition()); - do do_it(); while (!(a > b)); - do do_it(); while (x()); - while (1) { - do_it(); - if (a()) continue; - if (!x()) break; - } - do { - do_it(); - do if (a()) continue; while (b()); - } while (x()); - do { - do_it(); - while (b()) if (a()) continue; - } while (x()); - X : while (1) { - do_it(); - while (b()) if (a()) continue X; - if (!x()) break; - } - do blah(); while (!shah()); - a = b; - LABELED : while (1) { - blah(); - if (shah()) { - c = d; - break; - } - } - while (1) { - blah(); - if (check) break; - if (shah()) { - e = f; - break; - } - } - do { - blah(); - while (1) if (check) break; - } while (!shah()); - g = h; - if (a) waka(); - if (a) waka(); else wala(); - if (a) if (a) waka(); else wala(); - if (a) { - if (a) waka(); - } else other(); - if (a) if (a) waka(); else wala(); else other(); -} -function conditions() { - if (HEAP32[$incdec_ptr71_i + 8 >> 2] | 0) shoo(); - if (x == 0) y(); - if (!x) y(); - if (!y) z(); - if (x != 0) y(); - if (x) y(); - if (y) z(); - if (x) y(); - if (!x) y(); - if (!(s() | 0)) z(); - if (x + 4 | 0) y(); - if (x & 4) y(); -} - diff --git a/tests/optimizer/test-js-optimizer-asm-lastOpts-output3.js b/tests/optimizer/test-js-optimizer-asm-lastOpts-output3.js deleted file mode 100644 index 14c9c17e34fea..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-lastOpts-output3.js +++ /dev/null @@ -1,108 +0,0 @@ -function finall(x) { - x = +x; - var a = +5; - a = +x; - a = 17; - a = +44; - a = +44; - a = +44.9; - a = +1278e3; - a = +12e10; - a = -x; - a = -17; - a = -44; - a = -44; - a = -44.9; - a = -1278e3; - a = -12e10; - a = +-x; - a = +-17; - a = +-44; - a = +-44; - a = +-44.9; - a = +-1278e3; - a = +-12e10; - a = +0x8000000000000000; - a = +-0x8000000000000000; - a = -+0x8000000000000000; - a = -0x8000000000000000; - a = +0xffffffffffff; - a = +0xde0b6b000000000; - a = +-0xde0b6b000000000; - a = -+0xde0b6b000000000; - a = -0xde0b6b000000000; - a = +11234567890123457e5; - f(g() | 0); - x = 17976931348623157e292; - a = 9007199254740992; - a = 9007199254740992; - a = 9007199254740994; - return +12e10; -} -function looop() { - do do_it(); while (!condition()); - do do_it(); while (!(a > b)); - do do_it(); while (x()); - while (1) { - do_it(); - if (a()) continue; - if (!x()) break; - } - do { - do_it(); - do if (a()) continue; while (b()); - } while (x()); - do { - do_it(); - while (b()) if (a()) continue; - } while (x()); - X : while (1) { - do_it(); - while (b()) if (a()) continue X; - if (!x()) break; - } - do blah(); while (!shah()); - a = b; - LABELED : while (1) { - blah(); - if (shah()) { - c = d; - break; - } - } - while (1) { - blah(); - if (check) break; - if (shah()) { - e = f; - break; - } - } - do { - blah(); - while (1) if (check) break; - } while (!shah()); - g = h; - if (a) waka(); - if (a) waka(); else wala(); - if (a) if (a) waka(); else wala(); - if (a) { - if (a) waka(); - } else other(); - if (a) if (a) waka(); else wala(); else other(); -} -function conditions() { - if (HEAP32[$incdec_ptr71_i + 8 >> 2] | 0) shoo(); - if (x == 0) y(); - if (!x) y(); - if (!y) z(); - if (x != 0) y(); - if (x) y(); - if (y) z(); - if (x) y(); - if (!x) y(); - if (!(s() | 0)) z(); - if (x + 4 | 0) y(); - if (x & 4) y(); -} - diff --git a/tests/optimizer/test-js-optimizer-asm-minlast-output.js b/tests/optimizer/test-js-optimizer-asm-minlast-output.js deleted file mode 100644 index d2eecfd2841c2..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-minlast-output.js +++ /dev/null @@ -1,2 +0,0 @@ -function test($34){var $35=0;$35=$34+130.0;$35=$34+130;return $35|0}function test2(){var tb=0.0,ob=0.0,vb=0.0;tb=ob- -1.0/vb;tb=ob- -1.0/vb} - diff --git a/tests/optimizer/test-js-optimizer-asm-minlast.js b/tests/optimizer/test-js-optimizer-asm-minlast.js deleted file mode 100644 index 581a25212e23a..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-minlast.js +++ /dev/null @@ -1,13 +0,0 @@ -function test($34) { - var $35 = 0; - $35=($34)-((+-130)); - $35=($34)-(-130); - return $35 | 0; -} -function test2() { - var tb = +0, ob = +0, vb = +0; - tb = ob - (-+1 / vb); - tb = ob - (+-1 / vb); -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["test", "test2"] - diff --git a/tests/optimizer/test-js-optimizer-asm-regs-harder-output.js b/tests/optimizer/test-js-optimizer-asm-regs-harder-output.js deleted file mode 100644 index 1843e0e23b3b2..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-regs-harder-output.js +++ /dev/null @@ -1,154 +0,0 @@ -function asm(d1, i2) { - d1 = +d1; - i2 = i2 | 0; - i2 = d1 + d1 | 0; - d1 = d(Math_max(10, Math_min(5, f()))); - i2 = i2 + 2 | 0; - print(i2); - d1 = d1 * 5; - return d1; -} -function _doit(i3, i2, i1) { - i3 = i3 | 0; - i2 = i2 | 0; - i1 = i1 | 0; - i3 = STACKTOP; - _printf(__str | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[(tempInt & 16777215) >> 2] = i2, HEAP32[(tempInt + 4 & 16777215) >> 2] = i1, tempInt)); - STACKTOP = i3; - return 0 | 0; -} -function stackRestore(i1) { - i1 = i1 | 0; - STACKTOP = i1; -} -function switchey(d1, i2) { - d1 = +d1; - i2 = i2 | 0; - switch (d1 | 0) { - case 0: - i2 = d1 + d1 | 0; - d1 = d(Math_max(10, Math_min(5, f()))); - i2 = i2 + 2 | 0; - print(i2); - d1 = d1 * 5; - return d1; - case 1: - return 20; - } -} -function switchey2() { - var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = +0, d7 = +0; - i2 = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - i3 = 1; - while (1) switch (i3 | 0) { - case 1: - i1 = i2 | 0; - __ZN6RandomC1Ev(i1); - i4 = 0; - i5 = 0; - i3 = 2; - break; - case 2: - d7 = +__ZN6Random3getEf(8, +1); - d6 = +__ZN6Random3getEf(i1, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = d7, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = d6, tempInt) | 0); - i5 = (d7 != d6 & 1) + i5 | 0; - i4 = i4 + 1 | 0; - if ((i4 | 0) < 100) { - i3 = 2; - break; - } else { - i3 = 3; - break; - } - case 3: - _printf(16, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[CHECK_ALIGN_4(tempInt | 0) >> 2] = i5, tempInt) | 0); - STACKTOP = i2; - return 0; - } - return 0; -} -function iffey() { - var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = +0, d7 = +0; - i2 = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - i4 = 1; - while (1) { - if (i4 | 0) { - i1 = i2 | 0; - __ZN6RandomC1Ev(i1); - i3 = 0; - i5 = 0; - i4 = 2; - } else { - d7 = +__ZN6Random3getEf(8, +1); - d6 = +__ZN6Random3getEf(i1, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = d7, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = d6, tempInt) | 0); - i5 = (d7 != d6 & 1) + i5 | 0; - i3 = i3 + 1 | 0; - if ((i3 | 0) < 100) { - i4 = 2; - } else { - return 10; - } - } - } - return 0; -} -function labelledJump(i3) { - i3 = i3 | 0; - var i1 = 0, i2 = 0; - i2 = 2; - if (i3) { - i2 = 17; - i1 = 1; - } - if (i1 == 1) { - i3 = i2 + 1; - } else { - i3 = i2 + 1; - } - return i3; -} -function linkedVars() { - var i1 = 0, i2 = 0; - while (1) { - i2 = 9; - i1 = 5; - while (i2 > 0 | i1 > 0) { - if (i2 < i1) { - i2 = i2 - 1; - } else { - i1 = i1 - 1; - } - } - if (i2 < i1) { - break; - } - } - return i2 + i1; -} -function deadCondExpr(i2) { - i2 = i2 | 0; - var i1 = 0; - return i1 | 0; -} -function b1() { - abort(1); - return SIMD_Float32x4(0, 0, 0, 0); -} -function __emscripten_dceable_type_decls() { - ___cxa_throw(0, 0, 0); - ___cxa_rethrow(); - ___cxa_end_catch(); - ___cxa_pure_virtual(); - _getenv(0) | 0; - _pthread_mutex_lock(0) | 0; - _pthread_cond_broadcast(0) | 0; - _pthread_mutex_unlock(0) | 0; - _pthread_cond_wait(0, 0) | 0; - _strftime(0, 0, 0, 0) | 0; - +_fabs(+0); -} - diff --git a/tests/optimizer/test-js-optimizer-asm-regs-harder-output2.js b/tests/optimizer/test-js-optimizer-asm-regs-harder-output2.js deleted file mode 100644 index 9bb9d49d067b5..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-regs-harder-output2.js +++ /dev/null @@ -1,154 +0,0 @@ -function asm(d1, i2) { - d1 = +d1; - i2 = i2 | 0; - i2 = d1 + d1 | 0; - d1 = d(Math_max(10, Math_min(5, f()))); - i2 = i2 + 2 | 0; - print(i2); - d1 = d1 * 5; - return d1; -} -function _doit(i1, i2, i3) { - i1 = i1 | 0; - i2 = i2 | 0; - i3 = i3 | 0; - i1 = STACKTOP; - _printf(__str | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[(tempInt & 16777215) >> 2] = i2, HEAP32[(tempInt + 4 & 16777215) >> 2] = i3, tempInt)); - STACKTOP = i1; - return 0 | 0; -} -function stackRestore(i1) { - i1 = i1 | 0; - STACKTOP = i1; -} -function switchey(d1, i2) { - d1 = +d1; - i2 = i2 | 0; - switch (d1 | 0) { - case 0: - i2 = d1 + d1 | 0; - d1 = d(Math_max(10, Math_min(5, f()))); - i2 = i2 + 2 | 0; - print(i2); - d1 = d1 * 5; - return d1; - case 1: - return 20; - } -} -function switchey2() { - var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = +0, d7 = +0; - i5 = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - i3 = 1; - while (1) switch (i3 | 0) { - case 1: - i4 = i5 | 0; - __ZN6RandomC1Ev(i4); - i1 = 0; - i2 = 0; - i3 = 2; - break; - case 2: - d7 = +__ZN6Random3getEf(8, +1); - d6 = +__ZN6Random3getEf(i4, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = d7, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = d6, tempInt) | 0); - i2 = (d7 != d6 & 1) + i2 | 0; - i1 = i1 + 1 | 0; - if ((i1 | 0) < 100) { - i3 = 2; - break; - } else { - i3 = 3; - break; - } - case 3: - _printf(16, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[CHECK_ALIGN_4(tempInt | 0) >> 2] = i2, tempInt) | 0); - STACKTOP = i5; - return 0; - } - return 0; -} -function iffey() { - var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = +0, d7 = +0; - i5 = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - i3 = 1; - while (1) { - if (i3 | 0) { - i4 = i5 | 0; - __ZN6RandomC1Ev(i4); - i1 = 0; - i2 = 0; - i3 = 2; - } else { - d7 = +__ZN6Random3getEf(8, +1); - d6 = +__ZN6Random3getEf(i4, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = d7, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = d6, tempInt) | 0); - i2 = (d7 != d6 & 1) + i2 | 0; - i1 = i1 + 1 | 0; - if ((i1 | 0) < 100) { - i3 = 2; - } else { - return 10; - } - } - } - return 0; -} -function labelledJump(i1) { - i1 = i1 | 0; - var i2 = 0, i3 = 0; - i2 = 2; - if (i1) { - i1 = 17; - i3 = 1; - } - if (i3 == 1) { - i1 = i1 + 1; - } else { - i1 = i2 + 1; - } - return i1; -} -function linkedVars() { - var i1 = 0, i2 = 0; - while (1) { - i1 = 9; - i2 = 5; - while (i1 > 0 | i2 > 0) { - if (i1 < i2) { - i1 = i1 - 1; - } else { - i2 = i2 - 1; - } - } - if (i1 < i2) { - break; - } - } - return i1 + i2; -} -function deadCondExpr(i1) { - i1 = i1 | 0; - var i2 = 0; - return i2 | 0; -} -function b1() { - abort(1); - return SIMD_Float32x4(0, 0, 0, 0); -} -function __emscripten_dceable_type_decls() { - ___cxa_throw(0, 0, 0); - ___cxa_rethrow(); - ___cxa_end_catch(); - ___cxa_pure_virtual(); - _getenv(0) | 0; - _pthread_mutex_lock(0) | 0; - _pthread_cond_broadcast(0) | 0; - _pthread_mutex_unlock(0) | 0; - _pthread_cond_wait(0, 0) | 0; - _strftime(0, 0, 0, 0) | 0; - +_fabs(+0); -} - diff --git a/tests/optimizer/test-js-optimizer-asm-regs-harder-output3.js b/tests/optimizer/test-js-optimizer-asm-regs-harder-output3.js deleted file mode 100644 index 311f131082123..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-regs-harder-output3.js +++ /dev/null @@ -1,154 +0,0 @@ -function asm(d1, i2) { - d1 = +d1; - i2 = i2 | 0; - i2 = d1 + d1 | 0; - d1 = d(Math_max(10, Math_min(5, f()))); - i2 = i2 + 2 | 0; - print(i2); - d1 = d1 * 5; - return d1; -} -function _doit(i3, i1, i2) { - i3 = i3 | 0; - i1 = i1 | 0; - i2 = i2 | 0; - i3 = STACKTOP; - _printf(__str | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[(tempInt & 16777215) >> 2] = i1, HEAP32[(tempInt + 4 & 16777215) >> 2] = i2, tempInt)); - STACKTOP = i3; - return 0 | 0; -} -function stackRestore(i1) { - i1 = i1 | 0; - STACKTOP = i1; -} -function switchey(d1, i2) { - d1 = +d1; - i2 = i2 | 0; - switch (d1 | 0) { - case 0: - i2 = d1 + d1 | 0; - d1 = d(Math_max(10, Math_min(5, f()))); - i2 = i2 + 2 | 0; - print(i2); - d1 = d1 * 5; - return d1; - case 1: - return 20; - } -} -function switchey2() { - var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = +0, d7 = +0; - i4 = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - i3 = 1; - while (1) switch (i3 | 0) { - case 1: - i5 = i4 | 0; - __ZN6RandomC1Ev(i5); - i1 = 0; - i2 = 0; - i3 = 2; - break; - case 2: - d7 = +__ZN6Random3getEf(8, +1); - d6 = +__ZN6Random3getEf(i5, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = d7, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = d6, tempInt) | 0); - i2 = (d7 != d6 & 1) + i2 | 0; - i1 = i1 + 1 | 0; - if ((i1 | 0) < 100) { - i3 = 2; - break; - } else { - i3 = 3; - break; - } - case 3: - _printf(16, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[CHECK_ALIGN_4(tempInt | 0) >> 2] = i2, tempInt) | 0); - STACKTOP = i4; - return 0; - } - return 0; -} -function iffey() { - var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = +0, d7 = +0; - i4 = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - i3 = 1; - while (1) { - if (i3 | 0) { - i5 = i4 | 0; - __ZN6RandomC1Ev(i5); - i1 = 0; - i2 = 0; - i3 = 2; - } else { - d7 = +__ZN6Random3getEf(8, +1); - d6 = +__ZN6Random3getEf(i5, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = d7, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = d6, tempInt) | 0); - i2 = (d7 != d6 & 1) + i2 | 0; - i1 = i1 + 1 | 0; - if ((i1 | 0) < 100) { - i3 = 2; - } else { - return 10; - } - } - } - return 0; -} -function labelledJump(i2) { - i2 = i2 | 0; - var i1 = 0, i3 = 0; - i1 = 2; - if (i2) { - i1 = 17; - i3 = 1; - } - if (i3 == 1) { - i2 = i1 + 1; - } else { - i2 = i1 + 1; - } - return i2; -} -function linkedVars() { - var i1 = 0, i2 = 0; - while (1) { - i1 = 9; - i2 = 5; - while (i1 > 0 | i2 > 0) { - if (i1 < i2) { - i1 = i1 - 1; - } else { - i2 = i2 - 1; - } - } - if (i1 < i2) { - break; - } - } - return i1 + i2; -} -function deadCondExpr(i2) { - i2 = i2 | 0; - var i1 = 0; - return i1 | 0; -} -function b1() { - abort(1); - return SIMD_Float32x4(0, 0, 0, 0); -} -function __emscripten_dceable_type_decls() { - ___cxa_throw(0, 0, 0); - ___cxa_rethrow(); - ___cxa_end_catch(); - ___cxa_pure_virtual(); - _getenv(0) | 0; - _pthread_mutex_lock(0) | 0; - _pthread_cond_broadcast(0) | 0; - _pthread_mutex_unlock(0) | 0; - _pthread_cond_wait(0, 0) | 0; - _strftime(0, 0, 0, 0) | 0; - +_fabs(+0); -} - diff --git a/tests/optimizer/test-js-optimizer-asm-regs-harder.js b/tests/optimizer/test-js-optimizer-asm-regs-harder.js deleted file mode 100644 index cffb6f0e8db72..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-regs-harder.js +++ /dev/null @@ -1,177 +0,0 @@ -function asm(x, y) { - x = +x; - y = y | 0; - var int1 = 0, int2 = 0; // do not mix the types! - var double1 = +0, double2 = +0; - int1 = (x+x)|0; - double1 = d(Math_max(10, Math_min(5, f()))); - int2 = (int1+2)|0; - print(int2); - double2 = double1*5; - return double2; -} -function _doit($x, $y$0, $y$1) { - $x = $x | 0; - $y$0 = $y$0 | 0; - $y$1 = $y$1 | 0; - var __stackBase__ = 0; - __stackBase__ = STACKTOP; - _printf(__str | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[(tempInt & 16777215) >> 2] = $y$0, HEAP32[(tempInt + 4 & 16777215) >> 2] = $y$1, tempInt)); - STACKTOP = __stackBase__; - return 0 | 0; -} -function stackRestore(top) { - top = top|0; - STACKTOP = top; -} -function switchey(x, y) { - x = +x; - y = y | 0; - var int1 = 0, int2 = 0; // do not mix the types! - var double1 = +0, double2 = +0; - switch(x|0) { - case 0: - int1 = (x+x)|0; - double1 = d(Math_max(10, Math_min(5, f()))); - int2 = (int1+2)|0; - print(int2); - double2 = double1*5; - return double2; - case 1: - return 20; - } -} -function switchey2() { - var $rng2 = 0, $count_06 = 0, $i_05 = 0, $2 = +0, $3 = +0, $count_1 = 0, $9 = 0, label = 0, __stackBase__ = 0; - __stackBase__ = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - label = 1; - while (1) switch (label | 0) { - case 1: - $rng2 = __stackBase__ | 0; - __ZN6RandomC1Ev($rng2); - $i_05 = 0; - $count_06 = 0; - label = 2; - break; - case 2: - $2 = +__ZN6Random3getEf(8, +1); - $3 = +__ZN6Random3getEf($rng2, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = $2, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = $3, tempInt) | 0); - $count_1 = ($2 != $3 & 1) + $count_06 | 0; - $9 = $i_05 + 1 | 0; - if (($9 | 0) < 100) { - $i_05 = $9; - $count_06 = $count_1; - label = 2; - break; - } else { - label = 3; - break; - } - case 3: - _printf(16, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[CHECK_ALIGN_4(tempInt | 0) >> 2] = $count_1, tempInt) | 0); - STACKTOP = __stackBase__; - return 0; - } - return 0; -} -function iffey() { - var $rng2 = 0, $count_06 = 0, $i_05 = 0, $2 = +0, $3 = +0, $count_1 = 0, $9 = 0, label = 0, __stackBase__ = 0; - __stackBase__ = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - label = 1; - while (1) { - if (label | 0) { - $rng2 = __stackBase__ | 0; - __ZN6RandomC1Ev($rng2); - $i_05 = 0; - $count_06 = 0; - label = 2; - } else { - $2 = +__ZN6Random3getEf(8, +1); - $3 = +__ZN6Random3getEf($rng2, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = $2, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = $3, tempInt) | 0); - $count_1 = ($2 != $3 & 1) + $count_06 | 0; - $9 = $i_05 + 1 | 0; - if (($9 | 0) < 100) { - $i_05 = $9; - $count_06 = $count_1; - label = 2; - } else { - label = 3; - return 10; - } - } - } - return 0; -} -function labelledJump(x) { - x = x | 0; - var label = 0; - // y and z don't conflict, but only if you know about labelled jumps. - var y = 0, z = 0; - y = 2; - if (x) { - z = 17; - label = 1; - } - if (label == 1) { - x = z + 1; - } else { - x = y + 1; - } - return x; -} -function linkedVars() { - var outer1 = 0, outer2 = 0; - var inner1_0 = 0, inner1_1 = 0, inner2_0 = 0, inner2_1 = 0; - while (1) { - outer1 = 9; - outer2 = 5; - while ((outer1 > 0) | (outer2 > 0)) { - // All these copy assignment should be eliminated by var sharing. - inner1_0 = outer1; - inner2_0 = outer2; - if (inner1_0 < inner2_0) { - inner1_1 = inner1_0 - 1; - inner2_1 = inner2_0; - } else { - inner1_1 = inner1_0; - inner2_1 = inner2_0 - 1; - } - outer1 = inner1_1; - outer2 = inner2_1; - } - if (outer1 < outer2) { - break; - } - } - return outer1 + outer2; -} -function deadCondExpr(input) { - input = input|0; - var dead = 0, temp = 0; - dead = (!input ? -1 : input)|0; - return temp|0; -} -function b1() { - abort(1); - return SIMD_Float32x4_check(SIMD_Float32x4(0, 0, 0, 0)); -} -// this should be kept alive at all costs -function __emscripten_dceable_type_decls() { - ___cxa_throw(0, 0, 0); - ___cxa_rethrow(); - ___cxa_end_catch(); - ___cxa_pure_virtual(); - _getenv(0) | 0; - _pthread_mutex_lock(0) | 0; - _pthread_cond_broadcast(0) | 0; - _pthread_mutex_unlock(0) | 0; - _pthread_cond_wait(0, 0) | 0; - _strftime(0, 0, 0, 0) | 0; - +_fabs(+0); -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "_doit", "stackRestore", "switchey", "switchey2", "iffey", "labelledJump", "linkedVars", "deadCondExpr", "b1", "__emscripten_dceable_type_decls"] - diff --git a/tests/optimizer/test-js-optimizer-asm-regs-min-output.js b/tests/optimizer/test-js-optimizer-asm-regs-min-output.js deleted file mode 100644 index 748b8e0adbd06..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-regs-min-output.js +++ /dev/null @@ -1,41 +0,0 @@ -function cl(b) { - b = b | 0; - var c = 0; - c = b * b; - a(c); - i1(b); -} -function cl(b) { - b = b | 0; - var c = 0; - c = b * b; - a(c); - i1(b); -} -function cl(b) { - b = b | 0; - var c = 0; - c = b * b; - a(c); - i1(b); -} -function cl(b) { - b = b | 0; - var c = 0; - c = b * b; - a(c); - i1(b); -} -function cl(b) { - b = b | 0; - var c = 0; - c = b * b; - a(c); - i1(b); -} -function cl(b) { - b = b | 0; - b = b + 4; - a(b); -} - diff --git a/tests/optimizer/test-js-optimizer-asm-regs-min.js b/tests/optimizer/test-js-optimizer-asm-regs-min.js deleted file mode 100644 index 65d8d42999cc7..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-regs-min.js +++ /dev/null @@ -1,42 +0,0 @@ -function collideLocal(x) { - x = x | 0; - var a = 0; - a = x*x; - aGlobal(a); // aGlobal needs to be minified into a, but a is used! - bGlobal(x); -} -function collideLocal(x) { - x = x | 0; - var i1 = 0; - i1 = x*x; - aGlobal(i1); - bGlobal(x); // bGlobal needs to be minified into i1, but i1 is used! -} -function collideLocal(a) { - a = a | 0; - var x = 0; - x = a*a; - aGlobal(x); // aGlobal needs to be minified into a, but a is used by a param! - bGlobal(a); -} -function collideLocal(i1) { - i1 = i1 | 0; - var x = 0; - x = i1*i1; - aGlobal(x); - bGlobal(i1); // bGlobal needs to be minified into i1, but i1 is used by a param! -} -function collideLocal(i1) { - i1 = i1 | 0; - var a = 0; - a = i1*i1; - aGlobal(a); // multiple collisions, a and i1 - bGlobal(i1); -} -function collideLocal(i1) { - i1 = i1 | 0; - i1 = i1 + 4; // statement is of similar shape to a param coercion - aGlobal(i1); -} -// EMSCRIPTEN_GENERATED_FUNCTIONS -// EXTRA_INFO: { "names": ["a", "b", "c", "d", "e", "f", "g", "h", "i", "i1", "cl"], "globals": { "aGlobal": "a", "bGlobal": "i1", "collideLocal": "cl" } } diff --git a/tests/optimizer/test-js-optimizer-asm-regs-output.js b/tests/optimizer/test-js-optimizer-asm-regs-output.js deleted file mode 100644 index ca2f6069f8bd7..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-regs-output.js +++ /dev/null @@ -1,125 +0,0 @@ -function asm(d1, i2) { - d1 = +d1; - i2 = i2 | 0; - var i3 = 0, d4 = +0; - i2 = d1 + d1 | 0; - d1 = d(Math_max(10, Math_min(5, f()))); - i3 = i2 + 2 | 0; - print(i3); - d4 = d1 * 5; - return d4; -} -function _doit(i1, i2, i3) { - i1 = i1 | 0; - i2 = i2 | 0; - i3 = i3 | 0; - i1 = STACKTOP; - _printf(__str | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[(tempInt & 16777215) >> 2] = i2, HEAP32[(tempInt + 4 & 16777215) >> 2] = i3, tempInt)); - STACKTOP = i1; - return 0 | 0; -} -function stackRestore(i1) { - i1 = i1 | 0; - STACKTOP = i1; -} -function switchey(d1, i2) { - d1 = +d1; - i2 = i2 | 0; - var i3 = 0, d4 = +0; - switch (d1 | 0) { - case 0: - i2 = d1 + d1 | 0; - d1 = d(Math_max(10, Math_min(5, f()))); - i3 = i2 + 2 | 0; - print(i3); - d4 = d1 * 5; - return d4; - case 1: - return 20; - } -} -function switchey2() { - var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = +0, d7 = +0, i8 = 0, i9 = 0; - i1 = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - i2 = 1; - while (1) switch (i2 | 0) { - case 1: - i3 = i1 | 0; - __ZN6RandomC1Ev(i3); - i4 = 0; - i5 = 0; - i2 = 2; - break; - case 2: - d6 = +__ZN6Random3getEf(8, +1); - d7 = +__ZN6Random3getEf(i3, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = d6, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = d7, tempInt) | 0); - i8 = (d6 != d7 & 1) + i5 | 0; - i9 = i4 + 1 | 0; - if ((i9 | 0) < 100) { - i4 = i9; - i5 = i8; - i2 = 2; - break; - } else { - i2 = 3; - break; - } - case 3: - _printf(16, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[CHECK_ALIGN_4(tempInt | 0) >> 2] = i8, tempInt) | 0); - STACKTOP = i1; - return 0; - } - return 0; -} -function iffey() { - var i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, d6 = +0, d7 = +0, i8 = 0, i9 = 0; - i1 = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - i2 = 1; - while (1) { - if (i2 | 0) { - i3 = i1 | 0; - __ZN6RandomC1Ev(i3); - i4 = 0; - i5 = 0; - i2 = 2; - } else { - d6 = +__ZN6Random3getEf(8, +1); - d7 = +__ZN6Random3getEf(i3, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = d6, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = d7, tempInt) | 0); - i8 = (d6 != d7 & 1) + i5 | 0; - i9 = i4 + 1 | 0; - if ((i9 | 0) < 100) { - i4 = i9; - i5 = i8; - i2 = 2; - } else { - i2 = 3; - return 10; - } - } - } - return 0; -} -function nops() { - var i1 = 0; - f(i1); - if (cheez) { - doIt(); - } else { - doIt(); - } - if (cheez) { - doIt(); - } - if (!cheez) { - doIt(); - } - if (!cheez) { - doIt(); - } - doIt(); -} - diff --git a/tests/optimizer/test-js-optimizer-asm-regs.js b/tests/optimizer/test-js-optimizer-asm-regs.js deleted file mode 100644 index a4d1fb96b2a0f..0000000000000 --- a/tests/optimizer/test-js-optimizer-asm-regs.js +++ /dev/null @@ -1,133 +0,0 @@ -function asm(x, y) { - x = +x; - y = y | 0; - var int1 = 0, int2 = 0; // do not mix the types! - var double1 = +0, double2 = +0; - int1 = (x+x)|0; - double1 = d(Math_max(10, Math_min(5, f()))); - int2 = (int1+2)|0; - print(int2); - double2 = double1*5; - return double2; -} -function _doit($x, $y$0, $y$1) { - $x = $x | 0; - $y$0 = $y$0 | 0; - $y$1 = $y$1 | 0; - var __stackBase__ = 0; - __stackBase__ = STACKTOP; - _printf(__str | 0, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[(tempInt & 16777215) >> 2] = $y$0, HEAP32[(tempInt + 4 & 16777215) >> 2] = $y$1, tempInt)); - STACKTOP = __stackBase__; - return 0 | 0; -} -function stackRestore(top) { - top = top|0; - STACKTOP = top; -} -function switchey(x, y) { - x = +x; - y = y | 0; - var int1 = 0, int2 = 0; // do not mix the types! - var double1 = +0, double2 = +0; - switch(x|0) { - case 0: - int1 = (x+x)|0; - double1 = d(Math_max(10, Math_min(5, f()))); - int2 = (int1+2)|0; - print(int2); - double2 = double1*5; - return double2; - case 1: - return 20; - } -} -function switchey2() { - var $rng2 = 0, $count_06 = 0, $i_05 = 0, $2 = +0, $3 = +0, $count_1 = 0, $9 = 0, label = 0, __stackBase__ = 0; - __stackBase__ = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - label = 1; - while (1) switch (label | 0) { - case 1: - $rng2 = __stackBase__ | 0; - __ZN6RandomC1Ev($rng2); - $i_05 = 0; - $count_06 = 0; - label = 2; - break; - case 2: - $2 = +__ZN6Random3getEf(8, +1); - $3 = +__ZN6Random3getEf($rng2, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = $2, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = $3, tempInt) | 0); - $count_1 = ($2 != $3 & 1) + $count_06 | 0; - $9 = $i_05 + 1 | 0; - if (($9 | 0) < 100) { - $i_05 = $9; - $count_06 = $count_1; - label = 2; - break; - } else { - label = 3; - break; - } - case 3: - _printf(16, (tempInt = STACKTOP, STACKTOP = STACKTOP + 8 | 0, HEAP32[CHECK_ALIGN_4(tempInt | 0) >> 2] = $count_1, tempInt) | 0); - STACKTOP = __stackBase__; - return 0; - } - return 0; -} -function iffey() { - var $rng2 = 0, $count_06 = 0, $i_05 = 0, $2 = +0, $3 = +0, $count_1 = 0, $9 = 0, label = 0, __stackBase__ = 0; - __stackBase__ = STACKTOP; - STACKTOP = STACKTOP + 8 | 0; - label = 1; - while (1) { - if (label | 0) { - $rng2 = __stackBase__ | 0; - __ZN6RandomC1Ev($rng2); - $i_05 = 0; - $count_06 = 0; - label = 2; - } else { - $2 = +__ZN6Random3getEf(8, +1); - $3 = +__ZN6Random3getEf($rng2, +1); - _printf(24, (tempInt = STACKTOP, STACKTOP = STACKTOP + 16 | 0, HEAPF64[CHECK_ALIGN_8(tempInt | 0) >> 3] = $2, HEAPF64[CHECK_ALIGN_8(tempInt + 8 | 0) >> 3] = $3, tempInt) | 0); - $count_1 = ($2 != $3 & 1) + $count_06 | 0; - $9 = $i_05 + 1 | 0; - if (($9 | 0) < 100) { - $i_05 = $9; - $count_06 = $count_1; - label = 2; - } else { - label = 3; - return 10; - } - } - } - return 0; -} -function nops() { - var x = 0; - x | 0; - ~x; - f(x); - // vaccuming - if (cheez) { - doIt(); - } else { - doIt(); - } - if (cheez) { - doIt(); - } else {} - if (cheez) {} else { - doIt(); - } - if (cheez) {} else { - doIt(); - } - if (cheez) {} else {} - if (doIt()) {} else {} -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["asm", "_doit", "stackRestore", "switchey", "switchey2", "iffey", "nops"] - diff --git a/tests/optimizer/test-js-optimizer-ensureLabelSet-output.js b/tests/optimizer/test-js-optimizer-ensureLabelSet-output.js deleted file mode 100644 index c2a58e1aca2ae..0000000000000 --- a/tests/optimizer/test-js-optimizer-ensureLabelSet-output.js +++ /dev/null @@ -1,36 +0,0 @@ -function noNeed() { - var x = 0; - f(x); -} -function need() { - var x = 0, label = 0; - f(x); - label = 0; - if (y) { - label = 0; - } else { - label = 1; - } - g(label); -} -function noNeed2() { - var x = 0, label = 0; - f(x); - label = 0; - if (y) { - label = 1; - } - g(label); -} -function need2() { - var x = 0, label = 0; - f(x); - label = 0; - waka : if (y) { - label = 0; - } else { - label = 1; - } - g(label); -} - diff --git a/tests/optimizer/test-js-optimizer-ensureLabelSet.js b/tests/optimizer/test-js-optimizer-ensureLabelSet.js deleted file mode 100644 index 1d8fed96c5866..0000000000000 --- a/tests/optimizer/test-js-optimizer-ensureLabelSet.js +++ /dev/null @@ -1,34 +0,0 @@ -function noNeed() { - var x = 0; - f(x); -} -function need() { - var x = 0, label = 0; - f(x); - if (y) { - label = 0; - } else { - label = 1; - } - g(label); -} -function noNeed2() { - var x = 0, label = 0; - f(x); - label = 0; - if (y) { - label = 1; - } - g(label); -} -function need2() { - var x = 0, label = 0; - f(x); - waka: if (y) { - label = 0; - } else { - label = 1; - } - g(label); -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["noNeed", "need", "noNeed2", "need2"] diff --git a/tests/optimizer/test-js-optimizer-localCSE-output.js b/tests/optimizer/test-js-optimizer-localCSE-output.js deleted file mode 100644 index 8eedde03de0b6..0000000000000 --- a/tests/optimizer/test-js-optimizer-localCSE-output.js +++ /dev/null @@ -1,82 +0,0 @@ -function skinning(i1, i3, i5, i19, i4) { - i1 = i1 | 0; - i3 = i3 | 0; - i5 = i5 | 0; - i19 = i19 | 0; - i4 = i4 | 0; - var i2 = 0, i6 = 0, d7 = 0, d8 = 0, d9 = 0, d10 = 0, d11 = 0, d12 = 0, d13 = 0, d14 = 0, d15 = 0, d16 = 0, d17 = 0, d18 = 0, i20 = 0, d21 = 0, i22 = 0, CSE$0 = 0; - i2 = STACKTOP; - if (!i3) { - STACKTOP = i2; - return; - } - while (1) { - i3 = i3 + -1 | 0; - i6 = HEAP32[i19 >> 2] | 0; - d8 = +HEAPF32[i19 + 4 >> 2]; - CSE$0 = i1 + (i6 * 48 | 0) | 0; - d9 = d8 * +HEAPF32[CSE$0 >> 2]; - d14 = d8 * +HEAPF32[CSE$0 + 4 >> 2]; - d7 = d8 * +HEAPF32[CSE$0 + 8 >> 2]; - d11 = d8 * +HEAPF32[CSE$0 + 12 >> 2]; - d12 = d8 * +HEAPF32[CSE$0 + 16 >> 2]; - d15 = d8 * +HEAPF32[CSE$0 + 20 >> 2]; - d16 = d8 * +HEAPF32[CSE$0 + 24 >> 2]; - d17 = d8 * +HEAPF32[CSE$0 + 28 >> 2]; - d18 = d8 * +HEAPF32[CSE$0 + 32 >> 2]; - d13 = d8 * +HEAPF32[CSE$0 + 36 >> 2]; - d10 = d8 * +HEAPF32[CSE$0 + 40 >> 2]; - d8 = d8 * +HEAPF32[CSE$0 + 44 >> 2]; - } - HEAP32[tempDoublePtr + 4 >> 2] | 0; - HEAP8[10] = 15; - HEAP32[tempDoublePtr + 4 >> 2] | 0; -} -function _i64Subtract(a, b, c, d) { - a = a | 0; - b = b | 0; - c = c | 0; - d = d | 0; - var h = 0, CSE$0 = 0; - CSE$0 = b - d | 0; - h = (CSE$0 | 0) >>> 0; - h = (CSE$0 | 0) - (c >>> 0 > a >>> 0 | 0) >>> 0; - return (tempRet0 = h, a - c >>> 0 | 0) | 0; -} -function cubeMD5mesh() { - var $15 = 0, $16 = 0, $18 = 0, $20 = 0, $22 = +0, $24 = +0, $27 = +0, $29 = +0, $33 = +0, $36 = +0, $43 = +0, CSE$0 = 0, CSE$1 = 0; - CSE$0 = $15 + ($18 * 20 | 0) | 0; - $20 = HEAP32[CSE$0 >> 2] | 0; - CSE$1 = $16 + ($20 * 28 | 0) | 0; - $22 = +HEAPF32[CSE$1 + 16 >> 2]; - $24 = +HEAPF32[CSE$0 + 16 >> 2]; - $27 = +HEAPF32[CSE$1 + 20 >> 2]; - $29 = +HEAPF32[CSE$0 + 12 >> 2]; - $33 = +HEAPF32[CSE$0 + 8 >> 2]; - $36 = +HEAPF32[CSE$1 + 12 >> 2]; - $43 = +HEAPF32[CSE$1 + 24 >> 2]; -} -function ___towcase() { - var CSE$0 = 0; - CSE$0 = gb + 1 + ($i << 2) | 0; - CSE$0 | 0; - CSE$0 | 0; - gb + gb + gb + gb; - gb + gb + gb + gb; -} -function tableMask(x, y, z, a, b, c) { - x = x | 0; - y = y | 0; - z = z | 0; - a = a | 0; - b = b | 0; - c = c | 0; - var CSE$0 = 0, CSE$1 = 0; - CSE$0 = x & y & z | 0; - CSE$0 & 511; - FUNCTION_TABLE[CSE$0 & 511](); - CSE$1 = a & b & c & 127 | 0; - CSE$1 | 0; - CSE$1 | 0; -} - diff --git a/tests/optimizer/test-js-optimizer-localCSE.js b/tests/optimizer/test-js-optimizer-localCSE.js deleted file mode 100644 index 0eefb25578a55..0000000000000 --- a/tests/optimizer/test-js-optimizer-localCSE.js +++ /dev/null @@ -1,77 +0,0 @@ -function skinning(i1, i3, i5, i19, i4) { - i1 = i1 | 0; - i3 = i3 | 0; - i5 = i5 | 0; - i19 = i19 | 0; - i4 = i4 | 0; - var i2 = 0, i6 = 0, d7 = 0, d8 = 0, d9 = 0, d10 = 0, d11 = 0, d12 = 0, d13 = 0, d14 = 0, d15 = 0, d16 = 0, d17 = 0, d18 = 0, i20 = 0, d21 = 0, i22 = 0; - i2 = STACKTOP; - if (!i3) { - STACKTOP = i2; - return; - } - while (1) { - i3 = i3 + -1 | 0; - i6 = HEAP32[i19 >> 2] | 0; - d8 = +HEAPF32[i19 + 4 >> 2]; - d9 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) >> 2]; - d14 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 4 >> 2]; - d7 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 8 >> 2]; - d11 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 12 >> 2]; - d12 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 16 >> 2]; - d15 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 20 >> 2]; - d16 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 24 >> 2]; - d17 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 28 >> 2]; - d18 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 32 >> 2]; - d13 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 36 >> 2]; - d10 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 40 >> 2]; - d8 = d8 * +HEAPF32[i1 + (i6 * 48 | 0) + 44 >> 2]; - } - HEAP32[tempDoublePtr + 4 >> 2] | 0; - HEAP8[10] = 15; - HEAP32[tempDoublePtr + 4 >> 2] | 0; -} -function _i64Subtract(a, b, c, d) { - a = a | 0; - b = b | 0; - c = c | 0; - d = d | 0; - var h = 0; - h = b - d >>> 0; - h = b - d - (c >>> 0 > a >>> 0 | 0) >>> 0; - return (tempRet0 = h, a - c >>> 0 | 0) | 0; -} -function cubeMD5mesh() { - var $15 = 0, $16 = 0, $18 = 0; - var $20 = 0, $22 = +0, $24 = +0, $27 = +0, $29 = +0, $33 = +0, $36 = +0, $43 = +0; - $20 = HEAP32[$15 + ($18 * 20 | 0) >> 2] | 0; - $22 = +HEAPF32[$16 + ($20 * 28 | 0) + 16 >> 2]; - $24 = +HEAPF32[$15 + ($18 * 20 | 0) + 16 >> 2]; - $27 = +HEAPF32[$16 + ($20 * 28 | 0) + 20 >> 2]; - $29 = +HEAPF32[$15 + ($18 * 20 | 0) + 12 >> 2]; - $33 = +HEAPF32[$15 + ($18 * 20 | 0) + 8 >> 2]; - $36 = +HEAPF32[$16 + ($20 * 28 | 0) + 12 >> 2]; - $43 = +HEAPF32[$16 + ($20 * 28 | 0) + 24 >> 2]; -} -function ___towcase() { - gb + 1 + ($i << 2); - gb + 1 + ($i << 2); - gb + gb + gb + gb; - gb + gb + gb + gb; -} -function tableMask(x, y, z, a, b, c) { - x = x | 0; - y = y | 0; - z = z | 0; - a = a | 0; - b = b | 0; - c = c | 0; - // tempting as it is to localCSE here, we must keep the - // mask for asm.js validation. - (x & y & z) & 511; - FUNCTION_TABLE[(x & y & z) & 511](); - // otherwise, we can localCSE the mask too - (a & b & c) & 127; - (a & b & c) & 127; -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["skinning", "_i64Subtract", "cubeMD5mesh", "___towcase", "tableMask"] diff --git a/tests/optimizer/test-js-optimizer-regs-output.js b/tests/optimizer/test-js-optimizer-regs-output.js deleted file mode 100644 index 6f67bcec4a875..0000000000000 --- a/tests/optimizer/test-js-optimizer-regs-output.js +++ /dev/null @@ -1,232 +0,0 @@ -function test() { - var r1, r2; - r1 = 0; - f(r1); - r1 += 1; - r2 = r1 + 2; - g(r1, r2); - f(r1); - r1 = cheez(); - r2 = r1 + 2; - g(r2, r2); - r2 = 200; - r2 = 203; - r2 = 205; - r1 = 208; - c(r2); - while (f()) { - r2 = 5; - r1 = 12; - gg(r2, r1 * 2); - r1 = 100; - gg(r1, 20); - } - r1 = f(), r2 = 100, r2 = 1e3, r2 = 1e5; - f(r1()); -} -function primes() { - var r1, r2, r3, r4, r5, r6, r7; - r1 = 2; - r2 = 0; - $_$2 : while (1) { - r3 = r1 | 0; - r4 = _sqrtf(r3); - r3 = 2; - $_$4 : while (1) { - r5 = r3 | 0; - r6 = r5 < r4; - if (!r6) { - r7 = 1; - break $_$4; - } - r6 = (r1 | 0) % (r3 | 0); - r5 = (r6 | 0) == 0; - if (r5) { - r7 = 0; - break $_$4; - } - r5 = r3 + 1 | 0; - r3 = r5; - } - r3 = r7 + r2 | 0; - r4 = r1 + 1 | 0; - r5 = (r3 | 0) < 1e5; - if (r5) { - r1 = r4; - r2 = r3; - } else { - break $_$2; - } - } - r2 = _printf(STRING_TABLE.__str | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r1, tempInt)); - return 1; - return null; -} -function atomic() { - var r1, r2, r3, r4; - r1 = STACKTOP; - STACKTOP += 4; - r2 = r1 >> 2; - HEAP32[r2] = 10; - r3 = (tempValue = HEAP32[r2], HEAP32[r2] == 10 && (HEAP32[r2] = 7), tempValue); - r4 = (r3 | 0) == 10 & 1; - r3 = HEAP32[r2]; - r2 = _printf(STRING_TABLE.__str | 0, (tempInt = STACKTOP, STACKTOP += 8, HEAP32[tempInt >> 2] = r3, HEAP32[tempInt + 4 >> 2] = r4, tempInt)); - STACKTOP = r1; - return 0; - return null; -} -function fcntl_open() { - var r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15, r16, r17; - r1 = STACKTOP; - STACKTOP += 84; - r2 = r1; - r3 = r1 + 72; - r4 = r3 | 0; - for (r5 = STRING_TABLE.__ZZ4mainE16nonexistent_name | 0, r6 = r4, r7 = r5 + 12; r5 < r7; r5++, r6++) { - HEAP8[r6] = HEAP8[r5]; - } - r5 = (r2 + 8 | 0) >> 2; - r8 = r2 >> 2; - r9 = r3 + 9 | 0; - r10 = r3 + 10 | 0; - r3 = 0; - while (1) { - r11 = HEAP32[__ZZ4mainE5modes + (r3 << 2) >> 2]; - r12 = r11 | 512; - r13 = r3 + 97 & 255; - r14 = 0; - while (1) { - r15 = (r14 & 1 | 0) == 0 ? r11 : r12; - r16 = (r14 & 2 | 0) == 0 ? r15 : r15 | 2048; - r15 = (r14 & 4 | 0) == 0 ? r16 : r16 | 1024; - r16 = (r14 & 8 | 0) == 0 ? r15 : r15 | 8; - r15 = _printf(STRING_TABLE.__str | 0, (tempInt = STACKTOP, STACKTOP += 8, HEAP32[tempInt >> 2] = r3, HEAP32[tempInt + 4 >> 2] = r14, tempInt)); - r15 = _open(STRING_TABLE.__str2 | 0, r16, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = 511, tempInt)); - r17 = (r15 | 0) != -1 & 1; - r15 = _printf(STRING_TABLE.__str1 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r17, tempInt)); - r17 = ___errno(); - r15 = HEAP32[r17 >> 2]; - r17 = _printf(STRING_TABLE.__str3 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r15, tempInt)); - r15 = _stat(STRING_TABLE.__str2 | 0, r2); - r15 = HEAP32[r5] & -512; - r17 = _printf(STRING_TABLE.__str4 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r15, tempInt)); - for (r6 = r8, r7 = r6 + 18; r6 < r7; r6++) { - HEAP32[r6] = 0; - } - r15 = _putchar(10); - r15 = ___errno(); - HEAP32[r15 >> 2] = 0; - r15 = _printf(STRING_TABLE.__str6 | 0, (tempInt = STACKTOP, STACKTOP += 8, HEAP32[tempInt >> 2] = r3, HEAP32[tempInt + 4 >> 2] = r14, tempInt)); - r15 = _open(STRING_TABLE.__str7 | 0, r16, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = 511, tempInt)); - r17 = (r15 | 0) != -1 & 1; - r15 = _printf(STRING_TABLE.__str1 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r17, tempInt)); - r17 = ___errno(); - r15 = HEAP32[r17 >> 2]; - r17 = _printf(STRING_TABLE.__str3 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r15, tempInt)); - r15 = _stat(STRING_TABLE.__str7 | 0, r2); - r15 = HEAP32[r5] & -512; - r17 = _printf(STRING_TABLE.__str4 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r15, tempInt)); - for (r6 = r8, r7 = r6 + 18; r6 < r7; r6++) { - HEAP32[r6] = 0; - } - r15 = _putchar(10); - r15 = ___errno(); - HEAP32[r15 >> 2] = 0; - HEAP8[r9] = r13; - HEAP8[r10] = r14 + 97 & 255; - r15 = _printf(STRING_TABLE.__str8 | 0, (tempInt = STACKTOP, STACKTOP += 8, HEAP32[tempInt >> 2] = r3, HEAP32[tempInt + 4 >> 2] = r14, tempInt)); - r15 = _open(r4, r16, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = 511, tempInt)); - r17 = (r15 | 0) != -1 & 1; - r15 = _printf(STRING_TABLE.__str1 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r17, tempInt)); - r17 = ___errno(); - r15 = HEAP32[r17 >> 2]; - r17 = _printf(STRING_TABLE.__str3 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r15, tempInt)); - r15 = _stat(r4, r2); - r15 = HEAP32[r5] & -512; - r17 = _printf(STRING_TABLE.__str4 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r15, tempInt)); - for (r6 = r8, r7 = r6 + 18; r6 < r7; r6++) { - HEAP32[r6] = 0; - } - r16 = _putchar(10); - r16 = ___errno(); - HEAP32[r16 >> 2] = 0; - r16 = r14 + 1 | 0; - if ((r16 | 0) == 16) { - break; - } - r14 = r16; - } - r14 = r3 + 1 | 0; - if ((r14 | 0) == 3) { - break; - } - r3 = r14; - } - r3 = _puts(STRING_TABLE._str | 0); - r3 = _creat(STRING_TABLE.__str10 | 0, 511); - r6 = (r3 | 0) != -1 & 1; - r3 = _printf(STRING_TABLE.__str1 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r6, tempInt)); - r6 = ___errno(); - r3 = HEAP32[r6 >> 2]; - r6 = _printf(STRING_TABLE.__str3 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = r3, tempInt)); - STACKTOP = r1; - return 0; - return null; -} -function ex() { - var __stackBase__ = STACKTOP; - STACKTOP += 4; - var $e1 = __stackBase__; - var $puts = _puts(STRING_TABLE._str17 | 0); - var $x41 = $e1 | 0; - var $i_04 = 0; - while (1) { - var $i_04; - var $call1 = _printf(STRING_TABLE.__str15 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $i_04, tempInt)); - ((function() { - try { - __THREW__ = false; - return __Z5magici($i_04); - } catch (e) { - if (typeof e != "number") throw e; - if (ABORT) throw e; - __THREW__ = true; - return null; - } - }))(); - } -} -function switchey(r1) { - var r2, r3, r4, r5, r6, r7, r8, r9; - r2 = 5; - while (1) { - switch (r1 = f(r1, r2)) { - case 1: - g(r2); - r3 = r1 + 1; - r1--; - break; - case 2: - g(r2 * 2); - r4 = r1 + 22; - r5 = r4 + 5; - r1 -= 20; - break; - default: - r6 = r1 + 22; - r7 = r4 + 5; - ch(r6, r7 * r4); - throw 99; - } - } - r8 = r1 + 1; - p(r2, r8); - r9 = r1 + 2; - pp(r9); -} -function __ZN14NetworkAddressC1EPKcti(r1) { - __ZN14NetworkAddressC2EPKcti(r1); - return; -} - diff --git a/tests/optimizer/test-js-optimizer-regs.js b/tests/optimizer/test-js-optimizer-regs.js deleted file mode 100644 index bc0ebb5a80874..0000000000000 --- a/tests/optimizer/test-js-optimizer-regs.js +++ /dev/null @@ -1,237 +0,0 @@ -function test() { - var i = 0; - f(i); - i+=1; - var j = i + 2; - g(i, j); - f(i); - var i2 = cheez(); - var j2 = i2 + 2; - g(j2, j2); - var k1 = 200; - var k2 = 203; - var k3 = 205; - var k4 = 208; - c(k3); - while (f()) { - var apple = 5; - var orange = 12; - gg(apple, orange*2); - var tangerine = 100; - gg(tangerine, 20); - } - var ck = f(), ck2 = 100, ck3 = 1000, ck4 = 100000; - f(ck()); -} -function primes() { - var label; - var $curri_01 = 2; - var $primes_02 = 0; - $_$2 : while (1) { - var $primes_02; - var $curri_01; - var $conv1 = $curri_01 | 0; - var $call = _sqrtf($conv1); - var $j_0 = 2; - $_$4 : while (1) { - var $j_0; - var $conv = $j_0 | 0; - var $cmp2 = $conv < $call; - if (!$cmp2) { - var $ok_0 = 1; - break $_$4; - } - var $rem = ($curri_01 | 0) % ($j_0 | 0); - var $cmp3 = ($rem | 0) == 0; - if ($cmp3) { - var $ok_0 = 0; - break $_$4; - } - var $inc = $j_0 + 1 | 0; - var $j_0 = $inc; - } - var $ok_0; - var $inc5_primes_0 = $ok_0 + $primes_02 | 0; - var $inc7 = $curri_01 + 1 | 0; - var $cmp = ($inc5_primes_0 | 0) < 1e5; - if ($cmp) { - var $curri_01 = $inc7; - var $primes_02 = $inc5_primes_0; - } else { - break $_$2; - } - } - var $call8 = _printf(STRING_TABLE.__str | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $curri_01, tempInt)); - return 1; - return null; -} -function atomic() { - var $x$s2; - var __stackBase__ = STACKTOP; - STACKTOP += 4; - var $x$s2 = __stackBase__ >> 2; - HEAP32[$x$s2] = 10; - var $0 = (tempValue = HEAP32[$x$s2], HEAP32[$x$s2] == 10 && (HEAP32[$x$s2] = 7), tempValue); - var $conv = ($0 | 0) == 10 & 1; - var $2 = HEAP32[$x$s2]; - var $call = _printf(STRING_TABLE.__str | 0, (tempInt = STACKTOP, STACKTOP += 8, HEAP32[tempInt >> 2] = $2, HEAP32[tempInt + 4 >> 2] = $conv, tempInt)); - STACKTOP = __stackBase__; - return 0; - return null; -} -function fcntl_open() { - var $1$s2; - var $st_mode$s2; - var __stackBase__ = STACKTOP; - STACKTOP += 84; - var $s = __stackBase__; - var $nonexistent_name = __stackBase__ + 72; - var $0 = $nonexistent_name | 0; - for (var $$src = STRING_TABLE.__ZZ4mainE16nonexistent_name | 0, $$dest = $0, $$stop = $$src + 12; $$src < $$stop; $$src++, $$dest++) { - HEAP8[$$dest] = HEAP8[$$src]; - } - var $st_mode$s2 = ($s + 8 | 0) >> 2; - var $1$s2 = $s >> 2; // critical variable, becomes r8 - var $arrayidx43 = $nonexistent_name + 9 | 0; - var $arrayidx46 = $nonexistent_name + 10 | 0; - var $i_04 = 0; - while (1) { - var $i_04; - var $2 = HEAP32[__ZZ4mainE5modes + ($i_04 << 2) >> 2]; - var $or = $2 | 512; - var $conv42 = $i_04 + 97 & 255; - var $j_03 = 0; - while (1) { - var $j_03; - var $flags_0 = ($j_03 & 1 | 0) == 0 ? $2 : $or; - var $flags_0_or7 = ($j_03 & 2 | 0) == 0 ? $flags_0 : $flags_0 | 2048; - var $flags_2 = ($j_03 & 4 | 0) == 0 ? $flags_0_or7 : $flags_0_or7 | 1024; - var $flags_2_or17 = ($j_03 & 8 | 0) == 0 ? $flags_2 : $flags_2 | 8; - var $call = _printf(STRING_TABLE.__str | 0, (tempInt = STACKTOP, STACKTOP += 8, HEAP32[tempInt >> 2] = $i_04, HEAP32[tempInt + 4 >> 2] = $j_03, tempInt)); - var $call19 = _open(STRING_TABLE.__str2 | 0, $flags_2_or17, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = 511, tempInt)); - var $conv = ($call19 | 0) != -1 & 1; - var $call21 = _printf(STRING_TABLE.__str1 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $conv, tempInt)); - var $call22 = ___errno(); - var $3 = HEAP32[$call22 >> 2]; - var $call23 = _printf(STRING_TABLE.__str3 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $3, tempInt)); - var $call24 = _stat(STRING_TABLE.__str2 | 0, $s); - var $and25 = HEAP32[$st_mode$s2] & -512; - var $call26 = _printf(STRING_TABLE.__str4 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $and25, tempInt)); - for (var $$dest = $1$s2, $$stop = $$dest + 18; $$dest < $$stop; $$dest++) { - HEAP32[$$dest] = 0; - } - var $putchar = _putchar(10); - var $call28 = ___errno(); - HEAP32[$call28 >> 2] = 0; - var $call29 = _printf(STRING_TABLE.__str6 | 0, (tempInt = STACKTOP, STACKTOP += 8, HEAP32[tempInt >> 2] = $i_04, HEAP32[tempInt + 4 >> 2] = $j_03, tempInt)); - var $call30 = _open(STRING_TABLE.__str7 | 0, $flags_2_or17, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = 511, tempInt)); - var $conv32 = ($call30 | 0) != -1 & 1; - var $call33 = _printf(STRING_TABLE.__str1 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $conv32, tempInt)); - var $call34 = ___errno(); - var $5 = HEAP32[$call34 >> 2]; - var $call35 = _printf(STRING_TABLE.__str3 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $5, tempInt)); - var $call36 = _stat(STRING_TABLE.__str7 | 0, $s); - var $and38 = HEAP32[$st_mode$s2] & -512; - var $call39 = _printf(STRING_TABLE.__str4 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $and38, tempInt)); - for (var $$dest = $1$s2, $$stop = $$dest + 18; $$dest < $$stop; $$dest++) { - HEAP32[$$dest] = 0; - } - var $putchar1 = _putchar(10); - var $call41 = ___errno(); - HEAP32[$call41 >> 2] = 0; - HEAP8[$arrayidx43] = $conv42; - HEAP8[$arrayidx46] = $j_03 + 97 & 255; - var $call47 = _printf(STRING_TABLE.__str8 | 0, (tempInt = STACKTOP, STACKTOP += 8, HEAP32[tempInt >> 2] = $i_04, HEAP32[tempInt + 4 >> 2] = $j_03, tempInt)); - var $call48 = _open($0, $flags_2_or17, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = 511, tempInt)); - var $conv50 = ($call48 | 0) != -1 & 1; - var $call51 = _printf(STRING_TABLE.__str1 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $conv50, tempInt)); - var $call52 = ___errno(); - var $7 = HEAP32[$call52 >> 2]; - var $call53 = _printf(STRING_TABLE.__str3 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $7, tempInt)); - var $call55 = _stat($0, $s); - var $and57 = HEAP32[$st_mode$s2] & -512; - var $call58 = _printf(STRING_TABLE.__str4 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $and57, tempInt)); - for (var $$dest = $1$s2, $$stop = $$dest + 18; $$dest < $$stop; $$dest++) { - HEAP32[$$dest] = 0; - } - var $putchar2 = _putchar(10); - var $call60 = ___errno(); - HEAP32[$call60 >> 2] = 0; - var $inc = $j_03 + 1 | 0; - if (($inc | 0) == 16) { - break; - } - var $j_03 = $inc; - } - var $inc62 = $i_04 + 1 | 0; - if (($inc62 | 0) == 3) { - break; - } - var $i_04 = $inc62; - } - var $puts = _puts(STRING_TABLE._str | 0); - var $call65 = _creat(STRING_TABLE.__str10 | 0, 511); - var $conv67 = ($call65 | 0) != -1 & 1; - var $call68 = _printf(STRING_TABLE.__str1 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $conv67, tempInt)); - var $call69 = ___errno(); - var $9 = HEAP32[$call69 >> 2]; - var $call70 = _printf(STRING_TABLE.__str3 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $9, tempInt)); - STACKTOP = __stackBase__; - return 0; - return null; -} -function ex() { - var __stackBase__ = STACKTOP; - STACKTOP += 4; - var $e1 = __stackBase__; - var $puts = _puts(STRING_TABLE._str17 | 0); - var $x41 = $e1 | 0; - var $i_04 = 0; - while (1) { - var $i_04; - var $call1 = _printf(STRING_TABLE.__str15 | 0, (tempInt = STACKTOP, STACKTOP += 4, HEAP32[tempInt >> 2] = $i_04, tempInt)); - ((function() { // prevents registerize, looks like inline asm - try { - __THREW__ = false; - return __Z5magici($i_04); - } catch (e) { - if (typeof e != "number") throw e; - if (ABORT) throw e; - __THREW__ = true; - return null; - } - }))(); - } -} -function switchey(x) { - var a = 5; - while (1) { - switch (x = f(x, a)) { - case 1: - g(a); - var b = x+1; - x--; - break; - case 2: - g(a*2); - var c = x+22; - var d = c+5; - x -= 20; - break; - default: - var c1 = x+22; - var d2 = c+5; - ch(c1, d2*c); - throw 99; - } - } - var aa = x+1; - p(a, aa); - var aaa = x+2; - pp(aaa); -} -function __ZN14NetworkAddressC1EPKcti($this) { - __ZN14NetworkAddressC2EPKcti($this); - return; -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["test", "primes", "atomic", "fcntl_open", "ex", "switchey", "__ZN14NetworkAddressC1EPKcti"] diff --git a/tests/optimizer/test-js-optimizer-si-output.js b/tests/optimizer/test-js-optimizer-si-output.js deleted file mode 100644 index 9ef5171cba9d3..0000000000000 --- a/tests/optimizer/test-js-optimizer-si-output.js +++ /dev/null @@ -1,197 +0,0 @@ -function a() { - if (x ? y : 0) { - g(); - } - if (x) { - if (y) { - g(); - } else { - h(); - } - } - if (x) { - if (y) { - g(); - } - h(); - } - if (x) { - if (y) { - g(); - } - } else { - h(); - } - if (x) { - return; - if (y) { - g(); - } - } - if ((x ? y : 0) ? z : 0) { - g(); - } - if (x) { - return; - if (y ? z : 0) { - g(); - } - } - if (x ? y : 0) { - return; - if (z) { - g(); - } - } - if (x ? y : 0) { - if (z) { - g(); - } - f(); - } - if (x) { - if (y ? z : 0) { - g(); - } - f(); - } - if (x ? (f(), x = x + 2 | 0, y) : 0) { - g(); - } - if (x) { - f(); - x = x + 2 | 0; - return; - if (y) { - g(); - } - } - andNowForElses(); - if (x ? y : 0) { - f(); - } else { - label = 5; - } - if (x) { - if (y) { - f(); - } else { - label = 5; - } - } else { - label = 6; - } - if (x) { - if (y) { - f(); - } else { - label = 5; - } - } - if (x) { - if (y) { - f(); - } - } else { - label = 5; - } - if (x) { - a = 5; - if (y) { - f(); - } - } else { - label = 5; - } - fuseElses(); - if (x ? y : 0) { - f(); - } else { - a(); - } - if (x ? y : 0) { - f(); - } else { - label = 52; - } - if ((label | 0) == 62) { - label = 0; - a(); - } - if (x ? y : 0) { - f(); - } else { - a(); - } - while (1) { - if (x ? y : 0) { - f(); - } else { - label = 953; - } - if ((label | 0) == 953) { - a(); - } - } - if (x ? y : 0) { - label = 54; - } else { - label = 54; - } - if ((label | 0) == 54) { - label = 0; - a(); - } -} -function b() { - if (x) { - a(); - } else { - label = 5; - } - if ((label | 0) == 5) { - label = 0; - a(); - } -} -function c() { - label = x; - if (x ? y : 0) { - f(); - } else { - label = 151; - } - if ((label | 0) == 151) { - label = 0; - a(); - } -} -function d() { - if (x ? y : 0) { - f(); - } else { - label = 251; - } - if ((label | 0) == 251) { - label = 0; - a(); - } - if ((label | 0) == 251) { - a(); - } -} -function e() { - if (x ? y : 0) { - f(); - } else { - label = 351; - } - if ((label | 0) == 351) { - label = 0; - a(); - } - if ((label | 0) == x) { - a(); - } -} - diff --git a/tests/optimizer/test-js-optimizer-si.js b/tests/optimizer/test-js-optimizer-si.js deleted file mode 100644 index 04ceec4aa38b7..0000000000000 --- a/tests/optimizer/test-js-optimizer-si.js +++ /dev/null @@ -1,258 +0,0 @@ -function a() { - if (x) { - if (y) { - g(); - } - } - if (x) { - if (y) { - g(); - } else { - h(); - } - } - if (x) { - if (y) { - g(); - } - h(); - } - if (x) { - if (y) { - g(); - } - } else { - h(); - } - if (x) { - return; - if (y) { - g(); - } - } - if (x) { - if (y) { - if (z) { - g(); - } - } - } - if (x) { - return; - if (y) { - if (z) { - g(); - } - } - } - if (x) { - if (y) { - return; - if (z) { - g(); - } - } - } - if (x) { - if (y) { - if (z) { - g(); - } - f(); - } - } - if (x) { - if (y) { - if (z) { - g(); - } - } - f(); - } - if (x) { - f(); - x = x + 2 | 0; - if (y) { - g(); - } - } - if (x) { - f(); - x = x + 2 | 0; - return; - if (y) { - g(); - } - } - andNowForElses(); - if (x) { - if (y) { - f(); - } else { - label = 5; - } - } else { - label = 5; - } - if (x) { - if (y) { - f(); - } else { - label = 5; - } - } else { - label = 6; - } - if (x) { - if (y) { - f(); - } else { - label = 5; - } - } - if (x) { - if (y) { - f(); - } - } else { - label = 5; - } - if (x) { - a = 5; // do not commify me - if (y) { - f(); - } - } else { - label = 5; - } - fuseElses(); - if (x) { - if (y) { - f(); - } else { - label = 51; - } - } else { - label = 51; - } - if ((label|0) == 51) { - label = 0; - a(); - } - if (x) { - if (y) { - f(); - } else { - label = 52; - } - } else { - label = 52; - } - if ((label|0) == 62) { - label = 0; - a(); - } - if (x) { - if (y) { - f(); - } else { - label = 53; - } - } else { - label = 53; - } - if ((label|0) == 53) { - a(); - } - while (1) { - if (x) { - if (y) { - f(); - } else { - label = 953; - } - } else { - label = 953; - } - if ((label|0) == 953) { - a(); - } - } - if (x) { - if (y) { - label = 54; // extra label setting, cannot fuse here - } else { - label = 54; - } - } else { - label = 54; - } - if ((label|0) == 54) { - label = 0; - a(); - } -} -function b() { - if (x) { // will not be fused, since we did not eliminate with elses - a(); - } else { - label = 5; - } - if ((label|0) == 5) { - label = 0; - a(); - } -} -function c() { - label = x; // dynamic assign to label, suppresses label removal - if (x) { - if (y) { - f(); - } else { - label = 151; - } - } else { - label = 151; - } - if ((label|0) == 151) { - label = 0; - a(); - } -} -function d() { - if (x) { - if (y) { - f(); - } else { - label = 251; - } - } else { - label = 251; - } - if ((label|0) == 251) { - label = 0; - a(); - } - if ((label|0) == 251) { // extra check of label, suppresses label removal - a(); - } -} -function e() { - if (x) { - if (y) { - f(); - } else { - label = 351; - } - } else { - label = 351; - } - if ((label|0) == 351) { - label = 0; - a(); - } - if ((label|0) == x) { // dynamic check of label, suppresses label removal - a(); - } -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["a", "b", "c", "d"] diff --git a/tests/optimizer/test-js-optimizer-splitMemory-output.js b/tests/optimizer/test-js-optimizer-splitMemory-output.js deleted file mode 100644 index c34299434d8d1..0000000000000 --- a/tests/optimizer/test-js-optimizer-splitMemory-output.js +++ /dev/null @@ -1,7 +0,0 @@ -function f() { - var $2 = 0; - set32($0, $2 + 1); - $9 = getU8($2 | 0); - getF64(x); -} - diff --git a/tests/optimizer/test-js-optimizer-splitMemory.js b/tests/optimizer/test-js-optimizer-splitMemory.js deleted file mode 100644 index 977d207c4ff19..0000000000000 --- a/tests/optimizer/test-js-optimizer-splitMemory.js +++ /dev/null @@ -1,7 +0,0 @@ -function f() { - var $2 = 0; - HEAP32[$0 >> 2] = $2 + 1; - $9 = HEAPU8[$2 >> 0] | 0; - +HEAPF64[x >> 3]; -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["f"] diff --git a/tests/optimizer/test-no-reduce-dead-float-return-to-nothing-output.js b/tests/optimizer/test-no-reduce-dead-float-return-to-nothing-output.js deleted file mode 100644 index 930ec74717c63..0000000000000 --- a/tests/optimizer/test-no-reduce-dead-float-return-to-nothing-output.js +++ /dev/null @@ -1,11 +0,0 @@ -function test() { - var f1 = f0; - if (HEAPF32[(0 | 0) >> 2] <= HEAPF32[(1 | 0) >> 2]) { - f1 = Math_fround(+1); - return Math_fround(f1); - } else { - f1 = Math_fround(+2); - return Math_fround(f1); - } - return f0; -} diff --git a/tests/optimizer/test-no-reduce-dead-float-return-to-nothing.js b/tests/optimizer/test-no-reduce-dead-float-return-to-nothing.js deleted file mode 100644 index 4ac988a138275..0000000000000 --- a/tests/optimizer/test-no-reduce-dead-float-return-to-nothing.js +++ /dev/null @@ -1,12 +0,0 @@ -function test() { - var f1 = f0; - if (HEAPF32[(0 | 0) >> 2] <= HEAPF32[(1 | 0) >> 2]) { - f1 = Math_fround(+1); - return Math_fround(f1); - } else { - f1 = Math_fround(+2); - return Math_fround(f1); - } - return f0; -} -// EMSCRIPTEN_GENERATED_FUNCTIONS: ["test"] diff --git a/tests/test_other.py b/tests/test_other.py index 3354d04b6a037..3042ce3a8897b 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -1718,54 +1718,8 @@ def test_extern_prepost(self): def test_js_optimizer(self): ACORN_PASSES = ['JSDCE', 'AJSDCE', 'applyImportAndExportNameChanges', 'emitDCEGraph', 'applyDCEGraphRemovals', 'growableHeap', 'unsignPointers', 'asanify'] for input, expected, passes in [ - (path_from_root('tests', 'optimizer', 'test-js-optimizer.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-output.js')).read(), - ['hoistMultiples', 'removeAssignsToUndefined', 'simplifyExpressions']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-output.js')).read(), - ['asm', 'simplifyExpressions']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-si.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-si-output.js')).read(), - ['simplifyIfs']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-regs.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-regs-output.js')).read(), - ['registerize']), - (path_from_root('tests', 'optimizer', 'eliminator-test.js'), open(path_from_root('tests', 'optimizer', 'eliminator-test-output.js')).read(), - ['eliminate']), - (path_from_root('tests', 'optimizer', 'safe-eliminator-test.js'), open(path_from_root('tests', 'optimizer', 'safe-eliminator-test-output.js')).read(), - ['eliminateMemSafe']), - (path_from_root('tests', 'optimizer', 'asm-eliminator-test.js'), open(path_from_root('tests', 'optimizer', 'asm-eliminator-test-output.js')).read(), - ['asm', 'eliminate']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-regs.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-regs-output.js')).read(), - ['asm', 'registerize']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-regs-harder.js'), [open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-regs-harder-output.js')).read(), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-regs-harder-output2.js')).read(), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-regs-harder-output3.js')).read()], - ['asm', 'registerizeHarder']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-regs-min.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-regs-min-output.js')).read(), - ['asm', 'registerize', 'minifyLocals']), (path_from_root('tests', 'optimizer', 'test-js-optimizer-minifyLocals.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-minifyLocals-output.js')).read(), ['minifyLocals']), - (path_from_root('tests', 'optimizer', 'test-no-reduce-dead-float-return-to-nothing.js'), open(path_from_root('tests', 'optimizer', 'test-no-reduce-dead-float-return-to-nothing-output.js')).read(), - ['asm', 'registerizeHarder']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-last.js'), [open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-lastOpts-output.js')).read(), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-lastOpts-output2.js')).read(), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-lastOpts-output3.js')).read()], - ['asm', 'asmLastOpts']), - (path_from_root('tests', 'optimizer', 'asmLastOpts.js'), open(path_from_root('tests', 'optimizer', 'asmLastOpts-output.js')).read(), - ['asm', 'asmLastOpts']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-last.js'), [open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-last-output.js')).read(), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-last-output2.js')).read(), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-last-output3.js')).read()], - ['asm', 'asmLastOpts', 'last']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-relocate.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-relocate-output.js')).read(), - ['asm', 'relocate']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-minlast.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-minlast-output.js')).read(), - ['asm', 'minifyWhitespace', 'asmLastOpts', 'last']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-localCSE.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-localCSE-output.js')).read(), - ['asm', 'localCSE']), - (path_from_root('tests', 'optimizer', 'test-js-optimizer-ensureLabelSet.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-ensureLabelSet-output.js')).read(), - ['asm', 'ensureLabelSet']), - (path_from_root('tests', 'optimizer', '3154.js'), open(path_from_root('tests', 'optimizer', '3154-output.js')).read(), - ['asm', 'eliminate', 'registerize', 'asmLastOpts', 'last']), - (path_from_root('tests', 'optimizer', 'safeLabelSetting.js'), open(path_from_root('tests', 'optimizer', 'safeLabelSetting-output.js')).read(), - ['asm', 'safeLabelSetting']), # eliminate, just enough to trigger asm normalization/denormalization - (path_from_root('tests', 'optimizer', 'null_if.js'), [open(path_from_root('tests', 'optimizer', 'null_if-output.js')).read(), open(path_from_root('tests', 'optimizer', 'null_if-output2.js')).read()], - ['asm', 'registerizeHarder', 'asmLastOpts', 'minifyWhitespace']), # issue 3520 - (path_from_root('tests', 'optimizer', 'null_else.js'), [open(path_from_root('tests', 'optimizer', 'null_else-output.js')).read(), open(path_from_root('tests', 'optimizer', 'null_else-output2.js')).read()], - ['asm', 'registerizeHarder', 'asmLastOpts', 'minifyWhitespace']), # issue 3549 - (path_from_root('tests', 'optimizer', 'test-js-optimizer-splitMemory.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-splitMemory-output.js')).read(), - ['splitMemory']), (path_from_root('tests', 'optimizer', 'JSDCE.js'), open(path_from_root('tests', 'optimizer', 'JSDCE-output.js')).read(), ['JSDCE']), (path_from_root('tests', 'optimizer', 'JSDCE-hasOwnProperty.js'), open(path_from_root('tests', 'optimizer', 'JSDCE-hasOwnProperty-output.js')).read(), diff --git a/tools/building.py b/tools/building.py index 1840e8fc1cbe1..d0de9a28da76b 100644 --- a/tools/building.py +++ b/tools/building.py @@ -1288,12 +1288,6 @@ def wasm2js(js_file, wasm_file, opt_level, minify_whitespace, use_closure_compil # JS optimizations if opt_level >= 2: passes = [] - # it may be useful to also run: simplifyIfs, registerize, asmLastOpts - # passes += ['simplifyExpressions'] # XXX fails on wasm3js.test_sqlite - # TODO: enable name minification with pthreads. atm wasm2js emits pthread - # helper functions outside of the asmFunc(), and they mix up minifyGlobals - # (which assumes any vars in that area are global, like var HEAP8, but - # those helpers have internal vars in a scope it doesn't understand yet) if not debug_info and not Settings.USE_PTHREADS: passes += ['minifyNames'] if minify_whitespace: diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index 3d0c622040c1a..a23e91420cbe8 100755 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -369,4123 +369,6 @@ function dumpSrc(ast) { printErr(astToSrc(ast)); } -function overwrite(x, y) { - for (var i = 0; i < y.length; i++) x[i] = y[i]; - x.length = y.length; -} - -var STACK_ALIGN = 16; - -function stackAlign(x) { - if (x % STACK_ALIGN) x += STACK_ALIGN - (x % STACK_ALIGN); - return x; -} - -// Closure compiler, when inlining, will insert assignments to -// undefined for the shared variables. However, in compiled code -// - and in library/shell code too! - we should never rely on -// undefined being assigned. So we can simply remove those assignments. -// -// Note: An inlined function that kept a large value referenced, may -// keep that references when inlined, if we remove the setting to -// undefined. This is not dangerous in compiled code, but might be -// in supporting code (for example, holding on to the HEAP when copying). -// -// This pass assumes that unGlobalize has been run, so undefined -// is now explicit. -function removeAssignsToUndefined(ast) { - traverse(ast, function(node, type) { - if (type === 'assign' && jsonCompare(node[3], ['unary-prefix', 'void', ['num', 0]])) { - return emptyNode(); - } else if (type === 'var') { - node[1] = node[1].map(function(varItem, j) { - var ident = varItem[0]; - var value = varItem[1]; - if (jsonCompare(value, UNDEFINED_NODE)) return [ident]; - return [ident, value]; - }); - } - }); - // cleanup (|x = y = void 0| leaves |x = ;| right now) - var modified = true; - while (modified) { - modified = false; - traverse(ast, function(node, type) { - if (type === 'assign' && jsonCompare(node[3], emptyNode())) { - modified = true; - return emptyNode(); - } else if (type === 'var') { - node[1] = node[1].map(function(varItem, j) { - var ident = varItem[0]; - var value = varItem[1]; - if (value && jsonCompare(value, emptyNode())) return [ident]; - return [ident, value]; - }); - } - }); - } -} - -// XXX This is an invalid optimization -// We sometimes leave some settings to label that are not needed, if later in -// the relooper we realize that we have a single entry, so no checks on label -// are actually necessary. It's easy to clean those up now. -function removeUnneededLabelSettings(ast) { - traverse(ast, function(node, type) { - if (type === 'defun') { // all of our compiled code is in defun nodes - // Find all checks - var checked = {}; - traverse(node, function(node, type) { - if (type === 'binary' && node[1] === '==' && node[2][0] === 'name' && node[2][1] === 'label') { - assert(node[3][0] === 'num'); - checked[node[3][1]] = 1; - } - }); - // Remove unneeded sets - traverse(node, function(node, type) { - if (type === 'assign' && node[2][0] === 'name' && node[2][1] === 'label') { - assert(node[3][0] === 'num'); - if (!(node[3][1] in checked)) return emptyNode(); - } - }); - } - }); -} - -// Various expression simplifications. Happens after elimination, which opens up many of these simplification opportunities. - -function makeTempParseHeap() { - return { unsigned: false, float: false, bits: 0, type: 0 }; -} - -var parseHeapTemp = makeTempParseHeap(); - -function parseHeap(name, out) { // XXX this uses parseHeapTemp by default, which is global! If between your call and your use, something else can call - that is bad - out = out || parseHeapTemp; - if (name.substr(0, 4) != 'HEAP') return false; - out.unsigned = name[4] === 'U'; - out.float = name[4] === 'F'; - out.bits = parseInt(name.substr(out.unsigned || out.float ? 5 : 4)); - out.type = !out.float ? ASM_INT : (out.bits === 64 ? ASM_DOUBLE : ASM_FLOAT); - return true; -} - -var USEFUL_BINARY_OPS = set('<<', '>>', '|', '&', '^'); -var COMPARE_OPS = set('<', '<=', '>', '>=', '==', '===', '!=', '!=='); - -function isFunctionTable(name) { - return /^FUNCTION_TABLE.*/.test(name); -} - -function simplifyExpressions(ast) { - // Simplify common expressions used to perform integer conversion operations - // in cases where no conversion is needed. - function simplifyIntegerConversions(ast) { - traverse(ast, function(node, type) { - if (type === 'binary' && node[1] === '>>' && node[3][0] === 'num' && - node[2][0] === 'binary' && node[2][1] === '<<' && node[2][3][0] === 'num' && node[3][1] === node[2][3][1]) { - // Transform (x&A)<>B to X&A. - var innerNode = node[2][2]; - var shifts = node[3][1]; - if (innerNode[0] === 'binary' && innerNode[1] === '&' && innerNode[3][0] === 'num') { - var mask = innerNode[3][1]; - if (mask << shifts >> shifts === mask) { - return innerNode; - } - } - } else if (type === 'binary' && (node[1] in BITWISE)) { - for (var i = 2; i <= 3; i++) { - var subNode = node[i]; - if (subNode[0] === 'binary' && subNode[1] === '&' && subNode[3][0] === 'num' && subNode[3][1] == 1) { - // Rewrite (X < Y) & 1 to X < Y , when it is going into a bitwise operator. We could - // remove even more (just replace &1 with |0, then subsequent passes could remove the |0) - // but v8 issue #2513 means the code would then run very slowly in chrome. - var input = subNode[2]; - if (input[0] === 'binary' && (input[1] in COMPARE_OPS)) { - node[i] = input; - } - } - } - } - }); - } - - // When there is a bunch of math like (((8+5)|0)+12)|0, only the external |0 is needed, one correction is enough. - // At each node, ((X|0)+Y)|0 can be transformed into (X+Y): The inner corrections are not needed - // TODO: Is the same is true for 0xff, 0xffff? - // Likewise, if we have |0 inside a block that will be >>'d, then the |0 is unnecessary because some - // 'useful' mathops already |0 anyhow. - - function simplifyOps(ast) { - var SAFE_BINARY_OPS; - if (asm) { - SAFE_BINARY_OPS = set('+', '-'); // division is unsafe as it creates non-ints in JS; mod is unsafe as signs matter so we can't remove |0's; mul does not nest with +,- in asm - } else { - SAFE_BINARY_OPS = set('+', '-', '*'); - } - var COERCION_REQUIRING_OPS = set('sub', 'unary-prefix'); // ops that in asm must be coerced right away - var COERCION_REQUIRING_BINARIES = set('*', '/', '%'); // binary ops that in asm must be coerced - var ZERO = ['num', 0]; - - function removeMultipleOrZero() { - var rerun = true; - while (rerun) { - rerun = false; - var stack = []; - traverse(ast, function process(node, type) { - if (type === 'binary' && node[1] === '|') { - if (node[2][0] === 'num' && node[3][0] === 'num') { - node[2][1] |= node[3][1]; - stack.push(0); - return node[2]; - } - var go = false; - if (jsonCompare(node[2], ZERO)) { - // canonicalize order - var temp = node[3]; - node[3] = node[2]; - node[2] = temp; - go = true; - } else if (jsonCompare(node[3], ZERO)) { - go = true; - } - if (!go) { - stack.push(1); - return; - } - // We might be able to remove this correction - for (var i = stack.length-1; i >= 0; i--) { - if (stack[i] >= 1) { - if (asm) { - if (stack[stack.length-1] < 2 && node[2][0] === 'call') break; // we can only remove multiple |0s on these - if (stack[stack.length-1] < 1 && (node[2][0] in COERCION_REQUIRING_OPS || - (node[2][0] === 'binary' && node[2][1] in COERCION_REQUIRING_BINARIES))) break; // we can remove |0 or >>2 - } - // we will replace ourselves with the non-zero side. Recursively process that node. - var result = jsonCompare(node[2], ZERO) ? node[3] : node[2], other; - // replace node in-place - node.length = result.length; - for (var j = 0; j < result.length; j++) { - node[j] = result[j]; - } - rerun = true; - return process(result, result[0]); - } else if (stack[i] === -1) { - break; // Too bad, we can't - } - } - stack.push(2); // From here on up, no need for this kind of correction, it's done at the top - // (Add this at the end, so it is only added if we did not remove it) - } else if (type === 'binary' && node[1] in USEFUL_BINARY_OPS) { - stack.push(1); - } else if ((type === 'binary' && node[1] in SAFE_BINARY_OPS) || type === 'num' || type === 'name') { - stack.push(0); // This node is safe in that it does not interfere with this optimization - } else if (type === 'unary-prefix' && node[1] === '~') { - stack.push(1); - } else { - stack.push(-1); // This node is dangerous! Give up if you see this before you see '1' - } - }, function() { - stack.pop(); - }); - } - } - - removeMultipleOrZero(); - - // & and heap-related optimizations - - var hasTempDoublePtr = false, rerunOrZeroPass = false; - - traverse(ast, function(node, type) { - // The "pre" visitor. Useful for detecting trees which should not - // be simplified. - if (type == 'sub' && node[1][0] == 'name' && isFunctionTable(node[1][1])) { - return null; // do not traverse subchildren here, we should not collapse 55 & 126. - } - }, function(node, type) { - // The "post" visitor. The simplifications are done in this visitor so - // that we simplify a node's operands before the node itself. This allows - // optimizations to cascade. - if (type === 'name') { - if (node[1] === 'tempDoublePtr') hasTempDoublePtr = true; - } else if (type === 'binary' && node[1] === '&' && node[3][0] === 'num') { - if (node[2][0] === 'num') return ['num', node[2][1] & node[3][1]]; - var input = node[2]; - var amount = node[3][1]; - if (input[0] === 'binary' && input[1] === '&' && input[3][0] === 'num') { - // Collapse X & 255 & 1 - node[3][1] = amount & input[3][1]; - node[2] = input[2]; - } else if (input[0] === 'sub' && input[1][0] === 'name') { - // HEAP8[..] & 255 => HEAPU8[..] - var name = input[1][1]; - if (parseHeap(name)) { - if (amount === Math.pow(2, parseHeapTemp.bits)-1) { - if (!parseHeapTemp.unsigned) { - input[1][1] = 'HEAPU' + parseHeapTemp.bits; // make unsigned - } - if (asm) { - // we cannot return HEAPU8 without a coercion, but at least we do HEAP8 & 255 => HEAPU8 | 0 - node[1] = '|'; - node[3][1] = 0; - return node; - } - return input; - } - } - } else if (input[0] === 'binary' && input[1] === '>>' && - input[2][0] === 'binary' && input[2][1] === '<<' && - input[2][3][0] === 'num' && input[3][0] === 'num' && - input[2][3][1] === input[3][1] && - (~(-1 >>> input[3][1]) & amount) == 0) { - // x << 24 >> 24 & 255 => x & 255 - return ['binary', '&', input[2][2], node[3]]; - } - } else if (type === 'binary' && node[1] === '^') { - // LLVM represents bitwise not as xor with -1. Translate it back to an actual bitwise not. - if (node[3][0] === 'unary-prefix' && node[3][1] === '-' && node[3][2][0] === 'num' && - node[3][2][1] === 1 && - !(node[2][0] == 'unary-prefix' && node[2][1] == '~')) { // avoid creating ~~~ which is confusing for asm given the role of ~~ - return ['unary-prefix', '~', node[2]]; - } - } else if (type === 'binary' && node[1] === '>>' && node[3][0] === 'num' && - node[2][0] === 'binary' && node[2][1] === '<<' && node[2][3][0] === 'num' && - node[2][2][0] === 'sub' && node[2][2][1][0] === 'name') { - // collapse HEAPU?8[..] << 24 >> 24 etc. into HEAP8[..] | 0 - var amount = node[3][1]; - var name = node[2][2][1][1]; - if (amount === node[2][3][1] && parseHeap(name)) { - if (parseHeapTemp.bits === 32 - amount) { - node[2][2][1][1] = 'HEAP' + parseHeapTemp.bits; - node[1] = '|'; - node[2] = node[2][2]; - node[3][1] = 0; - rerunOrZeroPass = true; - return node; - } - } - } else if (type === 'assign') { - // optimizations for assigning into HEAP32 specifically - if (node[1] === true && node[2][0] === 'sub' && node[2][1][0] === 'name') { - if (node[2][1][1] === 'HEAP32') { - // HEAP32[..] = x | 0 does not need the | 0 (unless it is a mandatory |0 of a call) - if (node[3][0] === 'binary' && node[3][1] === '|') { - if (node[3][2][0] === 'num' && node[3][2][1] === 0 && node[3][3][0] != 'call') { - node[3] = node[3][3]; - } else if (node[3][3][0] === 'num' && node[3][3][1] === 0 && node[3][2][0] != 'call') { - node[3] = node[3][2]; - } - } - } else if (node[2][1][1] === 'HEAP8') { - // HEAP8[..] = x & 0xff does not need the & 0xff - if (node[3][0] === 'binary' && node[3][1] === '&' && node[3][3][0] == 'num' && node[3][3][1] == 0xff) { - node[3] = node[3][2]; - } - } else if (node[2][1][1] === 'HEAP16') { - // HEAP16[..] = x & 0xffff does not need the & 0xffff - if (node[3][0] === 'binary' && node[3][1] === '&' && node[3][3][0] == 'num' && node[3][3][1] == 0xffff) { - node[3] = node[3][2]; - } - } - } - var value = node[3]; - if (value[0] === 'binary' && value[1] === '|') { - // canonicalize order of |0 to end - if (value[2][0] === 'num' && value[2][1] === 0) { - var temp = value[2]; - value[2] = value[3]; - value[3] = temp; - } - // if a seq ends in an |0, remove an external |0 - // note that it is only safe to do this in assigns, like we are doing here (return (x, y|0); is not valid) - if (value[2][0] === 'seq' && value[2][2][0] === 'binary' && value[2][2][1] in USEFUL_BINARY_OPS) { - node[3] = value[2]; - } - } - } else if (type === 'binary' && node[1] === '>>' && node[2][0] === 'num' && node[3][0] === 'num') { - // optimize num >> num, in asm we need this since we do not optimize shifts in asm.js - node[0] = 'num'; - node[1] = node[2][1] >> node[3][1]; - node.length = 2; - return node; - } else if (type === 'binary' && node[1] === '+') { - // The most common mathop is addition, e.g. in getelementptr done repeatedly. We can join all of those, - // by doing (num+num) ==> newnum. - if (node[2][0] === 'num' && node[3][0] === 'num') { - node[2][1] += node[3][1]; - return node[2]; - } - } - }); - - if (rerunOrZeroPass) removeMultipleOrZero(); - - if (asm) { - if (hasTempDoublePtr) { - var asmData = normalizeAsm(ast); - traverse(ast, function(node, type) { - if (type === 'assign') { - if (node[1] === true && node[2][0] === 'sub' && node[2][1][0] === 'name' && node[2][1][1] === 'HEAP32') { - // remove bitcasts that are now obviously pointless, e.g. - // HEAP32[$45 >> 2] = HEAPF32[tempDoublePtr >> 2] = ($14 < $28 ? $14 : $28) - $42, HEAP32[tempDoublePtr >> 2] | 0; - var value = node[3]; - if (value[0] === 'seq' && value[1][0] === 'assign' && value[1][2][0] === 'sub' && value[1][2][1][0] === 'name' && value[1][2][1][1] === 'HEAPF32' && - value[1][2][2][0] === 'binary' && value[1][2][2][2][0] === 'name' && value[1][2][2][2][1] === 'tempDoublePtr') { - // transform to HEAPF32[$45 >> 2] = ($14 < $28 ? $14 : $28) - $42; - node[2][1][1] = 'HEAPF32'; - node[3] = value[1][3]; - } - } - } else if (type === 'seq') { - // (HEAP32[tempDoublePtr >> 2] = HEAP32[$37 >> 2], +HEAPF32[tempDoublePtr >> 2]) - // ==> - // +HEAPF32[$37 >> 2] - if (node[0] === 'seq' && node[1][0] === 'assign' && node[1][2][0] === 'sub' && node[1][2][1][0] === 'name' && - (node[1][2][1][1] === 'HEAP32' || node[1][2][1][1] === 'HEAPF32') && - node[1][2][2][0] === 'binary' && node[1][2][2][2][0] === 'name' && node[1][2][2][2][1] === 'tempDoublePtr' && - node[1][3][0] === 'sub' && node[1][3][1][0] === 'name' && (node[1][3][1][1] === 'HEAP32' || node[1][3][1][1] === 'HEAPF32') && - node[2][0] !== 'seq') { // avoid (x, y, z) which can be used for tempDoublePtr on doubles for alignment fixes - if (node[1][2][1][1] === 'HEAP32') { - node[1][3][1][1] = 'HEAPF32'; - return makeAsmCoercion(node[1][3], detectType(node[2])); - } else { - node[1][3][1][1] = 'HEAP32'; - return ['binary', '|', node[1][3], ['num', 0]]; - } - } - } - }); - - // finally, wipe out remaining ones by finding cases where all assignments to X are bitcasts, and all uses are writes to - // the other heap type, then eliminate the bitcast - var bitcastVars = {}; - traverse(ast, function(node, type) { - if (type === 'assign' && node[1] === true && node[2][0] === 'name') { - var value = node[3]; - if (value[0] === 'seq' && value[1][0] === 'assign' && value[1][2][0] === 'sub' && value[1][2][1][0] === 'name' && - (value[1][2][1][1] === 'HEAP32' || value[1][2][1][1] === 'HEAPF32') && - value[1][2][2][0] === 'binary' && value[1][2][2][2][0] === 'name' && value[1][2][2][2][1] === 'tempDoublePtr') { - var name = node[2][1]; - if (!bitcastVars[name]) bitcastVars[name] = { - define_HEAP32: 0, define_HEAPF32: 0, use_HEAP32: 0, use_HEAPF32: 0, bad: false, namings: 0, defines: [], uses: [] - }; - bitcastVars[name]['define_' + value[1][2][1][1]]++; - bitcastVars[name].defines.push(node); - } - } - }); - traverse(ast, function(node, type) { - if (type === 'name' && bitcastVars[node[1]]) { - bitcastVars[node[1]].namings++; - } else if (type === 'assign' && node[1] === true) { - var value = node[3]; - if (value[0] === 'name') { - var name = value[1]; - if (bitcastVars[name]) { - var target = node[2]; - if (target[0] === 'sub' && target[1][0] === 'name' && (target[1][1] === 'HEAP32' || target[1][1] === 'HEAPF32')) { - bitcastVars[name]['use_' + target[1][1]]++; - bitcastVars[name].uses.push(node); - } - } - } - } - }); - for (var v in bitcastVars) { - var info = bitcastVars[v]; - // good variables define only one type, use only one type, have definitions and uses, and define as a different type than they use - if (info.define_HEAP32*info.define_HEAPF32 === 0 && info.use_HEAP32*info.use_HEAPF32 === 0 && - info.define_HEAP32+info.define_HEAPF32 > 0 && info.use_HEAP32+info.use_HEAPF32 > 0 && - info.define_HEAP32*info.use_HEAP32 === 0 && info.define_HEAPF32*info.use_HEAPF32 === 0 && - v in asmData.vars && info.namings === info.define_HEAP32+info.define_HEAPF32+info.use_HEAP32+info.use_HEAPF32) { - var correct = info.use_HEAP32 ? 'HEAPF32' : 'HEAP32'; - info.defines.forEach(function(define) { - define[3] = define[3][1][3]; - if (correct === 'HEAP32') { - define[3] = ['binary', '|', define[3], ['num', 0]]; - } else { - define[3] = makeAsmCoercion(define[3], ASM_FLOAT); - } - // do we want a simplifybitops on the new values here? - }); - info.uses.forEach(function(use) { - use[2][1][1] = correct; - }); - var correctType; - switch(asmData.vars[v]) { - case ASM_INT: correctType = ASM_FLOAT; break; - case ASM_FLOAT: case ASM_DOUBLE: correctType = ASM_INT; break; - } - asmData.vars[v] = correctType; - } - } - denormalizeAsm(ast, asmData); - } - } - } - - function emitsBoolean(node) { - if (node[0] === 'num') { - return node[1] === 0 || node[1] === 1; - } - if (node[0] === 'binary') return node[1] in COMPARE_OPS; - if (node[0] === 'unary-prefix') return node[1] === '!'; - if (node[0] === 'conditional') return emitsBoolean(node[2]) && emitsBoolean(node[3]); - return false; - } - - // expensive | expensive can be turned into expensive ? 1 : expensive, and - // expensive | cheap can be turned into cheap ? 1 : expensive, - // so that we can avoid the expensive computation, if it has no side effects. - function conditionalize(ast) { - var MIN_COST = 7; - traverse(ast, function(node, type) { - if (node[0] === 'binary' && (node[1] === '|' || node[1] === '&') && node[3][0] !== 'num' && node[2][0] !== 'num') { - // logical operator on two non-numerical values - var left = node[2]; - var right = node[3]; - if (!emitsBoolean(left) || !emitsBoolean(right)) return; - var leftEffects = hasSideEffects(left); - var rightEffects = hasSideEffects(right); - if (leftEffects && rightEffects) return; // both must execute - // canonicalize with side effects, if any, happening on the left - if (rightEffects) { - if (measureCost(left) < MIN_COST) return; // avoidable code is too cheap - var temp = left; - left = right; - right = temp; - } else if (leftEffects) { - if (measureCost(right) < MIN_COST) return; // avoidable code is too cheap - } else { - // no side effects, reorder based on cost estimation - var leftCost = measureCost(left); - var rightCost = measureCost(right); - if (Math.max(leftCost, rightCost) < MIN_COST) return; // avoidable code is too cheap - // canonicalize with expensive code on the right - if (leftCost > rightCost) { - var temp = left; - left = right; - right = temp; - } - } - // worth it, perform conditionalization - var ret; - if (node[1] === '|') { - ret = ['conditional', left, ['num', 1], right]; - } else { // & - ret = ['conditional', left, right, ['num', 0]]; - } - if (left[0] === 'unary-prefix' && left[1] === '!') { - ret[1] = flipCondition(left); - var temp = ret[2]; - ret[2] = ret[3]; - ret[3] = temp; - } - return ret; - } - }); - } - - function simplifyNotZero(ast) { - traverse(ast, function(node, type) { - if (node[0] in BOOLEAN_RECEIVERS) { - var boolean = node[1]; - if (boolean[0] === 'binary' && boolean[1] === '!=' && boolean[3][0] === 'num' && boolean[3][1] === 0) { - node[1] = boolean[2]; - } - } - }); - } - - traverseGeneratedFunctions(ast, function(func) { - simplifyIntegerConversions(func); - simplifyOps(func); - simplifyNotComps(func); - conditionalize(func); - simplifyNotZero(func); - }); -} - -// Checks if a coercion is necessary for asm.js, and cannot be -// removed. Receives the node, and the expression stack, which -// includes the node at the end. -function isNecessaryCoercion(node, stack) { - assert(stack[stack.length - 1] === node); - var parent = stack[stack.length - 2]; - if (!parent) return false; - if (parent[0] === 'sub') { - // We are x & mask in FUNCTION_TABLE[x & mask], and the mask - // is necessary. - return true; - } - return false; -} - -function localCSE(ast) { - // very simple CSE/GVN type optimization, factor out common expressions in a single basic block - assert(asm); - var MIN_COST = 3; - traverseGeneratedFunctions(ast, function(func) { - var asmData = normalizeAsm(func); - var counter = 0; - var optimized = false; - traverse(func, function(node, type) { - var stats = getStatements(node); - if (!stats) return; - var exps = {}; // JSON'd expression => [i it first appears on, original node, replacement var, type, sign] - var deps = {}; // dependency (local name, or 'memory' or 'global') - function invalidate(what) { - var list = deps[what]; - if (!list) return; - for (var i = 0; i < list.length; i++) { - delete exps[list[i]]; - } - delete deps[what]; - } - function doInvalidations(curr) { - return traverse(curr, function(node, type) { - if (type in CONTROL_FLOW) { - exps = {}; - deps = {}; - return true; // abort everything - } - if (type === 'assign') { - var target = node[2]; - if (target[0] === 'name') { - var name = target[1]; - if (name in asmData.params || name in asmData.vars) { - invalidate(name); - } else { - invalidate(''); - } - } else { - assert(target[0] === 'sub'); - invalidate(''); - } - } - if (type === 'call') { - invalidate(''); - invalidate(''); - } - }); - } - for (var i = 0; i < stats.length; i++) { - var curr = stats[i]; - // first, look at the entire line and invalidate what we need to - if (doInvalidations(curr) === true) { - continue; // we saw control flow - } - // next, process the line and try to find useful expressions - var skips = []; - - var stack = []; - traverse(curr, function seekExpressions(node, type) { - stack.push(node); - if (type === 'sub' && node[1][0] === 'name' && node[2][0] === 'binary' && node[2][1] === '>>') { - // skip over the shift, we can't cse that - skips.push(node[2]); - return; - } - if (type === 'binary' || type === 'unary-prefix') { - if (type === 'binary' && skips.indexOf(node) >= 0) return; - if (measureCost(node) < MIN_COST) return; - if (detectType(node, asmData) === ASM_NONE) return; // if we can't figure it out locally, forget it - // We cannot CSE out a necessary asm.js coercion - if (isNecessaryCoercion(node, stack)) return; - var str = JSON.stringify(node); - var lookup = exps[str]; - if (!lookup) { - // add ourselves, and set up our deps - exps[str] = [i, node, null]; - traverse(node, function(node, type) { - var names = []; - if (type === 'name') { - var name = node[1]; - if (!(name in asmData.params || name in asmData.vars)) name = ''; - names.push(name); - } else if (type === 'sub') { - names.push(''); - } else if (type === 'call') { - names.push(''); - names.push(''); - } - names.forEach(function(name) { - if (!deps[name]) deps[name] = []; - deps[name].push(str); - }); - }); - } else { - //printErr('CSEing ' + str); - optimized = true; - var type, sign; - // with the original node plus us, this is worth optimizing out - if (lookup[2] === null) { - // this is the first node after the first. generate the saved var, and optimize out the original - lookup[2] = 'CSE$' + (counter++); - // ensure an asm coercion - type = lookup[3] = detectType(node, asmData); - sign = detectSign(node); - if (sign === ASM_FLEXIBLE) sign = ASM_SIGNED; - lookup[4] = sign; - asmData.vars[lookup[2]] = type; - overwrite(lookup[1], makeSignedAsmCoercion(['name', lookup[2]], type, sign)); - stats.splice(lookup[0], 0, ['stat', ['assign', true, ['name', lookup[2]], makeSignedAsmCoercion(node, type, sign)]]); - // adjust indexes after that splice - i++; // i must be after lookup[0] - for (var e in exps) { - var curr = exps[e]; - if (curr[2] === null) { - if (curr[0] >= lookup[0]) curr[0]++; - } - } - } else { - type = lookup[3]; - sign = lookup[4]; - } - // optimize out ourselves - return makeSignedAsmCoercion(['name', lookup[2]], type, sign); - } - } - }, function(node, type) { // post-traversal - stack.pop(); - }); - // finally, repeat invalidation processing, to not be sensitive to inter-line control flow - doInvalidations(curr); - } - }); - denormalizeAsm(func, asmData); - if (optimized) { - simplifyExpressions(func); // remove double coercions, etc. - } - }); -} - -function safeLabelSettingInternal(func, asmData) { - if ('label' in asmData.vars) { - var stats = getStatements(func); - var seenVar = false; - for (var i = 0; i < stats.length; i++) { - var curr = stats[i]; - if (curr[0] === 'stat') curr = curr[1]; - if (curr[0] === 'var') { - seenVar = true; - } else if (seenVar && curr[0] !== 'var') { - // first location after the vars - stats.splice(i, 0, ['stat', ['assign', true, ['name', 'label'], ['num', 0]]]); - break; - } - } - } -} - -function safeLabelSetting(ast) { - // Add an assign to label, if it exists, so that even after we minify/registerize variable names, we can tell if any vars use the asm init value of 0 - none will, so it's easy to tell - assert(asm); - traverseGeneratedFunctions(ast, function(func) { - var asmData = normalizeAsm(func); - safeLabelSettingInternal(func, asmData); - denormalizeAsm(func, asmData); - }); -} - -function simplifyIfs(ast) { - traverseGeneratedFunctions(ast, function(func) { - var simplifiedAnElse = false; - - traverse(func, function(node, type) { - // simplify if (x) { if (y) { .. } } to if (x ? y : 0) { .. } - if (type === 'if') { - var body = node[2]; - // recurse to handle chains - while (body[0] === 'block') { - var stats = body[1]; - if (stats.length === 0) break; - var other = stats[stats.length-1]; - if (other[0] !== 'if') { - // our if block does not end with an if. perhaps if have an else we can flip - if (node[3] && node[3][0] === 'block') { - var stats = node[3][1]; - if (stats.length === 0) break; - var other = stats[stats.length-1]; - if (other[0] === 'if') { - // flip node - node[1] = flipCondition(node[1]); - node[2] = node[3]; - node[3] = body; - body = node[2]; - } else break; - } else break; - } - // we can handle elses, but must be fully identical - if (node[3] || other[3]) { - if (!node[3]) break; - if (!astCompare(node[3], other[3])) { - // the elses are different, but perhaps if we flipped a condition we can do better - if (astCompare(node[3], other[2])) { - // flip other. note that other may not have had an else! add one if so; we will eliminate such things later - if (!other[3]) other[3] = ['block', []]; - other[1] = flipCondition(other[1]); - var temp = other[2]; - other[2] = other[3]; - other[3] = temp; - } else break; - } - } - if (stats.length > 1) { - // try to commaify - turn everything between the ifs into a comma operator inside the second if - var ok = true; - for (var i = 0; i < stats.length-1; i++) { - var curr = stats[i]; - if (curr[0] === 'stat') curr = curr[1]; - if (!(curr[0] in COMMABLE)) ok = false; - } - if (!ok) break; - for (var i = stats.length-2; i >= 0; i--) { - var curr = stats[i]; - if (curr[0] === 'stat') curr = curr[1]; - other[1] = ['seq', curr, other[1]]; - } - stats = body[1] = [other]; - } - if (stats.length !== 1) break; - if (node[3]) simplifiedAnElse = true; - node[1] = ['conditional', node[1], other[1], ['num', 0]]; - body = node[2] = other[2]; - } - } - }); - - if (simplifiedAnElse) { - // there may be fusing opportunities - - // we can only fuse if we remove all uses of the label. if there are - // other ones - if the label check can be reached from elsewhere - - // we must leave it - var abort = false; - - var labelAssigns = {}; - traverse(func, function(node, type) { - if (type === 'assign' && node[2][0] === 'name' && node[2][1] === 'label') { - if (node[3][0] === 'num') { - var value = node[3][1]; - labelAssigns[value] = (labelAssigns[value] || 0) + 1; - } else { - // label is assigned a dynamic value (like from indirectbr), we cannot do anything - abort = true; - } - } - }); - if (abort) return; - - var labelChecks = {}; - traverse(func, function(node, type) { - if (type === 'binary' && node[1] === '==' && node[2][0] === 'binary' && node[2][1] === '|' && - node[2][2][0] === 'name' && node[2][2][1] === 'label') { - if (node[3][0] === 'num') { - var value = node[3][1]; - labelChecks[value] = (labelChecks[value] || 0) + 1; - } else { - // label is checked vs a dynamic value (like from indirectbr), we cannot do anything - abort = true; - } - } - }); - if (abort) return; - - var inLoop = 0; // when in a loop, we do not emit label = 0; in the relooper as there is no need - traverse(func, function(node, type) { - if (type === 'while') inLoop++; - var stats = getStatements(node); - if (stats) { - for (var i = 0; i < stats.length-1; i++) { - var pre = stats[i]; - var post = stats[i+1]; - if (pre[0] === 'if' && pre[3] && post[0] === 'if' && !post[3]) { - var postCond = post[1]; - if (postCond[0] === 'binary' && postCond[1] === '==' && - postCond[2][0] === 'binary' && postCond[2][1] === '|' && - postCond[2][2][0] === 'name' && postCond[2][2][1] === 'label' && - postCond[2][3][0] === 'num' && postCond[2][3][1] === 0 && - postCond[3][0] === 'num') { - var postValue = postCond[3][1]; - var preElse = pre[3]; - if (labelAssigns[postValue] === 1 && labelChecks[postValue] === 1 && preElse[0] === 'block' && preElse[1] && preElse[1].length === 1) { - var preStat = preElse[1][0]; - if (preStat[0] === 'stat' && preStat[1][0] === 'assign' && - preStat[1][1] === true && preStat[1][2][0] === 'name' && preStat[1][2][1] === 'label' && - preStat[1][3][0] === 'num' && preStat[1][3][1] === postValue) { - // Conditions match, just need to make sure the post clears label - if (post[2][0] === 'block' && post[2][1] && post[2][1].length > 0) { - var postStat = post[2][1][0]; - var haveClear = - postStat[0] === 'stat' && postStat[1][0] === 'assign' && - postStat[1][1] === true && postStat[1][2][0] === 'name' && postStat[1][2][1] === 'label' && - postStat[1][3][0] === 'num' && postStat[1][3][1] === 0; - if (!inLoop || haveClear) { - // Everything lines up, do it - pre[3] = post[2]; - if (haveClear) pre[3][1].splice(0, 1); // remove the label clearing - stats.splice(i+1, 1); // remove the post entirely - } - } - } - } - } - } - } - } - }, function(node, type) { - if (type === 'while') inLoop--; - }); - } - }); -} - -// We often have branchings that are simplified so one end vanishes, and -// we then get -// if (!(x < 5)) -// or such. Simplifying these saves space and time. -function simplifyNotCompsDirect(node) { - if (node[0] === 'unary-prefix' && node[1] === '!') { - // de-morgan's laws do not work on floats, due to nans >:( - if (node[2][0] === 'binary' && (!asm || (detectType(node[2][2]) === ASM_INT && detectType(node[2][3]) === ASM_INT))) { - switch(node[2][1]) { - case '<': return ['binary', '>=', node[2][2], node[2][3]]; - case '>': return ['binary', '<=', node[2][2], node[2][3]]; - case '<=': return ['binary', '>', node[2][2], node[2][3]]; - case '>=': return ['binary', '<', node[2][2], node[2][3]]; - case '==': return ['binary', '!=', node[2][2], node[2][3]]; - case '!=': return ['binary', '==', node[2][2], node[2][3]]; - case '===': return ['binary', '!==', node[2][2], node[2][3]]; - case '!==': return ['binary', '===', node[2][2], node[2][3]]; - } - } else if (node[2][0] === 'unary-prefix' && node[2][1] === '!') { - return node[2][2]; - } - } - if (!simplifyNotCompsPass) return node; -} - -var SAFE_TO_DROP_COERCION = set('unary-prefix', 'name', 'num'); - -function canDropCoercion(node) { - if (node[0] in SAFE_TO_DROP_COERCION) return true; - if (node[0] === 'binary') { - switch (node[1]) { - case '>>': case '>>>': case '<<': case '|': case '^': case '&': return true; - } - } - return false; -} - -function simplifyCondition(node) { - node = simplifyNotCompsDirect(node); - // on integers, if (x == 0) is the same as if (x), and if (x != 0) as if (!x) - if (node[0] === 'binary' && (node[1] === '==' || node[1] === '!=')) { - var target = null; - if (detectType(node[2]) === ASM_INT && node[3][0] === 'num' && node[3][1] === 0) { - target = node[2]; - } else if (detectType(node[3]) === ASM_INT && node[2][0] === 'num' && node[2][1] === 0) { - target = node[3]; - } - if (target) { - if (target[0] === 'binary' && (target[1] === '|' || target[1] === '>>>') && target[3][0] === 'num' && target[3][1] === 0 && - canDropCoercion(target[2])) { - target = target[2]; // drop the coercion, in a condition it is ok to do if (x) - } - if (node[1] === '==') { - return ['unary-prefix', '!', target]; - } else { - return target; - } - } - } - return node; -} - -function flipCondition(cond) { - return simplifyNotCompsDirect(['unary-prefix', '!', cond]); -} - -var simplifyNotCompsPass = false; - -function simplifyNotComps(ast) { - simplifyNotCompsPass = true; - traverse(ast, simplifyNotCompsDirect); - simplifyNotCompsPass = false; -} - -function isMathFunc(name) { - return /^Math_/.test(name); -} - -function callHasSideEffects(node) { // checks if the call itself (not the args) has side effects (or is not statically known) - return !(node[1][0] === 'name' && isMathFunc(node[1][1])); -} - -function hasSideEffects(node) { // this is 99% incomplete! - switch (node[0]) { - case 'num': case 'name': case 'string': return false; - case 'unary-prefix': return hasSideEffects(node[2]); - case 'binary': return hasSideEffects(node[2]) || hasSideEffects(node[3]); - case 'sub': return hasSideEffects(node[1]) || hasSideEffects(node[2]); - case 'call': { - if (callHasSideEffects(node)) return true; - // This is a statically known call, with no side effects. only args can side effect us - var args = node[2]; - var num = args.length; - for (var i = 0; i < num; i++) { - if (hasSideEffects(args[i])) return true; - } - return false; - } - case 'conditional': return hasSideEffects(node[1]) || hasSideEffects(node[2]) || hasSideEffects(node[3]); - case 'function': case 'defun': return false; - case 'object': { - var children = node[1]; - if (!Array.isArray(children)) return false; - for (var i = 0; i < children.length; i++) { - if (hasSideEffects(children[i][1])) return true; - } - return false; - } - case 'array': { - var children = node[1]; - if (!Array.isArray(children)) return false; - for (var i = 0; i < children.length; i++) { - if (hasSideEffects(children[i])) return true; - } - return false; - } - case 'dot': { - // In theory any property access in JS can have side effects, but not in - // objects we assume are static. - if (node[1][0] === 'name') { - var name = node[1][1]; - if (name === 'Math') return false; - } - return true; - } - default: return true; - } -} - -// checks if a node has just basic operations, nothing with side effects nor that can notice side effects, which -// implies we can move it around in the code -function triviallySafeToMove(node, asmData) { - var ok = true; - traverse(node, function(node, type) { - switch (type) { - case 'stat': case 'binary': case 'unary-prefix': case 'assign': case 'num': - break; - case 'name': - if (!(node[1] in asmData.vars) && !(node[1] in asmData.params)) ok = false; - break; - case 'call': - if (callHasSideEffects(node)) ok = false; - break; - default: - ok = false; - } - }); - return ok; -} - -// Clear out empty ifs and blocks, and redundant blocks/stats and so forth -// Operates on generated functions only -function vacuum(ast) { - function isEmpty(node) { - if (!node) return true; - if (node[0] === 'toplevel' && (!node[1] || node[1].length === 0)) return true; - if (node[0] === 'block' && (!node[1] || (typeof node[1] != 'object') || node[1].length === 0 || (node[1].length === 1 && isEmpty(node[1])))) return true; - return false; - } - function simplifyList(node, si) { - var changed = false; - // Merge block items into this list, thus removing unneeded |{ .. }|'s - var statements = node[si]; - var i = 0; - while (i < statements.length) { - var subNode = statements[i]; - if (subNode[0] === 'block') { - statements.splice.apply(statements, [i, 1].concat(subNode[1] || [])); - changed = true; - } else { - i++; - } - } - // Remove empty items - var pre = node[si].length; - node[si] = node[si].filter(function(node) { return !isEmpty(node) }); - if (node[si].length < pre) changed = true; - if (changed) { - return node; - } - } - function vacuumInternal(node) { - traverseChildren(node, vacuumInternal); - var ret; - switch(node[0]) { - case 'block': { - if (node[1] && node[1].length === 1 && node[1][0][0] === 'block') { - return node[1][0]; - } else if (typeof node[1] === 'object') { - ret = simplifyList(node, 1); - if (ret) return ret; - } - } break; - case 'stat': { - if (node[1][0] === 'block') { - return node[1]; - } else if (!hasSideEffects(node[1])) { - return emptyNode(); - } - } break; - case 'defun': { - if (node[3].length === 1 && node[3][0][0] === 'block') { - node[3] = node[3][0][1]; - return node; - } else { - ret = simplifyList(node, 3); - if (ret) return ret; - } - } break; - case 'do': { - if (node[1][0] === 'num' && node[2][0] === 'toplevel' && (!node[2][1] || node[2][1].length === 0)) { - return emptyNode(); - } else if (isEmpty(node[2]) && !hasSideEffects(node[1])) { - return emptyNode(); - } - } break; - case 'label': { - if (node[2] && node[2][0] === 'toplevel' && (!node[2][1] || node[2][1].length === 0)) { - return emptyNode(); - } - } break; - case 'if': { - var empty2 = isEmpty(node[2]), empty3 = isEmpty(node[3]), has3 = node.length === 4; - if (!empty2 && empty3 && has3) { // empty else clauses - return node.slice(0, 3); - } else if (empty2 && !empty3) { // empty if blocks - return ['if', ['unary-prefix', '!', node[1]], node[3]]; - } else if (empty2 && empty3) { - if (hasSideEffects(node[1])) { - return ['stat', node[1]]; - } else { - return emptyNode(); - } - } - } break; - } - } - traverseGeneratedFunctions(ast, function(node) { - vacuumInternal(node); - simplifyNotComps(node); - removeEmptySubNodes(node); - }); -} - -function getStatements(node) { - if (node[0] === 'defun') { - return node[3]; - } else if (node[0] === 'block') { - return node[1]; - } else { - return null; - } -} - -// Multiple blocks from the relooper are, in general, implemented by -// if (label === x) { } else if .. -// and branching into them by -// if (condition) { label === x } else .. -// We can hoist the multiple block into the condition, thus removing code and one 'if' check -function hoistMultiples(ast) { - traverseGeneratedFunctions(ast, function(node) { - traverse(node, function(node, type) { - var statements = getStatements(node); - if (!statements) return; - var modified = false; - for (var i = 0; i < statements.length-1; i++) { - var modifiedI = false; - var pre = statements[i]; - if (pre[0] != 'if') continue; - var post = statements[i+1]; - // Look into some block types. shell() will then recreate the shell that we looked into - var postInner = post; - var shellLabel = false, shellDo = false; - while (true) { - if (postInner[0] === 'label') { - shellLabel = postInner[1]; - postInner = postInner[2]; - } else if (postInner[0] === 'do') { - shellDo = postInner[1]; - postInner = postInner[2][1][0]; - } else { - break; // give up - } - } - if (postInner[0] != 'if') continue; - // Look into this if, and its elseifs - while (postInner && postInner[0] === 'if') { - var cond = postInner[1]; - if (cond[0] === 'binary' && cond[1] === '==' && cond[2][0] === 'name' && cond[2][1] === 'label') { - assert(cond[3][0] === 'num'); - // We have a valid Multiple check here. Try to hoist it, look for the source in |pre| and its else's - var labelNum = cond[3][1]; - var labelBlock = postInner[2]; - assert(labelBlock[0] === 'block'); - var found = false; - traverse(pre, function(preNode, preType) { - if (!found && preType === 'assign' && preNode[2][0] === 'name' && preNode[2][1] === 'label') { - assert(preNode[3][0] === 'num'); - if (preNode[3][1] === labelNum) { - // That's it! Hoist away. We can also throw away the label setting as its goal has already been achieved - found = true; - modifiedI = true; - postInner[2] = ['block', []]; - return labelBlock; - } - } - }); - } - postInner = postInner[3]; // Proceed to look in the else clause - } - if (modifiedI) { - if (shellDo) { - statements[i] = ['do', shellDo, ['block', [statements[i]]]]; - } - if (shellLabel) { - statements[i] = ['label', shellLabel, statements[i]]; - } - } - } - if (modified) return node; - }); - - // After hoisting in this function, it is safe to remove { label = x; } blocks, because - // if they were leading to the next code right after them, they would be hoisted, and if they - // are going to some other place entirely, they would break or continue. The only risky - // situation is if the code after us is a multiple, in which case we might be checking for - // this label inside it (or in a later multiple, even) - function tryEliminate(node) { - if (node[0] === 'if') { - var replaced; - if (replaced = tryEliminate(node[2])) node[2] = replaced; - if (node[3] && (replaced = tryEliminate(node[3]))) node[3] = replaced; - } else { - if (node[0] === 'block' && node[1] && node[1].length > 0) { - var subNode = node[1][node[1].length-1]; - if (subNode[0] === 'stat' && subNode[1][0] === 'assign' && subNode[1][2][0] === 'name' && - subNode[1][2][1] === 'label' && subNode[1][3][0] === 'num') { - if (node[1].length === 1) { - return emptyNode(); - } else { - node[1].splice(node[1].length-1, 1); - return node; - } - } - } - } - return false; - } - function getActualStatement(node) { // find the actual active statement, ignoring a label and one-time do loop - if (node[0] === 'label') node = node[2]; - if (node[0] === 'do') node = node[2]; - if (node[0] === 'block' && node[1].length === 1) node = node[1][0]; - return node; - } - vacuum(node); - traverse(node, function(node, type) { - var statements = getStatements(node); - if (!statements) return; - for (var i = 0; i < statements.length-1; i++) { - var curr = getActualStatement(statements[i]); - var next = statements[i+1]; - if (curr[0] === 'if' && next[0] != 'if' && next[0] != 'label' && next[0] != 'do' && next[0] != 'while') { - tryEliminate(curr); - } - } - }); - }); - - vacuum(ast); - - // Afterpass: Reduce - // if (..) { .. break|continue } else { .. } - // to - // if (..) { .. break|continue } .. - traverseGenerated(ast, function(container, type) { - var statements = getStatements(container); - if (!statements) return; - for (var i = 0; i < statements.length; i++) { - var node = statements[i]; - if (node[0] === 'if' && node[2][0] === 'block' && node[3] && node[3][0] === 'block') { - var stat1 = node[2][1], stat2 = node[3][1]; - // If break|continue in the latter and not the former, reverse them - if (!(stat1[stat1.length-1][0] in LOOP_FLOW) && (stat2[stat2.length-1][0] in LOOP_FLOW)) { - var temp = node[3]; - node[3] = node[2]; - node[2] = temp; - node[1] = flipCondition(node[1]); - stat1 = node[2][1]; - stat2 = node[3][1]; - } - if (stat1[stat1.length-1][0] in LOOP_FLOW) { - statements.splice.apply(statements, [i+1, 0].concat(stat2)); - node[3] = null; - } - } - } - }); -} - -// Simplifies loops -// WARNING: This assumes all loops and breaks/continues are labelled -function loopOptimizer(ast) { - // Remove unneeded labels and one-time (do while(0)) loops. It is convenient to do these both at once. - function passTwo(ast) { - var neededDos = []; - // Find unneeded labels - traverseGenerated(ast, function(node, type, stack) { - if (type === 'label' && node[2][0] in LOOP) { - // this is a labelled loop. we don't know if it's needed yet. Mark its label for removal for now now. - stack.push(node); - node[1] = '+' + node[1]; - } else if (type in LOOP) { - stack.push(node); - } else if (type in LOOP_FLOW) { - // Find topmost loop, and its label if there is one - var lastLabel = null, lastLoop = null, i = stack.length-1; - while (i >= 0 && !lastLoop) { - if (stack[i][0] in LOOP) lastLoop = stack[i]; - i--; - } - assert(lastLoop, 'Cannot break/continue without a Label'); - while (i >= 0 && !lastLabel) { - if (stack[i][0] in LOOP) break; // another loop in the middle - no label for lastLoop - if (stack[i][0] === 'label') lastLabel = stack[i]; - i--; - } - var ident = node[1]; // there may not be a label ident if this is a simple break; or continue; - var plus = '+' + ident; - if (lastLabel && ident && (ident === lastLabel[1] || plus === lastLabel[1])) { - // If this is a 'do' loop, this break means we actually need it. - neededDos.push(lastLoop); - // We don't need the control flow command to have a label - it's referring to the current loop - return [node[0]]; - } else { - if (!ident) { - // No label on the break/continue, so keep the last loop alive (no need for its label though) - neededDos.push(lastLoop); - } else { - // Find the label node that needs to stay alive - stack.forEach(function(label) { - if (!label) return; - if (label[1] === plus) label[1] = label[1].substr(1); // Remove '+', marking it as needed - }); - } - } - } - }, null, []); - // We return whether another pass is necessary - var more = false; - // Remove unneeded labels - traverseGenerated(ast, function(node, type) { - if (type === 'label' && node[1][0] === '+') { - more = true; - var ident = node[1].substr(1); - // Remove label from loop flow commands - traverse(node[2], function(node2, type) { - if (type in LOOP_FLOW && node2[1] === ident) { - return [node2[0]]; - } - }); - return node[2]; // Remove the label itself on the loop - } - }); - // Remove unneeded one-time loops. We need such loops if (1) they have a label, or (2) they have a direct break so they are in neededDos. - // First, add all labeled loops of this nature to neededDos - traverseGenerated(ast, function(node, type) { - if (type === 'label' && node[2][0] === 'do') { - neededDos.push(node[2]); - } - }); - // Remove unneeded dos, we know who they are now - traverseGenerated(ast, function(node, type) { - if (type === 'do' && neededDos.indexOf(node) < 0) { - assert(jsonCompare(node[1], ['num', 0]), 'Trying to remove a one-time do loop that is not one of our generated ones.;'); - more = true; - return node[2]; - } - }); - return more; - } - - // Go - - // TODO: pass 1: Removal of unneeded continues, breaks if they get us to where we are already going. That will - // help the next pass. - - // Multiple pass two runs may be needed, as we remove one-time loops and so forth - do { - var more = passTwo(ast); - vacuum(ast); - } while (more); - - vacuum(ast); -} - -function unVarify(vars, ret) { // transform var x=1, y=2 etc. into (x=1, y=2), i.e., the same assigns, but without a var definition - ret = ret || []; - ret[0] = 'stat'; - if (vars.length === 1) { - ret[1] = ['assign', true, ['name', vars[0][0]], vars[0][1]]; - } else { - ret[1] = []; - var curr = ret[1]; - for (var i = 0; i < vars.length-1; i++) { - curr[0] = 'seq'; - curr[1] = ['assign', true, ['name', vars[i][0]], vars[i][1]]; - if (i != vars.length-2) curr = curr[2] = []; - } - curr[2] = ['assign', true, ['name', vars[vars.length-1][0]], vars[vars.length-1][1]]; - } - return ret; -} - -// asm.js support code - normalize (convert asm.js code to 'normal' JS, without -// annotations, plus explicit metadata) and denormalize (vice versa) -var ASM_INT = 0; -var ASM_DOUBLE = 1; -var ASM_FLOAT = 2; -var ASM_FLOAT32X4 = 3; -var ASM_FLOAT64X2 = 4; -var ASM_INT8X16 = 5; -var ASM_INT16X8 = 6; -var ASM_INT32X4 = 7; -var ASM_BOOL8X16 = 8; -var ASM_BOOL16X8 = 9; -var ASM_BOOL32X4 = 10; -var ASM_BOOL64X2 = 11; -var ASM_NONE = 12; - -var ASM_SIG = { - 0: 'i', - 1: 'd', - 2: 'f', - 3: 'F', - 4: 'D', - 5: 'B', - 6: 'S', - 7: 'I', - 8: 'Z', // For Bool SIMD.js types, arbitrarily use consecutive letters ZXCV. - 9: 'X', - 10: 'C', - 11: 'V', - 12: 'v' -}; - -var ASM_FLOAT_ZERO = null; // TODO: share the entire node? - -function detectType(node, asmInfo, inVarDef) { - // for params, +x vs x|0, for vars, 0.0 vs 0 - switch (node[0]) { - case 'num': { - if (node[1].toString().indexOf('.') >= 0) return ASM_DOUBLE; - return ASM_INT; - } - case 'unary-prefix': { - switch (node[1]) { - case '+': return ASM_DOUBLE; - case '-': return detectType(node[2], asmInfo, inVarDef); - case '!': case '~': return ASM_INT; - } - break; - } - case 'call': { - if (node[1][0] === 'name') { - switch (node[1][1]) { - case 'Math_fround': return ASM_FLOAT; - case 'SIMD_Float32x4': - case 'SIMD_Float32x4_check': return ASM_FLOAT32X4; - case 'SIMD_Float64x2': - case 'SIMD_Float64x2_check': return ASM_FLOAT64X2; - case 'SIMD_Int8x16': - case 'SIMD_Int8x16_check': return ASM_INT8X16; - case 'SIMD_Int16x8': - case 'SIMD_Int16x8_check': return ASM_INT16X8; - case 'SIMD_Int32x4': - case 'SIMD_Int32x4_check': return ASM_INT32X4; - case 'SIMD_Bool8x16': - case 'SIMD_Bool8x16_check': return ASM_BOOL8X16; - case 'SIMD_Bool16x8': - case 'SIMD_Bool16x8_check': return ASM_BOOL16X8; - case 'SIMD_Bool32x4': - case 'SIMD_Bool32x4_check': return ASM_BOOL32X4; - case 'SIMD_Bool64x2': - case 'SIMD_Bool64x2_check': return ASM_BOOL64X2; - default: break; - } - } - return ASM_NONE; - } - case 'name': { - if (asmInfo) { - var ret = getAsmType(node[1], asmInfo); - if (ret !== ASM_NONE) return ret; - } - if (!inVarDef) { - if (ASM_FLOAT_ZERO && ASM_FLOAT_ZERO === node[1]) return ASM_FLOAT; - switch (node[1]) { - case 'inf': case 'nan': return ASM_DOUBLE; // TODO: when minified - case 'tempRet0': return ASM_INT; - } - return ASM_NONE; - } - // We are in a variable definition, where Math_fround(0) optimized into a global constant becomes f0 = Math_fround(0) - if (!ASM_FLOAT_ZERO) ASM_FLOAT_ZERO = node[1]; - else assert(ASM_FLOAT_ZERO === node[1]); - return ASM_FLOAT; - } - case 'binary': { - switch (node[1]) { - case '+': case '-': - case '*': case '/': case '%': { - var ret = detectType(node[2], asmInfo, inVarDef); - if (ret !== ASM_NONE) return ret; - return detectType(node[3], asmInfo, inVarDef) - } - case '|': case '&': case '^': case '<<': case '>>': case '>>>': - case '==': case '!=': case '<': case '<=': case '>': case '>=': { - return ASM_INT; - } - } - break; - } - case 'conditional': case 'seq': { - return detectType(node[2], asmInfo, inVarDef); - } - case 'sub': { - assert(node[1][0] === 'name'); - if (!parseHeap(node[1][1])) return ASM_NONE; - return parseHeapTemp.float ? ASM_DOUBLE : ASM_INT; // XXX ASM_FLOAT? - } - case 'stat': return ASM_NONE; - } - assert(0 , 'horrible ' + JSON.stringify(node)); -} - -function isAsmCoercion(node) { - if (node[0] === 'binary' && ((node[1] === '|' && node[3][0] === 'num' && node[3][1] === 0) || - (node[1] === '>>>' && node[3][0] === 'num' && node[3][1] === 0))) return true; - if (node[0] === 'unary-prefix' && (node[1] === '+' || (node[1] === '~' && node[2][0] === 'unary-prefix' && node[2][1] === '~'))) return true; - return false; -} - -function makeAsmCoercion(node, type) { - switch (type) { - case ASM_INT: return ['binary', '|', node, ['num', 0]]; - case ASM_DOUBLE: return ['unary-prefix', '+', node]; - case ASM_FLOAT: return ['call', ['name', 'Math_fround'], [node]]; - case ASM_FLOAT32X4: return ['call', ['name', 'SIMD_Float32x4_check'], [node]]; - case ASM_FLOAT64X2: return ['call', ['name', 'SIMD_Float64x2_check'], [node]]; - case ASM_INT8X16: return ['call', ['name', 'SIMD_Int8x16_check'], [node]]; - case ASM_INT16X8: return ['call', ['name', 'SIMD_Int16x8_check'], [node]]; - case ASM_INT32X4: return ['call', ['name', 'SIMD_Int32x4_check'], [node]]; - case ASM_BOOL8X16: return ['call', ['name', 'SIMD_Bool8x16_check'], [node]]; - case ASM_BOOL16X8: return ['call', ['name', 'SIMD_Bool16x8_check'], [node]]; - case ASM_BOOL32X4: return ['call', ['name', 'SIMD_Bool32x4_check'], [node]]; - case ASM_BOOL64X2: return ['call', ['name', 'SIMD_Bool64x2_check'], [node]]; - case ASM_NONE: - default: return node; // non-validating code, emit nothing XXX this is dangerous, we should only allow this when we know we are not validating - } -} - -function makeSignedAsmCoercion(node, type, sign) { - if (type !== ASM_INT || sign === ASM_SIGNED) return makeAsmCoercion(node, type); - if (sign === ASM_UNSIGNED) return ['binary', '>>>', node, ['num', 0]]; - assert(0); -} - -function makeAsmCoercedZero(type) { - switch (type) { - case ASM_INT: return ['num', 0]; - case ASM_DOUBLE: return ['unary-prefix', '+', ['num', 0]]; - case ASM_FLOAT: { - if (ASM_FLOAT_ZERO) { - return ['name', ASM_FLOAT_ZERO]; - } else { - return ['call', ['name', 'Math_fround'], [['num', 0]]]; - } - } - case ASM_FLOAT32X4: { - return ['call', ['name', 'SIMD_Float32x4'], [['num', 0], ['num', 0], ['num', 0], ['num', 0]]]; - } - case ASM_FLOAT64X2: { - return ['call', ['name', 'SIMD_Float64x2'], [['num', 0], ['num', 0]]]; - } - case ASM_INT8X16: { - return ['call', ['name', 'SIMD_Int8x16'], [['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0]]]; - } - case ASM_INT16X8: { - return ['call', ['name', 'SIMD_Int16x8'], [['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0]]]; - } - case ASM_INT32X4: { - return ['call', ['name', 'SIMD_Int32x4'], [['num', 0], ['num', 0], ['num', 0], ['num', 0]]]; - } - case ASM_BOOL8X16: { - return ['call', ['name', 'SIMD_Bool8x16'], [['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0]]]; - } - case ASM_BOOL16X8: { - return ['call', ['name', 'SIMD_Bool16x8'], [['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0], ['num', 0]]]; - } - case ASM_BOOL32X4: { - return ['call', ['name', 'SIMD_Bool32x4'], [['num', 0], ['num', 0], ['num', 0], ['num', 0]]]; - } - case ASM_BOOL64X2: { - return ['call', ['name', 'SIMD_Bool64x2'], [['num', 0], ['num', 0]]]; - } - default: throw 'wha? ' + JSON.stringify(type) + new Error().stack; - } -} - -function makeAsmVarDef(v, type) { - return [v, makeAsmCoercedZero(type)]; -} - -function getAsmType(name, asmInfo) { - if (name in asmInfo.vars) return asmInfo.vars[name]; - if (name in asmInfo.params) return asmInfo.params[name]; - return ASM_NONE; -} - -function getCombinedType(node1, node2, asmData, hint) { - var type1 = detectType(node1, asmData); - var type2 = detectType(node2, asmData); - if (type1 === ASM_NONE && type2 === ASM_NONE) { - assert(hint !== undefined); - return hint; - } - if (type1 === ASM_NONE) { - assert(type2 != ASM_NONE); - return type2; - } else if (type2 === ASM_NONE) { - assert(type1 != ASM_NONE); - return type1; - } - if (type1 !== type2) { - if (type1 === hint || type2 === hint) return hint; - assert(0, "can't figure it out " + JSON.stringify([node1, '....', node2, ' ', type1, type2, hint], null, ' ')); - } - return type1; -} - -var ASM_FLEXIBLE = 0; // small constants can be signed or unsigned, variables are also flexible -var ASM_SIGNED = 1; -var ASM_UNSIGNED = 2; -var ASM_NONSIGNED = 3; - -function detectSign(node) { - switch (node[0]) { - case 'binary': { - switch(node[1]) { - case '|': case '&': case '^': case '<<': case '>>': return ASM_SIGNED; - case '>>>': return ASM_UNSIGNED; - case '+': case '-': return ASM_FLEXIBLE; - case '*': { - // a double, unless one is a small int and the other is an int, in - // which case one is a num. that can't be a double, since then it - // would be a +num. - if (node[2][0] === 'num' || node[3][0] === 'num') return ASM_FLEXIBLE; - return ASM_NONSIGNED; - } - case '/': case '%': return ASM_NONSIGNED; // without a coercion, this is double - case '==': case '!=': case '<': case '<=': case '>': case '>=': return ASM_SIGNED; - default: throw 'yikes ' + node[1]; - } - break; - } - case 'unary-prefix': { - switch(node[1]) { - case '-': return ASM_FLEXIBLE; - case '+': return ASM_NONSIGNED; // XXX double - case '~': return ASM_SIGNED; - case '!': return ASM_FLEXIBLE; - default: throw 'yikes ' + node[1]; - } - break; - } - case 'num': { - var value = node[1]; - if (value < 0) return ASM_SIGNED; - if (value > (-1>>>0) || value % 1 !== 0) return ASM_NONSIGNED; - if (value === (value | 0)) return ASM_FLEXIBLE; - return ASM_UNSIGNED; - } - case 'name': return ASM_FLEXIBLE; - case 'conditional': case 'seq': { - return detectSign(node[2]); - } - case 'call': { - if (node[1][0] === 'name') { - switch (node[1][1]) { - case 'Math_fround': return ASM_NONSIGNED - default: break; - } - } - } - } - assert(0 , 'badd ' + JSON.stringify(node)); -} - -function getCombinedSign(node1, node2, hint) { - var sign1 = detectSign(node1); - var sign2 = detectSign(node2); - if (sign1 === ASM_FLEXIBLE && sign2 === ASM_FLEXIBLE) { - return ASM_FLEXIBLE; - } - if (sign1 === ASM_FLEXIBLE) { - assert(sign2 != ASM_FLEXIBLE); - return sign2; - } else if (sign2 === ASM_FLEXIBLE) { - assert(sign1 != ASM_FLEXIBLE); - return sign1; - } - if (sign1 === sign2) return sign1; - if (sign1 === hint || sign2 === hint) return hint; - if ((sign1 === ASM_SIGNED && sign2 === ASM_UNSIGNED) || - (sign1 === ASM_UNSIGNED && sign2 === ASM_SIGNED)) { - return ASM_FLEXIBLE; - } - assert(0, JSON.stringify([node1, ' ', node2, sign1, sign2, hint])); -} - -function getSignature(func, asmData) { - var ret = asmData.ret >= 0 ? ASM_SIG[asmData.ret] : 'v'; - for (var i = 0; i < func[2].length; i++) { - ret += ASM_SIG[asmData.params[func[2][i]]]; - } - return ret; -} - -function normalizeAsm(func) { - //printErr('pre-normalize \n\n' + astToSrc(func) + '\n\n'); - var data = { - params: {}, // ident => ASM_* type - vars: {}, // ident => ASM_* type - inlines: [], // list of inline assembly copies - ret: undefined, - }; - // process initial params - var stats = func[3]; - var i = 0; - while (i < stats.length) { - var node = stats[i]; - if (node[0] != 'stat' || node[1][0] != 'assign' || node[1][2][0] != 'name') break; - node = node[1]; - var name = node[2][1]; - if (func[2] && func[2].indexOf(name) < 0) break; // not an assign into a parameter, but a global - if (name in data.params) break; // already done that param, must be starting function body - data.params[name] = detectType(node[3]); - stats[i] = emptyNode(); - i++; - } - // process initial variable definitions - outer: - while (i < stats.length) { - var node = stats[i]; - if (node[0] != 'var') break; - for (var j = 0; j < node[1].length; j++) { - var v = node[1][j]; - var name = v[0]; - var value = v[1]; - if (!(name in data.vars)) { - data.vars[name] = detectType(value, null, true); - v.length = 1; // make an un-assigning var - } else { - assert(j === 0, 'cannot break in the middle'); - break outer; - } - } - i++; - } - // look for other var definitions and collect them - while (i < stats.length) { - traverse(stats[i], function(node, type) { - if (type === 'var') { - assert(0, 'should be no vars to fix! ' + func[1] + ' : ' + JSON.stringify(node)); - } else if (type === 'call' && node[1][0] === 'function') { - assert(!node[1][1]); // anonymous functions only - data.inlines.push(node[1]); - node[1] = ['name', 'inlinejs']; // empty out body, leave arguments, so they are eliminated/minified properly - } - }); - i++; - } - // look for final 'return' statement to get return type. - var retStmt = stats[stats.length - 1]; - if (retStmt && retStmt[0] === 'return' && retStmt[1]) { - data.ret = detectType(retStmt[1]); - } - //printErr('normalized \n\n' + astToSrc(func) + '\n\nwith: ' + JSON.stringify(data)); - return data; -} - -function denormalizeAsm(func, data) { - //printErr('pre-denormalize \n\n' + astToSrc(func) + '\n\nwith: ' + JSON.stringify(data)); - var stats = func[3]; - // Remove var definitions, if any - for (var i = 0; i < stats.length; i++) { - if (stats[i][0] === 'var') { - stats[i] = emptyNode(); - } else { - if (!isEmptyNode(stats[i])) break; - } - } - // calculate variable definitions - var varDefs = []; - for (var v in data.vars) { - varDefs.push(makeAsmVarDef(v, data.vars[v])); - } - // each param needs a line; reuse emptyNodes as much as we can - var numParams = 0; - for (var i in data.params) numParams++; - var emptyNodes = 0; - while (emptyNodes < stats.length) { - if (!isEmptyNode(stats[emptyNodes])) break; - emptyNodes++; - } - var neededEmptyNodes = numParams + (varDefs.length ? 1 : 0); // params plus one big var if there are vars - if (neededEmptyNodes > emptyNodes) { - var args = [0, 0]; - for (var i = 0; i < neededEmptyNodes - emptyNodes; i++) args[i+2] = 0; - stats.splice.apply(stats, args); - } else if (neededEmptyNodes < emptyNodes) { - stats.splice(0, emptyNodes - neededEmptyNodes); - } - // add param coercions - var next = 0; - func[2].forEach(function(param) { - stats[next++] = ['stat', ['assign', true, ['name', param], makeAsmCoercion(['name', param], data.params[param])]]; - }); - if (varDefs.length) { - stats[next] = ['var', varDefs]; - } - if (data.inlines.length > 0) { - var i = 0; - traverse(func, function(node, type) { - if (type === 'call' && node[1][0] === 'name' && node[1][1] === 'inlinejs') { - node[1] = data.inlines[i++]; // swap back in the body - } - }); - } - // ensure that there's a final 'return' statement if needed. - if (data.ret !== undefined) { - var retStmt = stats[stats.length - 1]; - if (!retStmt || retStmt[0] !== 'return') { - stats.push(['return', makeAsmCoercedZero(data.ret)]); - } - } - //printErr('denormalized \n\n' + astToSrc(func) + '\n\n'); -} - -function getFirstIndexInNormalized(func, data) { - // In a normalized asm function, return the index of the first element that is not not defs or annotation - var stats = func[3]; - var i = stats.length-1; - while (i >= 0) { - var stat = stats[i]; - if (stat[0] == 'var') break; - i--; - } - return i+1; -} - -function getStackBumpNode(ast) { - var found = null; - traverse(ast, function(node, type) { - if (type === 'assign' && node[2][0] === 'name' && node[2][1] === 'STACKTOP') { - var value = node[3]; - if (value[0] === 'name') return true; - if (value[0] == 'binary' && value[1] == '&') return; // this is an alignment fix, ignore - assert(value[0] == 'binary' && value[1] == '|' && value[2][0] == 'binary' && value[2][1] == '+' && value[2][2][0] == 'name' && value[2][2][1] == 'STACKTOP'); - if (value[2][3][0] !== 'num') return; // non-constant bump, ignore - found = node; - return true; - } - }); - return found; -} - -function getStackBumpSize(ast) { - var node = getStackBumpNode(ast); - return node ? node[3][2][3][1] : 0; -} - -// Name minification - -var RESERVED = set('do', 'if', 'in', 'for', 'new', 'try', 'var', 'env', 'let', 'case', 'else', 'enum', 'void', 'this', 'void', 'with'); -var VALID_MIN_INITS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$'; -var VALID_MIN_LATERS = VALID_MIN_INITS + '0123456789'; - -var minifiedNames = []; -var minifiedState = [0]; - -function ensureMinifiedNames(n) { // make sure the nth index in minifiedNames exists. done 100% deterministically - while (minifiedNames.length < n+1) { - // generate the current name - var name = VALID_MIN_INITS[minifiedState[0]]; - for (var i = 1; i < minifiedState.length; i++) { - name += VALID_MIN_LATERS[minifiedState[i]]; - } - if (!(name in RESERVED)) minifiedNames.push(name); - // increment the state - var i = 0; - while (1) { - minifiedState[i]++; - if (minifiedState[i] < (i === 0 ? VALID_MIN_INITS : VALID_MIN_LATERS).length) break; - // overflow - minifiedState[i] = 0; - i++; - if (i === minifiedState.length) minifiedState.push(-1); // will become 0 after increment in next loop head - } - } -} - -// Very simple 'registerization', coalescing of variables into a smaller number. -// -// We do not optimize when there are switches, so this pass only makes sense with -// relooping. -// TODO: Consider how this fits in with the rest of the optimization toolchain. Do -// we still need the eliminator? Closure? And in what order? Perhaps just -// closure simple? -function registerize(ast) { - traverseGeneratedFunctions(ast, function(fun) { - if (asm) var asmData = normalizeAsm(fun); - if (!asm) { - var hasFunction = false; - traverse(fun, function(node, type) { - if (type === 'function') hasFunction = true; - }); - if (hasFunction) { - return; // inline assembly, and not asm (where we protect it in normalize/denormalize), so abort registerize pass - } - } - // Add parameters as a first (fake) var (with assignment), so they get taken into consideration - var params = {}; // note: params are special, they can never share a register between them (see later) - if (fun[2] && fun[2].length) { - var assign = ['num', 0]; - fun[3].unshift(['var', fun[2].map(function(param) { - params[param] = 1; - return [param, assign]; - })]); - } - if (asm) { - // copy params into vars - for (var p in asmData.params) asmData.vars[p] = asmData.params[p]; - //printErr('fake params: \n\n' + astToSrc(fun) + '\n\n'); - } - // Replace all var definitions with assignments; we will add var definitions at the top after we registerize - // We also mark local variables - i.e., having a var definition - var localVars = {}; - var allVars = {}; - var hasSwitch = false; // we cannot optimize variables if there is a switch, unless in asm mode - traverse(fun, function(node, type) { - if (type === 'var') { - node[1].forEach(function(defined) { localVars[defined[0]] = 1 }); - var vars = node[1].filter(function(varr) { return varr[1] }); - if (vars.length >= 1) { - return unVarify(vars); - } else { - return emptyNode(); - } - } else if (type === 'switch') { - hasSwitch = true; - } else if (type === 'name') { - allVars[node[1]] = 1; - } - }); - vacuum(fun); - var regTypes = {}; - function getNewRegName(num, name) { - var ret; - if (!asm) { - ret = 'r' + num; - } else { - var type = asmData.vars[name]; - switch (type) { - case ASM_INT: ret = 'i'; break; - case ASM_DOUBLE: ret = 'd'; break; - case ASM_FLOAT: ret = 'f'; break; - case ASM_FLOAT32X4: ret = 'F4'; break; - case ASM_FLOAT64X2: ret = 'F2'; break; - case ASM_INT8X16: ret = 'I16'; break; - case ASM_INT16X8: ret = 'I8'; break; - case ASM_INT32X4: ret = 'I4'; break; - case ASM_BOOL8X16: ret = 'B16'; break; - case ASM_BOOL16X8: ret = 'B8'; break; - case ASM_BOOL32X4: ret = 'B4'; break; - case ASM_BOOL64X2: ret = 'B2'; break; - case ASM_NONE: ret = 'Z'; break; - default: assert(false, 'type ' + type + ' doesn\'t have a name yet'); - } - ret += num; - regTypes[ret] = type; - } - if (ret in allVars) { - assert(ret in localVars, 'register shadows non-local name'); - } - return ret; - } - // Find the # of uses of each variable. - // While doing so, check if all a variable's uses are dominated in a simple - // way by a simple assign, if so, then we can assign its register to it - // just for its definition to its last use, and not to the entire toplevel loop, - // we call such variables "optimizable" - var varUses = {}; - var level = 1; - var levelDominations = {}; - var varLevels = {}; - var possibles = {}; - var unoptimizables = {}; - function purgeLevel() { - // Invalidate all dominating on this level, further users make it unoptimizable - for (var name in levelDominations[level]) { - varLevels[name] = 0; - } - levelDominations[level] = null; - level--; - } - traverse(fun, function possibilifier(node, type) { - if (type === 'name') { - var name = node[1]; - if (localVars[name]) { - if (!varUses[name]) varUses[name] = 0; - varUses[name]++; - if (possibles[name] && !varLevels[name]) unoptimizables[name] = 1; // used outside of simple domination - } - } else if (type === 'assign' && typeof node[1] != 'string') { - if (node[2] && node[2][0] === 'name') { - var name = node[2][1]; - // if local and not yet used, this might be optimizable if we dominate - // all other uses - if (localVars[name] && !varUses[name] && !varLevels[name]) { - possibles[name] = 1; - varLevels[name] = level; - if (!levelDominations[level]) levelDominations[level] = {}; - levelDominations[level][name] = 1; - } - } - } else if (type in CONTROL_FLOW) { - // recurse children, in the context of a loop - switch(type) { - case 'while': case 'do': { - traverse(node[1], possibilifier); - level++; - traverse(node[2], possibilifier); - purgeLevel(); - break; - } - case 'for': { - traverse(node[1], possibilifier); - for (var i = 2; i <= 4; i++) { - level++; - traverse(node[i], possibilifier); - purgeLevel(); - } - break; - } - case 'if': { - traverse(node[1], possibilifier); - level++; - traverse(node[2], possibilifier); - purgeLevel(); - if (node[3]) { - level++; - traverse(node[3], possibilifier); - purgeLevel(); - } - break; - } - case 'switch': { - traverse(node[1], possibilifier); - var cases = node[2]; - for (var i = 0; i < cases.length; i++) { - level++; - traverse(cases[i][1], possibilifier); - purgeLevel(); - } - break; - } - default: throw dumpAst(node); - } - return null; // prevent recursion into children, which we already did - } - }); - var optimizables = {}; - if (!hasSwitch || asm) { - for (var possible in possibles) { - if (!unoptimizables[possible]) optimizables[possible] = 1; - } - } - - //printErr('optimizables: ' + JSON.stringify(optimizables)); - //printErr('unoptimizables: ' + JSON.stringify(unoptimizables)); - - // Go through the function's code, assigning 'registers'. - // The only tricky bit is to keep variables locked on a register through loops, - // since they can potentially be returned to. Optimizable variables lock onto - // loops that they enter, unoptimizable variables lock in a conservative way - // into the topmost loop. - // Note that we cannot lock onto a variable in a loop if it was used and free'd - // before! (then they could overwrite us in the early part of the loop). For now - // we just use a fresh register to make sure we avoid this, but it could be - // optimized to check for safe registers (free, and not used in this loop level). - var varRegs = {}; // maps variables to the register they will use all their life - var freeRegsClasses = asm ? [[], [], [], [], [], [], [], [], [], [], [], [], []] : []; // two classes for asm, one otherwise XXX - hardcoded length - var nextReg = 1; - var fullNames = {}; - var loopRegs = {}; // for each loop nesting level, the list of bound variables - var loops = 0; // 0 is toplevel, 1 is first loop, etc - var saved = 0; - var activeOptimizables = {}; - var optimizableLoops = {}; - var paramRegs = {}; // true if the register is used by a parameter (and so needs no def at start of function; also cannot - // be shared with another param, each needs its own) - function decUse(name) { - if (!varUses[name]) return false; // no uses left, or not a relevant variable - if (optimizables[name]) activeOptimizables[name] = 1; - var reg = varRegs[name]; - if (asm) assert(name in asmData.vars, name); - var freeRegs = asm ? freeRegsClasses[asmData.vars[name]] : freeRegsClasses; - if (!reg) { - // acquire register - if (optimizables[name] && freeRegs.length > 0 && - !(params[name] && paramRegs[freeRegs[freeRegs.length-1]])) { // do not share registers between parameters - reg = freeRegs.pop(); - saved++; - } else { - reg = nextReg++; - fullNames[reg] = getNewRegName(reg, name); - if (params[name]) paramRegs[reg] = 1; - } - varRegs[name] = reg; - } - varUses[name]--; - assert(varUses[name] >= 0); - if (varUses[name] === 0) { - if (optimizables[name]) delete activeOptimizables[name]; - // If we are not in a loop, or we are optimizable and not bound to a loop - // (we might have been in one but left it), we can free the register now. - if (loops === 0 || (optimizables[name] && !optimizableLoops[name])) { - // free register - freeRegs.push(reg); - } else { - // when the relevant loop is exited, we will free the register - var releventLoop = optimizables[name] ? (optimizableLoops[name] || 1) : 1; - if (!loopRegs[releventLoop]) loopRegs[releventLoop] = []; - loopRegs[releventLoop].push(reg); - } - } - return true; - } - traverse(fun, function(node, type) { // XXX we rely on traversal order being the same as execution order here - if (type === 'name') { - var name = node[1]; - if (decUse(name)) { - node[1] = fullNames[varRegs[name]]; - } - } else if (type in LOOP) { - loops++; - // Active optimizables lock onto this loop, if not locked onto one that encloses this one - for (var name in activeOptimizables) { - if (!optimizableLoops[name]) { - optimizableLoops[name] = loops; - } - } - } - }, function(node, type) { - if (type in LOOP) { - // Free registers that were locked to this loop - if (loopRegs[loops]) { - if (asm) { - loopRegs[loops].forEach(function(loopReg) { - freeRegsClasses[regTypes[fullNames[loopReg]]].push(loopReg); - }); - } else { - freeRegsClasses = freeRegsClasses.concat(loopRegs[loops]); - } - loopRegs[loops].length = 0; - } - loops--; - } - }); - if (fun[2] && fun[2].length) { - fun[2].length = 0; // clear params, we will fill with registers - fun[3].shift(); // remove fake initial var - } - //printErr('var regs: ' + JSON.stringify(varRegs) + '\n\nparam regs: ' + JSON.stringify(paramRegs)); - if (!asm) { - if (nextReg > 1) { - var vars = []; - for (var i = 1; i < nextReg; i++) { - var reg = fullNames[i]; - if (!paramRegs[i]) { - vars.push([reg]); - } else { - fun[2].push(reg); - } - } - if (vars.length > 0) getStatements(fun).unshift(['var', vars]); - } - } else { - //printErr('unfake params: \n\n' + astToSrc(fun) + '\n\n'); - var finalAsmData = { - params: {}, - vars: {}, - inlines: asmData.inlines, - ret: asmData.ret, - }; - for (var i = 1; i < nextReg; i++) { - var reg = fullNames[i]; - var type = regTypes[reg]; - if (!paramRegs[i]) { - finalAsmData.vars[reg] = type; - } else { - finalAsmData.params[reg] = type; - fun[2].push(reg); - } - } - denormalizeAsm(fun, finalAsmData); - } - }); -} - - -// Assign variables to 'registers', coalescing them onto a smaller number of shared -// variables. -// -// This does the same job as 'registerize' above, but burns a lot more cycles trying -// to reduce the total number of register variables. Key points about the operation: -// -// * we decompose the AST into a flow graph and perform a full liveness -// analysis, to determine which variables are live at each point. -// -// * variables that are live concurrently are assigned to different registers. -// -// * variables that are linked via 'x=y' style statements are assigned the same -// register if possible, so that the redundant assignment can be removed. -// (e.g. assignments used to pass state around through loops). -// -// * any code that cannot be reached through the flow-graph is removed. -// (e.g. redundant break statements like 'break L123; break;'). -// -// * any assignments that we can prove are not subsequently used are removed. -// (e.g. unnecessary assignments to the 'label' variable). -// -function registerizeHarder(ast) { - assert(asm); - - traverseGeneratedFunctions(ast, function(fun) { - - // Do not try to process non-validating methods, like the heap replacer - var abort = false; - traverse(fun, function(node, type) { - if (type === 'new') abort = true; - }); - if (abort) return; - - // Do not process the dceable helper function for wasm, which declares - // types, we need to alive for asm2wasm - if (fun[1] == '__emscripten_dceable_type_decls') return; - - var asmData = normalizeAsm(fun); - - var localVars = asmData.vars; - for (var name in asmData.params) { - localVars[name] = asmData.params[name]; - } - - // Utilities for allocating register variables. - // We need distinct register pools for each type of variable. - - var allRegsByType = [{}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}]; // XXX - hardcoded length - var regPrefixByType = ['i', 'd', 'f', 'F4', 'F2', 'I16', 'I8', 'I4', 'B16', 'B8', 'B4', 'B2', 'n']; - var nextReg = 1; - - function createReg(forName) { - // Create a new register of type suitable for the given variable name. - var allRegs = allRegsByType[localVars[forName]]; - var reg = nextReg++; - allRegs[reg] = regPrefixByType[localVars[forName]] + reg; - return reg; - } - - // Traverse the tree in execution order and synthesize a basic flow-graph. - // It's convenient to build a kind of "dual" graph where the nodes identify - // the junctions between blocks at which control-flow may branch, and each - // basic block is an edge connecting two such junctions. - // For each junction we store: - // * set of blocks that originate at the junction - // * set of blocks that terminate at the junction - // For each block we store: - // * a single entry junction - // * a single exit junction - // * a 'use' and 'kill' set of names for the block - // * full sequence of 'name' and 'assign' nodes in the block - // * whether each such node appears as part of a larger expression - // (and therefore cannot be safely eliminated) - // * set of labels that can be used to jump to this block - - var junctions = []; - var blocks = []; - var currEntryJunction = null; - var nextBasicBlock = null; - var isInExpr = 0; - var activeLabels = [{}]; - var nextLoopLabel = null; - - var ENTRY_JUNCTION = 0; - var EXIT_JUNCTION = 1; - var ENTRY_BLOCK = 0; - - function addJunction() { - // Create a new junction, without inserting it into the graph. - // This is useful for e.g. pre-allocating an exit node. - var id = junctions.length; - junctions[id] = {id: id, inblocks: {}, outblocks: {}}; - return id; - } - - function markJunction(id) { - // Mark current traversal location as a junction. - // This makes a new basic block exiting at this position. - if (id === undefined || id === null) { - id = addJunction(); - } - joinJunction(id, true); - return id; - } - - function setJunction(id, force) { - // Set the next entry junction to the given id. - // This can be used to enter at a previously-declared point. - // You can't return to a junction with no incoming blocks - // unless the 'force' parameter is specified. - assert(nextBasicBlock.nodes.length === 0, 'refusing to abandon an in-progress basic block') - if (force || setSize(junctions[id].inblocks) > 0) { - currEntryJunction = id; - } else { - currEntryJunction = null; - } - } - - function joinJunction(id, force) { - // Complete the pending basic block by exiting at this position. - // This can be used to exit at a previously-declared point. - if (currEntryJunction !== null) { - nextBasicBlock.id = blocks.length; - nextBasicBlock.entry = currEntryJunction; - nextBasicBlock.exit = id; - junctions[currEntryJunction].outblocks[nextBasicBlock.id] = 1; - junctions[id].inblocks[nextBasicBlock.id] = 1; - blocks.push(nextBasicBlock); - } - nextBasicBlock = { id: null, entry: null, exit: null, labels: {}, nodes: [], isexpr: [], use: {}, kill: {} }; - setJunction(id, force); - return id; - } - - function pushActiveLabels(onContinue, onBreak) { - // Push the target junctions for continuing/breaking a loop. - // This should be called before traversing into a loop. - var prevLabels = activeLabels[activeLabels.length-1]; - var newLabels = copy(prevLabels); - newLabels[null] = [onContinue, onBreak]; - if (nextLoopLabel) { - newLabels[nextLoopLabel] = [onContinue, onBreak]; - nextLoopLabel = null; - } - // An unlabelled 'continue' should jump to innermost loop, - // ignoring any nested 'switch' statements. - if (onContinue === null && prevLabels[null]) { - newLabels[null][0] = prevLabels[null][0]; - } - activeLabels.push(newLabels); - } - - function popActiveLabels() { - // Pop the target junctions for continuing/breaking a loop. - // This should be called after traversing into a loop. - activeLabels.pop(); - } - - function markNonLocalJump(type, label) { - // Complete a block via 'return', 'break' or 'continue'. - // This joins the targetted junction and then sets the current junction to null. - // Any code traversed before we get back to an existing junction is dead code. - if (type === 'return') { - joinJunction(EXIT_JUNCTION); - } else { - label = label ? label : null; - var targets = activeLabels[activeLabels.length-1][label]; - assert(targets, 'jump to unknown label'); - if (type === 'continue') { - joinJunction(targets[0]); - } else if (type === 'break') { - joinJunction(targets[1]); - } else { - assert(false, 'unknown jump node type'); - } - } - currEntryJunction = null; - } - - function addUseNode(node) { - // Mark a use of the given name node in the current basic block. - assert(node[0] === 'name', 'not a use node'); - var name = node[1]; - if (name in localVars) { - nextBasicBlock.nodes.push(node); - nextBasicBlock.isexpr.push(isInExpr); - if (!nextBasicBlock.kill[name]) { - nextBasicBlock.use[name] = 1; - } - } - } - - function addKillNode(node) { - // Mark an assignment to the given name node in the current basic block. - assert(node[0] === 'assign', 'not a kill node'); - assert(node[1] === true, 'not a kill node'); - assert(node[2][0] === 'name', 'not a kill node'); - var name = node[2][1]; - if (name in localVars) { - nextBasicBlock.nodes.push(node); - nextBasicBlock.isexpr.push(isInExpr); - nextBasicBlock.kill[name] = 1; - } - } - - function lookThroughCasts(node) { - // Look through value-preserving casts, like "x | 0" => "x" - if (node[0] === 'binary' && node[1] === '|') { - if (node[3][0] === 'num' && node[3][1] === 0) { - return lookThroughCasts(node[2]); - } - } - return node; - } - - function addBlockLabel(node) { - assert(nextBasicBlock.nodes.length === 0, 'cant add label to an in-progress basic block') - if (node[0] === 'num') { - nextBasicBlock.labels[node[1]] = 1; - } - } - - function isTrueNode(node) { - // Check if the given node is statically truthy. - return (node[0] === 'num' && node[1] != 0); - } - - function isFalseNode(node) { - // Check if the given node is statically falsy. - return (node[0] === 'num' && node[1] == 0); - } - - function morphNode(node, newNode) { - // In-place morph a node into some other type of node. - var i = 0; - while (i < node.length && i < newNode.length) { - node[i] = newNode[i]; - i++; - } - while (i < newNode.length) { - node.push(newNode[i]); - i++; - } - if (node.length > newNode.length) { - node.length = newNode.length; - } - } - - function buildFlowGraph(node) { - // Recursive function to build up the flow-graph. - // It walks the tree in execution order, calling the above state-management - // functions at appropriate points in the traversal. - var type = node[0]; - - // Any code traversed without an active entry junction must be dead, - // as the resulting block could never be entered. Let's remove it. - if (currEntryJunction === null && junctions.length > 0) { - morphNode(node, ['block', []]); - return; - } - - // Traverse each node type according to its particular control-flow semantics. - switch (type) { - case 'defun': - var jEntry = markJunction(); - assert(jEntry === ENTRY_JUNCTION); - var jExit = addJunction(); - assert(jExit === EXIT_JUNCTION); - for (var i = 0; i < node[3].length; i++) { - buildFlowGraph(node[3][i]); - } - joinJunction(jExit); - break; - case 'if': - isInExpr++; - buildFlowGraph(node[1]); - isInExpr--; - var jEnter = markJunction(); - var jExit = addJunction(); - if (node[2]) { - // Detect and mark "if (label == N) { }". - if (node[1][0] === 'binary' && node[1][1] === '==') { - var lhs = lookThroughCasts(node[1][2]); - if (lhs[0] === 'name' && lhs[1] === 'label') { - addBlockLabel(lookThroughCasts(node[1][3])); - } - } - buildFlowGraph(node[2]); - } - joinJunction(jExit); - setJunction(jEnter); - if (node[3]) { - buildFlowGraph(node[3]); - } - joinJunction(jExit); - break; - case 'conditional': - isInExpr++; - // If the conditional has no side-effects, we can treat it as a single - // block, which might open up opportunities to remove it entirely. - if (!hasSideEffects(node)) { - buildFlowGraph(node[1]); - if (node[2]) { - buildFlowGraph(node[2]); - } - if (node[3]) { - buildFlowGraph(node[3]); - } - } else { - buildFlowGraph(node[1]); - var jEnter = markJunction(); - var jExit = addJunction(); - if (node[2]) { - buildFlowGraph(node[2]); - } - joinJunction(jExit); - setJunction(jEnter); - if (node[3]) { - buildFlowGraph(node[3]); - } - joinJunction(jExit); - } - isInExpr--; - break; - case 'while': - // Special-case "while (1) {}" to use fewer junctions, - // since emscripten generates a lot of these. - if (isTrueNode(node[1])) { - var jLoop = markJunction(); - var jExit = addJunction(); - pushActiveLabels(jLoop, jExit); - buildFlowGraph(node[2]); - popActiveLabels(); - joinJunction(jLoop); - setJunction(jExit); - } else { - var jCond = markJunction(); - var jLoop = addJunction(); - var jExit = addJunction(); - isInExpr++; - buildFlowGraph(node[1]); - isInExpr--; - joinJunction(jLoop); - pushActiveLabels(jCond, jExit); - buildFlowGraph(node[2]); - popActiveLabels(); - joinJunction(jCond); - // An empty basic-block linking condition exit to loop exit. - setJunction(jLoop); - joinJunction(jExit); - } - break; - case 'do': - // Special-case "do {} while (1)" and "do {} while (0)" to use - // fewer junctions, since emscripten generates a lot of these. - if (isFalseNode(node[1])) { - var jExit = addJunction(); - pushActiveLabels(jExit, jExit); - buildFlowGraph(node[2]); - popActiveLabels(); - joinJunction(jExit); - } else if (isTrueNode(node[1])) { - var jLoop = markJunction(); - var jExit = addJunction(); - pushActiveLabels(jLoop, jExit); - buildFlowGraph(node[2]); - popActiveLabels(); - joinJunction(jLoop); - setJunction(jExit); - } else { - var jLoop = markJunction(); - var jCond = addJunction(); - var jCondExit = addJunction(); - var jExit = addJunction(); - pushActiveLabels(jCond, jExit); - buildFlowGraph(node[2]); - popActiveLabels(); - joinJunction(jCond); - isInExpr++; - buildFlowGraph(node[1]); - isInExpr--; - joinJunction(jCondExit); - joinJunction(jLoop); - setJunction(jCondExit); - joinJunction(jExit); - } - break; - case 'for': - var jTest = addJunction(); - var jBody = addJunction(); - var jStep = addJunction(); - var jExit = addJunction(); - buildFlowGraph(node[1]); - joinJunction(jTest); - isInExpr++; - buildFlowGraph(node[2]); - isInExpr--; - joinJunction(jBody); - pushActiveLabels(jStep, jExit); - buildFlowGraph(node[4]); - popActiveLabels(); - joinJunction(jStep); - buildFlowGraph(node[3]); - joinJunction(jTest); - setJunction(jBody); - joinJunction(jExit); - break; - case 'label': - assert(node[2][0] in BREAK_CAPTURERS, 'label on non-loop, non-switch statement') - nextLoopLabel = node[1]; - buildFlowGraph(node[2]); - break; - case 'switch': - // Emscripten generates switch statements of a very limited - // form: all case clauses are numeric literals, and all - // case bodies end with a (maybe implicit) break. So it's - // basically equivalent to a multi-way 'if' statement. - isInExpr++; - buildFlowGraph(node[1]); - isInExpr--; - var condition = lookThroughCasts(node[1]); - var jCheckExit = markJunction(); - var jExit = addJunction(); - pushActiveLabels(null, jExit); - var hasDefault = false; - for (var i=0; i 0) { - if (node[2][i][0]) { - markNonLocalJump('return'); - } else { - joinJunction(jExit); - } - } - } - // If there was no default case, we also need an empty block - // linking straight from the test evaluation to the exit. - if (!hasDefault) { - setJunction(jCheckExit); - } - joinJunction(jExit); - popActiveLabels(); - break; - case 'return': - if (node[1]) { - isInExpr++; - buildFlowGraph(node[1]); - isInExpr--; - } - markNonLocalJump(type); - break; - case 'break': - case 'continue': - markNonLocalJump(type, node[1]); - break; - case 'assign': - isInExpr++; - buildFlowGraph(node[3]); - isInExpr--; - if (node[1] === true && node[2][0] === 'name') { - addKillNode(node); - } else { - buildFlowGraph(node[2]); - } - break; - case 'name': - addUseNode(node); - break; - case 'block': - case 'toplevel': - if (node[1]) { - for (var i = 0; i < node[1].length; i++) { - buildFlowGraph(node[1][i]); - } - } - break; - case 'stat': - buildFlowGraph(node[1]); - break; - case 'unary-prefix': - case 'unary-postfix': - isInExpr++; - buildFlowGraph(node[2]); - isInExpr--; - break; - case 'binary': - isInExpr++; - buildFlowGraph(node[2]); - buildFlowGraph(node[3]); - isInExpr--; - break; - case 'call': - isInExpr++; - buildFlowGraph(node[1]); - if (node[2]) { - for (var i = 0; i < node[2].length; i++) { - buildFlowGraph(node[2][i]); - } - } - isInExpr--; - // If the call is statically known to throw, - // treat it as a jump to function exit. - if (!isInExpr && node[1][0] === 'name') { - if (node[1][1] in FUNCTIONS_THAT_ALWAYS_THROW) { - markNonLocalJump('return'); - } - } - break; - case 'seq': - case 'sub': - isInExpr++; - buildFlowGraph(node[1]); - buildFlowGraph(node[2]); - isInExpr--; - break; - case 'dot': - case 'throw': - isInExpr++; - buildFlowGraph(node[1]); - isInExpr--; - break; - case 'num': - case 'string': - case 'var': - break; - default: - printErr(JSON.stringify(node)); - assert(false, 'unsupported node type: ' + type); - } - } - buildFlowGraph(fun); - - assert(setSize(junctions[ENTRY_JUNCTION].inblocks) === 0, 'function entry must have no incoming blocks'); - assert(setSize(junctions[EXIT_JUNCTION].outblocks) === 0, 'function exit must have no outgoing blocks'); - assert(blocks[ENTRY_BLOCK].entry === ENTRY_JUNCTION, 'block zero must be the initial block'); - - // Fix up implicit jumps done by assigning to the 'label' variable. - // If a block ends with an assignment to 'label' and there's another block - // with that value of 'label' as precondition, we tweak the flow graph so - // that the former jumps straight to the later. - - var labelledBlocks = {}; - var labelledJumps = []; - FINDLABELLEDBLOCKS: - for (var i = 0; i < blocks.length; i++) { - var block = blocks[i]; - // Does it have any labels as preconditions to its entry? - for (var labelVal in block.labels) { - // If there are multiple blocks with the same label, all bets are off. - // This seems to happen sometimes for short blocks that end with a return. - // TODO: it should be safe to merge the duplicates if they're identical. - if (labelVal in labelledBlocks) { - labelledBlocks = {}; - labelledJumps = []; - break FINDLABELLEDBLOCKS; - } - labelledBlocks[labelVal] = block; - } - // Does it assign a specific label value at exit? - if ('label' in block.kill) { - var finalNode = block.nodes[block.nodes.length - 1]; - if (finalNode[0] === 'assign' && finalNode[2][1] === 'label') { - // If labels are computed dynamically then all bets are off. - // This can happen due to indirect branching in llvm output. - if (finalNode[3][0] !== 'num') { - labelledBlocks = {}; - labelledJumps = []; - break FINDLABELLEDBLOCKS; - } - labelledJumps.push([finalNode[3][1], block]); - } else { - // If label is assigned a non-zero value elsewhere in the block - // then all bets are off. This can happen e.g. due to outlining - // saving/restoring label to the stack. - for (var j = 0; j < block.nodes.length - 1; j++) { - if (block.nodes[j][0] === 'assign' && block.nodes[j][2][1] === 'label') { - if (block.nodes[j][3][0] !== 'num' || block.nodes[j][3][1] !== 0) { - labelledBlocks = {}; - labelledJumps = []; - break FINDLABELLEDBLOCKS; - } - } - } - } - } - } - for (var labelVal in labelledBlocks) { - var block = labelledBlocks[labelVal]; - // Disconnect it from the graph, and create a - // new junction for jumps targetting this label. - delete junctions[block.entry].outblocks[block.id]; - block.entry = addJunction(); - junctions[block.entry].outblocks[block.id] = 1; - // Add a fake use of 'label' to keep it alive in predecessor. - block.use['label'] = 1; - block.nodes.unshift(['name', 'label']); - block.isexpr.unshift(1); - } - for (var i = 0; i < labelledJumps.length; i++) { - var labelVal = labelledJumps[i][0]; - var block = labelledJumps[i][1]; - var targetBlock = labelledBlocks[labelVal]; - if (targetBlock) { - // Redirect its exit to entry of the target block. - delete junctions[block.exit].inblocks[block.id]; - block.exit = targetBlock.entry; - junctions[block.exit].inblocks[block.id] = 1; - } - } - labelledBlocks = null; - labelledJumps = null; - - // Do a backwards data-flow analysis to determine the set of live - // variables at each junction, and to use this information to eliminate - // any unused assignments. - // We run two nested phases. The inner phase builds the live set for each - // junction. The outer phase uses this to try to eliminate redundant - // stores in each basic block, which might in turn affect liveness info. - - function analyzeJunction(junc) { - // Update the live set for this junction. - var live = {}; - for (var b in junc.outblocks) { - var block = blocks[b]; - var liveSucc = junctions[block.exit].live || {}; - for (var name in liveSucc) { - if (!(name in block.kill)) { - live[name] = 1; - } - } - for (var name in block.use) { - live[name] = 1; - } - } - junc.live = live; - } - - function analyzeBlock(block) { - // Update information about the behaviour of the block. - // This includes the standard 'use' and 'kill' information, - // plus a 'link' set naming values that flow through from entry - // to exit, possibly changing names via simple 'x=y' assignments. - // As we go, we eliminate assignments if the variable is not - // subsequently used. - var live = copy(junctions[block.exit].live); - var use = {}; - var kill = {}; - var link = {}; - var lastUseLoc = {}; - var firstDeadLoc = {}; - var firstKillLoc = {}; - var lastKillLoc = {}; - for (var name in live) { - link[name] = name; - lastUseLoc[name] = block.nodes.length; - firstDeadLoc[name] = block.nodes.length; - } - for (var j = block.nodes.length - 1; j >=0 ; j--) { - var node = block.nodes[j]; - if (node[0] === 'name') { - var name = node[1]; - live[name] = 1; - use[name] = j; - if (lastUseLoc[name] === undefined) { - lastUseLoc[name] = j; - firstDeadLoc[name] = j; - } - } else { - var name = node[2][1]; - // We only keep assignments if they will be subsequently used. - if (name in live) { - kill[name] = 1; - delete use[name]; - delete live[name]; - firstDeadLoc[name] = j; - firstKillLoc[name] = j; - if (lastUseLoc[name] === undefined) { - lastUseLoc[name] = j; - } - if (lastKillLoc[name] === undefined) { - lastKillLoc[name] = j; - } - // If it's an "x=y" and "y" is not live, then we can create a - // flow-through link from "y" to "x". If not then there's no - // flow-through link for "x". - var oldLink = link[name]; - if (oldLink) { - delete link[name]; - if (node[3][0] === 'name') { - if (node[3][1] in localVars) { - link[node[3][1]] = oldLink; - } - } - } - } else { - // The result of this assignment is never used, so delete it. - // We may need to keep the RHS for its value or its side-effects. - function removeUnusedNodes(j, n) { - for (var name in lastUseLoc) { - lastUseLoc[name] -= n; - } - for (var name in firstKillLoc) { - firstKillLoc[name] -= n; - } - for (var name in lastKillLoc) { - lastKillLoc[name] -= n; - } - for (var name in firstDeadLoc) { - firstDeadLoc[name] -= n; - } - block.nodes.splice(j, n); - block.isexpr.splice(j, n); - } - if (block.isexpr[j] || hasSideEffects(node[3])) { - morphNode(node, node[3]); - removeUnusedNodes(j, 1); - } else { - var numUsesInExpr = 0; - traverse(node[3], function(node, type) { - if (type === 'name' && node[1] in localVars) { - numUsesInExpr++; - } - }); - morphNode(node, ['block', []]); - j = j - numUsesInExpr; - removeUnusedNodes(j, 1 + numUsesInExpr); - } - } - } - } - block.use = use; - block.kill = kill; - block.link = link; - block.lastUseLoc = lastUseLoc; - block.firstDeadLoc = firstDeadLoc; - block.firstKillLoc = firstKillLoc; - block.lastKillLoc = lastKillLoc; - } - - var jWorklistMap = { EXIT_JUNCTION: 1 }; - var jWorklist = [EXIT_JUNCTION]; - var bWorklistMap = {}; - var bWorklist = []; - - // Be sure to visit every junction at least once. - // This avoids missing some vars because we disconnected them - // when processing the labelled jumps. - for (var i = junctions.length - 1; i >= EXIT_JUNCTION; i--) { - jWorklistMap[i] = 1; - jWorklist.push(i); - } - - while (jWorklist.length > 0) { - // Iterate on just the junctions until we get stable live sets. - // The first run of this loop will grow the live sets to their maximal size. - // Subsequent runs will shrink them based on eliminated in-block uses. - while (jWorklist.length > 0) { - var junc = junctions[jWorklist.pop()]; - delete jWorklistMap[junc.id]; - var oldLive = junc.live || null; - analyzeJunction(junc); - if (!sortedJsonCompare(oldLive, junc.live)) { - // Live set changed, updated predecessor blocks and junctions. - for (var b in junc.inblocks) { - if (!(b in bWorklistMap)) { - bWorklistMap[b] = 1; - bWorklist.push(b); - } - var jPred = blocks[b].entry; - if (!(jPred in jWorklistMap)) { - jWorklistMap[jPred] = 1; - jWorklist.push(jPred); - } - } - } - } - // Now update the blocks based on the calculated live sets. - while (bWorklist.length > 0) { - var block = blocks[bWorklist.pop()]; - delete bWorklistMap[block.id]; - var oldUse = block.use; - analyzeBlock(block); - if (!sortedJsonCompare(oldUse, block.use)) { - // The use set changed, re-process the entry junction. - if (!(block.entry in jWorklistMap)) { - jWorklistMap[block.entry] = 1; - jWorklist.push(block.entry); - } - } - } - } - - // Insist that all function parameters are alive at function entry. - // This ensures they will be assigned independent registers, even - // if they happen to be unused. - - for (var name in asmData.params) { - junctions[ENTRY_JUNCTION].live[name] = 1; - } - - // For variables that are live at one or more junctions, we assign them - // a consistent register for the entire scope of the function. Find pairs - // of variable that cannot use the same register (the "conflicts") as well - // as pairs of variables that we'd like to have share the same register - // (the "links"). - - var junctionVariables = {}; - - function initializeJunctionVariable(name) { - junctionVariables[name] = { conf: {}, link: {}, excl: {}, reg: null }; - } - - for (var i = 0; i < junctions.length; i++) { - var junc = junctions[i]; - for (var name in junc.live) { - if (!junctionVariables[name]) initializeJunctionVariable(name); - // It conflicts with all other names live at this junction. - for (var otherName in junc.live) { - if (otherName == name) continue; - junctionVariables[name].conf[otherName] = 1; - } - for (var b in junc.outblocks) { - // It conflicts with any output vars of successor blocks, - // if they're assigned before it goes dead in that block. - var block = blocks[b]; - var jSucc = junctions[block.exit]; - for (var otherName in jSucc.live) { - if (junc.live[otherName]) continue; - if (block.lastKillLoc[otherName] < block.firstDeadLoc[name]) { - if (!junctionVariables[otherName]) initializeJunctionVariable(otherName); - junctionVariables[name].conf[otherName] = 1; - junctionVariables[otherName].conf[name] = 1; - } - } - // It links with any linkages in the outgoing blocks. - var linkName = block.link[name]; - if (linkName && linkName !== name) { - if (!junctionVariables[linkName]) initializeJunctionVariable(linkName); - junctionVariables[name].link[linkName] = 1; - junctionVariables[linkName].link[name] = 1; - } - } - } - } - - // Attempt to sort the junction variables to heuristically reduce conflicts. - // Simple starting point: handle the most-conflicted variables first. - // This seems to work pretty well. - - var sortedJunctionVariables = keys(junctionVariables); - sortedJunctionVariables.sort(function(name1, name2) { - var jv1 = junctionVariables[name1]; - var jv2 = junctionVariables[name2]; - if (jv1.numConfs === undefined) { - jv1.numConfs = setSize(jv1.conf); - } - if (jv2.numConfs === undefined) { - jv2.numConfs = setSize(jv2.conf); - } - return jv2.numConfs - jv1.numConfs; - }); - - // We can now assign a register to each junction variable. - // Process them in order, trying available registers until we find - // one that works, and propagating the choice to linked/conflicted - // variables as we go. - - function tryAssignRegister(name, reg) { - // Try to assign the given register to the given variable, - // and propagate that choice throughout the graph. - // Returns true if successful, false if there was a conflict. - var jv = junctionVariables[name]; - if (jv.reg !== null) { - return jv.reg === reg; - } - if (jv.excl[reg]) { - return false; - } - jv.reg = reg; - // Exclude use of this register at all conflicting variables. - for (var confName in jv.conf) { - junctionVariables[confName].excl[reg] = 1; - } - // Try to propagate it into linked variables. - // It's not an error if we can't. - for (var linkName in jv.link) { - tryAssignRegister(linkName, reg); - } - return true; - } - - NEXTVARIABLE: - for (var i = 0; i < sortedJunctionVariables.length; i++) { - var name = sortedJunctionVariables[i]; - // It may already be assigned due to linked-variable propagation. - if (junctionVariables[name].reg !== null) { - continue NEXTVARIABLE; - } - // Try to use existing registers first. - var allRegs = allRegsByType[localVars[name]]; - for (var reg in allRegs) { - if (tryAssignRegister(name, reg)) { - continue NEXTVARIABLE; - } - } - // They're all taken, create a new one. - tryAssignRegister(name, createReg(name)); - } - - // Each basic block can now be processed in turn. - // There may be internal-use-only variables that still need a register - // assigned, but they can be treated just for this block. We know - // that all inter-block variables are in a good state thanks to - // junction variable consistency. - - for (var i = 0; i < blocks.length; i++) { - var block = blocks[i]; - if (block.nodes.length === 0) continue; - var jEnter = junctions[block.entry]; - var jExit = junctions[block.exit]; - // Mark the point at which each input reg becomes dead. - // Variables alive before this point must not be assigned - // to that register. - var inputVars = {}; - var inputDeadLoc = {}; - var inputVarsByReg = {}; - for (var name in jExit.live) { - if (!(name in block.kill)) { - inputVars[name] = 1; - var reg = junctionVariables[name].reg; - assert(reg !== null, 'input variable doesnt have a register'); - inputDeadLoc[reg] = block.firstDeadLoc[name]; - inputVarsByReg[reg] = name; - } - } - for (var name in block.use) { - if (!(name in inputVars)) { - inputVars[name] = 1; - var reg = junctionVariables[name].reg; - assert(reg !== null, 'input variable doesnt have a register'); - inputDeadLoc[reg] = block.firstDeadLoc[name]; - inputVarsByReg[reg] = name; - } - } - assert(setSize(setSub(inputVars, jEnter.live)) == 0); - // Scan through backwards, allocating registers on demand. - // Be careful to avoid conflicts with the input registers. - // We consume free registers in last-used order, which helps to - // eliminate "x=y" assignments that are the last use of "y". - var assignedRegs = {}; - var freeRegsByType = copy(allRegsByType); - // Begin with all live vars assigned per the exit junction. - for (var name in jExit.live) { - var reg = junctionVariables[name].reg; - assert(reg !== null, 'output variable doesnt have a register'); - assignedRegs[name] = reg; - delete freeRegsByType[localVars[name]][reg]; - } - for (var j = 0; j < freeRegsByType.length; j++) { - freeRegsByType[j] = keys(freeRegsByType[j]); - } - // Scan through the nodes in sequence, modifying each node in-place - // and grabbing/freeing registers as needed. - var maybeRemoveNodes = []; - for (var j = block.nodes.length - 1; j >= 0; j--) { - var node = block.nodes[j]; - var name = node[0] === 'assign' ? node[2][1] : node[1]; - var allRegs = allRegsByType[localVars[name]]; - var freeRegs = freeRegsByType[localVars[name]]; - var reg = assignedRegs[name]; - if (node[0] === 'name') { - // A use. Grab a register if it doesn't have one. - if (!reg) { - if (name in inputVars && j <= block.firstDeadLoc[name]) { - // Assignment to an input variable, must use pre-assigned reg. - reg = junctionVariables[name].reg; - assignedRegs[name] = reg; - for (var k = freeRegs.length - 1; k >= 0; k--) { - if (freeRegs[k] === reg) { - freeRegs.splice(k, 1); - break; - } - } - } else { - // Try to use one of the existing free registers. - // It must not conflict with an input register. - for (var k = freeRegs.length - 1; k >= 0; k--) { - reg = freeRegs[k]; - // Check for conflict with input registers. - if (block.firstKillLoc[name] <= inputDeadLoc[reg]) { - if (name !== inputVarsByReg[reg]) { - continue; - } - } - // Found one! - assignedRegs[name] = reg; - freeRegs.splice(k, 1); - break; - } - // If we didn't find a suitable register, create a new one. - if (!assignedRegs[name]) { - reg = createReg(name); - assignedRegs[name] = reg; - } - } - } - node[1] = allRegs[reg]; - } else { - // A kill. This frees the assigned register. - assert(reg, 'live variable doesnt have a reg?') - node[2][1] = allRegs[reg]; - freeRegs.push(reg); - delete assignedRegs[name]; - if (node[3][0] === 'name' && node[3][1] in localVars) { - maybeRemoveNodes.push([j, node]); - } - } - } - // If we managed to create any "x=x" assignments, remove them. - for (var j = 0; j < maybeRemoveNodes.length; j++) { - var node = maybeRemoveNodes[j][1]; - if (node[2][1] === node[3][1]) { - if (block.isexpr[maybeRemoveNodes[j][0]]) { - morphNode(node, node[2]); - } else { - morphNode(node, ['block', []]); - } - } - } - } - - // Assign registers to function params based on entry junction - - var paramRegs = {}; - if (fun[2]) { - for (var i = 0; i < fun[2].length; i++) { - var allRegs = allRegsByType[localVars[fun[2][i]]]; - fun[2][i] = allRegs[junctionVariables[fun[2][i]].reg]; - paramRegs[fun[2][i]] = 1; - } - } - - // That's it! - // Re-construct the function with appropriate variable definitions. - - var finalAsmData = { - params: {}, - vars: {}, - inlines: asmData.inlines, - ret: asmData.ret, - }; - for (var i = 1; i < nextReg; i++) { - var reg; - for (var type=0; type>2)]=((HEAP32[(($_sroa_0_0__idx1)>>2)])|0),HEAP32[(((tempDoublePtr)+(4))>>2)]=((HEAP32[((($_sroa_0_0__idx1)+(4))>>2)])|0),(+(HEAPF64[(tempDoublePtr)>>3]))) - // which has no side effects and is the special form of converting double to i64. - if (!(value[0] === 'seq' && value[1][0] === 'assign' && value[1][2][0] === 'sub' && value[1][2][2][0] === 'binary' && value[1][2][2][1] === '>>' && - value[1][2][2][2][0] === 'name' && value[1][2][2][2][1] === 'tempDoublePtr')) { - // If not that, then traverse and scan normally. - sideEffects = hasSideEffects(value); - } - } - if (!sideEffects) { - varsToRemove[name] = !definitions[name] ? 2 : 1; // remove it normally - sideEffectFree[name] = true; - // Each time we remove a variable with 0 uses, if its value has no - // side effects and vanishes too, then we can remove a use from variables - // appearing in it, and possibly eliminate again - if (value) { - traverse(value, function(node, type) { - if (type === 'name') { - var name = node[1]; - node[1] = ''; // we can remove this - it will never be shown, and should not be left to confuse us as we traverse - if (name in locals) { - uses[name]--; // cannot be infinite recursion since we descend an energy function - assert(uses[name] >= 0); - unprocessVariable(name); - processVariable(name); - } - } - }); - } - } else { - varsToTryToRemove[name] = 1; // try to remove it later during scanning - } - } - } - for (var name in locals) { - processVariable(name); - } - - //printErr('defs: ' + JSON.stringify(definitions)); - //printErr('uses: ' + JSON.stringify(uses)); - //printErr('values: ' + JSON.stringify(values)); - //printErr('locals: ' + JSON.stringify(locals)); - //printErr('varsToRemove: ' + JSON.stringify(varsToRemove)); - //printErr('varsToTryToRemove: ' + JSON.stringify(varsToTryToRemove)); - values = null; - //printErr('potentials: ' + JSON.stringify(potentials)); - // We can now proceed through the function. In each list of statements, we try to eliminate - var tracked = {}; - var globalsInvalidated = false; // do not repeat invalidations, until we track something new - var memoryInvalidated = false; - var callsInvalidated = false; - function track(name, value, defNode) { // add a potential that has just been defined to the tracked list, we hope to eliminate it - var usesGlobals = false, usesMemory = false, deps = {}, doesCall = false, hasDeps = false; - var ignoreName = false; // one-time ignorings of names, as first op in sub and call - traverse(value, function(node, type) { - if (type === 'name') { - if (!ignoreName) { - var name = node[1]; - if (!(name in locals)) { - usesGlobals = true; - } - if (!(name in potentials)) { // deps do not matter for potentials - they are defined once, so no complexity - deps[name] = 1; - hasDeps = true; - } - } else { - ignoreName = false; - } - } else if (type === 'sub') { - usesMemory = true; - ignoreName = true; - } else if (type === 'call') { - usesGlobals = true; - usesMemory = true; - doesCall = true; - ignoreName = true; - } else { - ignoreName = false; - } - }); - tracked[name] = { - usesGlobals: usesGlobals, - usesMemory: usesMemory, - defNode: defNode, - deps: deps, - hasDeps: hasDeps, - doesCall: doesCall - }; - globalsInvalidated = false; - memoryInvalidated = false; - callsInvalidated = false; - //printErr('track ' + [name, JSON.stringify(tracked[name])]); - } - var temp = []; - // TODO: invalidate using a sequence number for each type (if you were tracked before the last invalidation, you are cancelled). remove for.in loops - function invalidateGlobals() { - //printErr('invalidate globals'); - temp.length = 0; - for (var name in tracked) { - var info = tracked[name]; - if (info.usesGlobals) { - temp.push(name); - } - } - for (var i = 0; i < temp.length; i++) { - delete tracked[temp[i]]; - } - } - function invalidateMemory() { - //printErr('invalidate memory'); - temp.length = 0; - for (var name in tracked) { - var info = tracked[name]; - if (info.usesMemory) { - temp.push(name); - } - } - for (var i = 0; i < temp.length; i++) { - delete tracked[temp[i]]; - } - } - function invalidateByDep(dep) { - //printErr('invalidate by dep ' + dep); - temp.length = 0; - for (var name in tracked) { - var info = tracked[name]; - if (info.deps[dep]) { - temp.push(name); - } - } - for (var i = 0; i < temp.length; i++) { - delete tracked[temp[i]]; - } - } - function invalidateCalls() { - //printErr('invalidate calls'); - temp.length = 0; - for (var name in tracked) { - var info = tracked[name]; - if (info.doesCall) { - temp.push(name); - } - } - for (var i = 0; i < temp.length; i++) { - delete tracked[temp[i]]; - } - } - - // Generate the sequence of execution. This determines what is executed before what, so we know what can be reordered. Using - // that, performs invalidations and eliminations - function scan(node) { - //printErr('scan: ' + JSON.stringify(node).substr(0, 50) + ' : ' + keys(tracked)); - var abort = false; - var allowTracking = true; // false inside an if; also prevents recursing in an if - //var nesting = 1; // printErr-related - function traverseInOrder(node, ignoreSub, ignoreName) { - if (abort) return; - //nesting++; // printErr-related - //printErr(JSON.stringify(node).substr(0, 50) + ' : ' + keys(tracked) + ' : ' + [allowTracking, ignoreSub, ignoreName]); - var type = node[0]; - if (type === 'assign') { - var target = node[2]; - var value = node[3]; - var nameTarget = target[0] === 'name'; - traverseInOrder(target, true, nameTarget); // evaluate left - traverseInOrder(value); // evaluate right - // do the actual assignment - if (nameTarget) { - var name = target[1]; - if (!(name in potentials)) { - if (!(name in varsToTryToRemove)) { - // expensive check for invalidating specific tracked vars. This list is generally quite short though, because of - // how we just eliminate in short spans and abort when control flow happens TODO: history numbers instead - invalidateByDep(name); // can happen more than once per dep.. - if (!(name in locals) && !globalsInvalidated) { - invalidateGlobals(); - globalsInvalidated = true; - } - // if we can track this name (that we assign into), and it has 0 uses and we want to remove its 'var' - // definition - then remove it right now, there is no later chance - if (allowTracking && (name in varsToRemove) && uses[name] === 0) { - track(name, node[3], node); - doEliminate(name, node); - } - } else { - // replace it in-place - node.length = value.length; - for (var i = 0; i < value.length; i++) { - node[i] = value[i]; - } - varsToRemove[name] = 2; - } - } else { - if (allowTracking) track(name, node[3], node); - } - } else if (target[0] === 'sub') { - if (isTempDoublePtrAccess(target)) { - if (!globalsInvalidated) { - invalidateGlobals(); - globalsInvalidated = true; - } - } else if (!memoryInvalidated) { - invalidateMemory(); - memoryInvalidated = true; - } - } - } else if (type === 'sub') { - traverseInOrder(node[1], false, !memSafe); // evaluate inner - traverseInOrder(node[2]); // evaluate outer - // ignoreSub means we are a write (happening later), not a read - if (!ignoreSub && !isTempDoublePtrAccess(node)) { - // do the memory access - if (!callsInvalidated) { - invalidateCalls(); - callsInvalidated = true; - } - } - } else if (type === 'var') { - var vars = node[1]; - for (var i = 0; i < vars.length; i++) { - var name = vars[i][0]; - var value = vars[i][1]; - if (value) { - traverseInOrder(value); - if (name in potentials && allowTracking) { - track(name, value, node); - } else { - invalidateByDep(name); - } - if (vars.length === 1 && name in varsToTryToRemove && value) { - // replace it in-place - value = ['stat', value]; - node.length = value.length; - for (var i = 0; i < value.length; i++) { - node[i] = value[i]; - } - varsToRemove[name] = 2; - } - } - } - } else if (type === 'binary') { - var flipped = false; - if (node[1] in ASSOCIATIVE_BINARIES && !(node[2][0] in NAME_OR_NUM) && node[3][0] in NAME_OR_NUM) { // TODO recurse here? - // associatives like + and * can be reordered in the simple case of one of the sides being a name, since we assume they are all just numbers - var temp = node[2]; - node[2] = node[3]; - node[3] = temp; - flipped = true; - } - traverseInOrder(node[2]); - traverseInOrder(node[3]); - if (flipped && node[2][0] in NAME_OR_NUM) { // dunno if we optimized, but safe to flip back - and keeps the code closer to the original and more readable - var temp = node[2]; - node[2] = node[3]; - node[3] = temp; - } - } else if (type === 'name') { - if (!ignoreName) { // ignoreName means we are the name of something like a call or a sub - irrelevant for us - var name = node[1]; - if (name in tracked) { - doEliminate(name, node); - } else if (!(name in locals) && !callsInvalidated && (memSafe || !(name in HEAP_NAMES))) { // ignore HEAP8 etc when not memory safe, these are ok to - // access, e.g. SIMD_Int32x4_load(HEAP8, ...) - invalidateCalls(); - callsInvalidated = true; - } - } - } else if (type === 'unary-prefix' || type === 'unary-postfix') { - traverseInOrder(node[2]); - } else if (type in IGNORABLE_ELIMINATOR_SCAN_NODES) { - } else if (type === 'call') { - traverseInOrder(node[1], false, true); - var args = node[2]; - for (var i = 0; i < args.length; i++) { - traverseInOrder(args[i]); - } - if (callHasSideEffects(node)) { - // these two invalidations will also invalidate calls - if (!globalsInvalidated) { - invalidateGlobals(); - globalsInvalidated = true; - } - if (!memoryInvalidated) { - invalidateMemory(); - memoryInvalidated = true; - } - } - } else if (type === 'if') { - if (allowTracking) { - traverseInOrder(node[1]); // can eliminate into condition, but nowhere else - if (!callsInvalidated) { // invalidate calls, since we cannot eliminate them into an if that may not execute! - invalidateCalls(); - callsInvalidated = true; - } - - allowTracking = false; - traverseInOrder(node[2]); // 2 and 3 could be 'parallel', really.. - if (node[3]) traverseInOrder(node[3]); - allowTracking = true; - - } else { - tracked = {}; - } - } else if (type === 'block') { - var stats = node[1]; - if (stats) { - for (var i = 0; i < stats.length; i++) { - traverseInOrder(stats[i]); - } - } - } else if (type === 'stat') { - traverseInOrder(node[1]); - } else if (type === 'label') { - traverseInOrder(node[2]); - } else if (type === 'seq') { - traverseInOrder(node[1]); - traverseInOrder(node[2]); - } else if (type === 'do') { - if (node[1][0] === 'num' && node[1][1] === 0) { // one-time loop - traverseInOrder(node[2]); - } else { - tracked = {}; - } - } else if (type === 'return') { - if (node[1]) traverseInOrder(node[1]); - } else if (type === 'conditional') { - if (!callsInvalidated) { // invalidate calls, since we cannot eliminate them into a branch of an LLVM select/JS conditional that does not execute - invalidateCalls(); - callsInvalidated = true; - } - traverseInOrder(node[1]); - traverseInOrder(node[2]); - traverseInOrder(node[3]); - } else if (type === 'switch') { - traverseInOrder(node[1]); - var originalTracked = {}; - for (var o in tracked) originalTracked[o] = 1; - var cases = node[2]; - for (var i = 0; i < cases.length; i++) { - var c = cases[i]; - assert(c[0] === null || c[0][0] === 'num' || (c[0][0] === 'unary-prefix' && c[0][2][0] === 'num')); - var stats = c[1]; - for (var j = 0; j < stats.length; j++) { - traverseInOrder(stats[j]); - } - // We cannot track from one switch case into another if there are external dependencies, undo all new trackings - // Otherwise we can track, e.g. a var used in a case before assignment in another case is UB in asm.js, so no need for the assignment - // TODO: general framework here, use in if-else as well - for (var t in tracked) { - if (!(t in originalTracked)) { - var info = tracked[t]; - if (info.usesGlobals || info.usesMemory || info.hasDeps) { - delete tracked[t]; - } - } - } - } - tracked = {}; // do not track from inside the switch to outside - } else { - if (!(type in ABORTING_ELIMINATOR_SCAN_NODES)) { - printErr('unfamiliar eliminator scan node: ' + JSON.stringify(node)); - } - tracked = {}; - abort = true; - } - //nesting--; // printErr-related - } - traverseInOrder(node); - } - //var eliminationLimit = 0; // used to debugging purposes - function doEliminate(name, node) { - //if (eliminationLimit === 0) return; - //eliminationLimit--; - //printErr('elim!!!!! ' + name); - // yes, eliminate! - varsToRemove[name] = 2; // both assign and var definitions can have other vars we must clean up - var info = tracked[name]; - delete tracked[name]; - var defNode = info.defNode; - var value; - if (!sideEffectFree[name]) { - if (defNode[0] === 'var') { - defNode[1].forEach(function(pair) { - if (pair[0] === name) { - value = pair[1]; - } - }); - assert(value); - } else { // assign - value = defNode[3]; - // wipe out the assign - defNode[0] = 'toplevel'; - defNode[1] = []; - defNode.length = 2; - } - // replace this node in-place - node.length = 0; - for (var i = 0; i < value.length; i++) { - node[i] = value[i]; - } - } else { - // This has no side effects and no uses, empty it out in-place - node.length = 0; - node[0] = 'toplevel'; - node[1] = []; - } - } - traverse(func, function(block) { - // Look for statements, including while-switch pattern - var stats = getStatements(block) || (block[0] === 'while' && block[2][0] === 'switch' ? [block[2]] : stats); - if (!stats) return; - //printErr('Stats: ' + JSON.stringify(stats).substr(0,100)); - tracked = {}; - //printErr('new StatBlock'); - for (var i = 0; i < stats.length; i++) { - var node = stats[i]; - //printErr('StatBlock[' + i + '] => ' + JSON.stringify(node).substr(0,100)); - var type = node[0]; - if (type === 'stat') { - node = node[1]; - type = node[0]; - } else if (type == 'return' && i < stats.length-1) { - stats.length = i+1; // remove any code after a return - } - // Check for things that affect elimination - if (type in ELIMINATION_SAFE_NODES) { - scan(node); - } else { - tracked = {}; // not a var or assign, break all potential elimination so far - } - } - //printErr('delete StatBlock'); - }); - - var seenUses = {}, helperReplacements = {}; // for looper-helper optimization - - // clean up vars, and loop variable elimination - traverse(func, function(node, type) { - // pre - if (type === 'var') { - node[1] = node[1].filter(function(pair) { return !varsToRemove[pair[0]] }); - if (node[1].length === 0) { - // wipe out an empty |var;| - node[0] = 'toplevel'; - node[1] = []; - } - } else if (type === 'assign' && node[1] === true && node[2][0] === 'name' && node[3][0] === 'name' && node[2][1] === node[3][1]) { - // elimination led to X = X, which we can just remove - return emptyNode(); - } - }, function(node, type) { - // post - if (type === 'name') { - var name = node[1]; - if (name in helperReplacements) { - node[1] = helperReplacements[name]; - return; // no need to track this anymore, we can't loop-optimize more than once - } - // track how many uses we saw. we need to know when a variable is no longer used (hence we run this in the post) - if (!(name in seenUses)) { - seenUses[name] = 1; - } else { - seenUses[name]++; - } - } else if (type === 'while') { - if (!asm) return; - // try to remove loop helper variables specifically - var stats = node[2][1]; - var last = stats[stats.length-1]; - if (last && last[0] === 'if' && last[2][0] === 'block' && last[3] && last[3][0] === 'block') { - var ifTrue = last[2]; - var ifFalse = last[3]; - clearEmptyNodes(ifTrue[1]); - clearEmptyNodes(ifFalse[1]); - var flip = false; - if (ifFalse[1][0] && ifFalse[1][ifFalse[1].length-1][0] === 'break') { // canonicalize break in the if-true - var temp = ifFalse; - ifFalse = ifTrue; - ifTrue = temp; - flip = true; - } - if (ifTrue[1][0] && ifTrue[1][ifTrue[1].length-1][0] === 'break') { - var assigns = ifFalse[1]; - clearEmptyNodes(assigns); - var loopers = [], helpers = []; - for (var i = 0; i < assigns.length; i++) { - if (assigns[i][0] === 'stat' && assigns[i][1][0] === 'assign') { - var assign = assigns[i][1]; - if (assign[1] === true && assign[2][0] === 'name' && assign[3][0] === 'name') { - var looper = assign[2][1]; - var helper = assign[3][1]; - if (definitions[helper] === 1 && seenUses[looper] === namings[looper] && - !helperReplacements[helper] && !helperReplacements[looper]) { - loopers.push(looper); - helpers.push(helper); - } - } - } - } - // remove loop vars that are used in the rest of the else - for (var i = 0; i < assigns.length; i++) { - if (assigns[i][0] === 'stat' && assigns[i][1][0] === 'assign') { - var assign = assigns[i][1]; - if (!(assign[1] === true && assign[2][0] === 'name' && assign[3][0] === 'name') || loopers.indexOf(assign[2][1]) < 0) { - // this is not one of the loop assigns - traverse(assign, function(node, type) { - if (type === 'name') { - var index = loopers.indexOf(node[1]); - if (index < 0) index = helpers.indexOf(node[1]); - if (index >= 0) { - loopers.splice(index, 1); - helpers.splice(index, 1); - } - } - }); - } - } - } - // remove loop vars that are used in the if - traverse(ifTrue, function(node, type) { - if (type === 'name') { - var index = loopers.indexOf(node[1]); - if (index < 0) index = helpers.indexOf(node[1]); - if (index >= 0) { - loopers.splice(index, 1); - helpers.splice(index, 1); - } - } - }); - if (loopers.length === 0) return; - for (var l = 0; l < loopers.length; l++) { - var looper = loopers[l]; - var helper = helpers[l]; - // the remaining issue is whether loopers are used after the assignment to helper and before the last line (where we assign to it) - var found = -1; - for (var i = stats.length-2; i >= 0; i--) { - var curr = stats[i]; - if (curr[0] === 'stat' && curr[1][0] === 'assign') { - var currAssign = curr[1]; - if (currAssign[1] === true && currAssign[2][0] === 'name') { - var to = currAssign[2][1]; - if (to === helper) { - found = i; - break; - } - } - } - } - if (found < 0) return; - // if a loop variable is used after we assigned to the helper, we must save its value and use that. - // (note that this can happen due to elimination, if we eliminate an expression containing the - // loop var far down, past the assignment!) - // first, see if the looper and helpers overlap. Note that we check for this looper, compared to - // *ALL* the helpers. Helpers will be replaced by loopers as we eliminate them, potentially - // causing conflicts, so any helper is a concern. - var firstLooperUsage = -1; - var lastLooperUsage = -1; - var firstHelperUsage = -1; - for (var i = found+1; i < stats.length; i++) { - var curr = i < stats.length-1 ? stats[i] : last[1]; // on the last line, just look in the condition - traverse(curr, function(node, type) { - if (type === 'name') { - if (node[1] === looper) { - if (firstLooperUsage < 0) firstLooperUsage = i; - lastLooperUsage = i; - } else if (helpers.indexOf(node[1]) >= 0) { - if (firstHelperUsage < 0) firstHelperUsage = i; - } - } - }); - } - if (firstLooperUsage >= 0) { - // the looper is used, we cannot simply merge the two variables - if ((firstHelperUsage < 0 || firstHelperUsage > lastLooperUsage) && lastLooperUsage+1 < stats.length && triviallySafeToMove(stats[found], asmData) && - seenUses[helper] === namings[helper]) { - // the helper is not used, or it is used after the last use of the looper, so they do not overlap, - // and the last looper usage is not on the last line (where we could not append after it), and the - // helper is not used outside of the loop. - // just move the looper definition to after the looper's last use - stats.splice(lastLooperUsage+1, 0, stats[found]); - stats.splice(found, 1); - } else { - // they overlap, we can still proceed with the loop optimization, but we must introduce a - // loop temp helper variable - var temp = looper + '$looptemp'; - assert(!(temp in asmData.vars)); - for (var i = firstLooperUsage; i <= lastLooperUsage; i++) { - var curr = i < stats.length-1 ? stats[i] : last[1]; // on the last line, just look in the condition - traverse(curr, function looperToLooptemp(node, type) { - if (type === 'name') { - if (node[1] === looper) { - node[1] = temp; - } - } else if (type === 'assign' && node[2][0] === 'name') { - // do not traverse the assignment target, phi assignments to the loop variable must remain - traverse(node[3], looperToLooptemp); - return null; - } - }); - } - asmData.vars[temp] = asmData.vars[looper]; - stats.splice(found, 0, ['stat', ['assign', true, ['name', temp], ['name', looper]]]); - } - } - } - for (var l = 0; l < helpers.length; l++) { - for (var k = 0; k < helpers.length; k++) { - if (l != k && helpers[l] === helpers[k]) return; // it is complicated to handle a shared helper, abort - } - } - // hurrah! this is safe to do - //printErr("ELIM LOOP VAR " + JSON.stringify(loopers) + ' :: ' + JSON.stringify(helpers)); - for (var l = 0; l < loopers.length; l++) { - var looper = loopers[l]; - var helper = helpers[l]; - varsToRemove[helper] = 2; - traverse(node, function(node, type) { // replace all appearances of helper with looper - if (type === 'name' && node[1] === helper) node[1] = looper; - }); - helperReplacements[helper] = looper; // replace all future appearances of helper with looper - helperReplacements[looper] = looper; // avoid any further attempts to optimize looper in this manner (seenUses is wrong anyhow, too) - } - // simplify the if. we remove the if branch, leaving only the else - if (flip) { - last[1] = simplifyNotCompsDirect(['unary-prefix', '!', last[1]]); - var temp = last[2]; - last[2] = last[3]; - last[3] = temp; - } - if (loopers.length === assigns.length) { - last.pop(); - } else { - var elseStats = getStatements(last[3]); - for (var i = 0; i < elseStats.length; i++) { - var stat = elseStats[i]; - if (stat[0] === 'stat') stat = stat[1]; - if (stat[0] === 'assign' && stat[2][0] === 'name') { - if (loopers.indexOf(stat[2][1]) >= 0) { - elseStats[i] = emptyNode(); - } - } - } - } - } - } - } - }); - - if (asm) { - for (var v in varsToRemove) { - if (varsToRemove[v] === 2) delete asmData.vars[v]; - } - denormalizeAsm(func, asmData); - } - }); - - if (!asm) { // TODO: deprecate in non-asm too - // A class for optimizing expressions. We know that it is legitimate to collapse - // 5+7 in the generated code, as it will always be numerical, for example. XXX do we need this? here? - function ExpressionOptimizer(node) { - this.node = node; - - this.run = function() { - traverse(this.node, function(node, type) { - if (type === 'binary' && node[1] === '+') { - var names = []; - var num = 0; - var has_num = false; - var fail = false; - traverse(node, function(subNode, subType) { - if (subType === 'binary') { - if (subNode[1] !== '+') { - fail = true; - return false; - } - } else if (subType === 'name') { - names.push(subNode[1]); - return; - } else if (subType === 'num') { - num += subNode[1]; - has_num = true; - return; - } else { - fail = true; - return false; - } - }); - if (!fail && has_num) { - var ret = ['num', num]; - for (var i = 0; i < names.length; i++) { - ret = ['binary', '+', ['name', names[i]], ret]; - } - return ret; - } - } - }); - }; - } - new ExpressionOptimizer(ast).run(); - } - - removeAllEmptySubNodes(ast); -} - -function eliminateMemSafe(ast) { - eliminate(ast, true); -} - function minifyGlobals(ast) { // The input is in form // @@ -4602,6 +485,36 @@ function minifyGlobals(ast) { suffix = '// EXTRA_INFO:' + JSON.stringify(json); } +// Name minification + +var RESERVED = set('do', 'if', 'in', 'for', 'new', 'try', 'var', 'env', 'let', 'case', 'else', 'enum', 'void', 'this', 'void', 'with'); +var VALID_MIN_INITS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$'; +var VALID_MIN_LATERS = VALID_MIN_INITS + '0123456789'; + +var minifiedNames = []; +var minifiedState = [0]; + +function ensureMinifiedNames(n) { // make sure the nth index in minifiedNames exists. done 100% deterministically + while (minifiedNames.length < n+1) { + // generate the current name + var name = VALID_MIN_INITS[minifiedState[0]]; + for (var i = 1; i < minifiedState.length; i++) { + name += VALID_MIN_LATERS[minifiedState[i]]; + } + if (!(name in RESERVED)) minifiedNames.push(name); + // increment the state + var i = 0; + while (1) { + minifiedState[i]++; + if (minifiedState[i] < (i === 0 ? VALID_MIN_INITS : VALID_MIN_LATERS).length) break; + // overflow + minifiedState[i] = 0; + i++; + if (i === minifiedState.length) minifiedState.push(-1); // will become 0 after increment in next loop head + } + } +} + function minifyLocals(ast) { assert(extraInfo && extraInfo.globals); @@ -4728,544 +641,6 @@ function minifyLocals(ast) { } } }); - - }); -} - -// Relocation pass for a shared module (for the functions part of the module) -// -// 1. Replace function names with alternate names as defined (to avoid colliding with -// names in the main module we are being linked to) -// 2. Hardcode function table offsets from F_BASE+x to const+x if x is a variable, or -// the constant sum of the base + offset -// 3. Hardcode heap offsets from H_BASE as well -function relocate(ast) { - assert(asm); // we also assume we are normalized - - var replacements = extraInfo.replacements; - var fBases = extraInfo.fBases; - var hBase = extraInfo.hBase; - var m; - - traverse(ast, function(node, type) { - switch(type) { - case 'name': case 'defun': { - var rep = replacements[node[1]]; - if (rep) node[1] = rep; - break; - } - case 'binary': { - if (node[1] == '+' && node[2][0] == 'name') { - var base = null; - if (node[2][1] == 'H_BASE') { - base = hBase; - } else if (m = /^F_BASE_(\w+)$/.exec(node[2][1])) { - base = fBases[m[1]] || 0; // 0 if the parent has no function table for this, but the child does. so no relocation needed - } - if (base !== null) { - var other = node[3]; - if (base === 0) return other; - if (other[0] == 'num') { - other[1] = (other[1] + base)|0; - return other; - } else { - node[2] = ['num', base]; - } - } - } - break; - } - case 'var': { - var vars = node[1]; - for (var i = 0; i < vars.length; i++) { - var name = vars[i][0]; - assert(!(name in replacements)); // cannot shadow functions we are replacing TODO: fix that - } - break; - } - } - }); -} - -// Break up very large functions - -var NODES_WITHOUT_ELIMINATION_SENSITIVITY = set('name', 'num', 'binary', 'unary-prefix'); -var FAST_ELIMINATION_BINARIES = setUnion(setUnion(USEFUL_BINARY_OPS, COMPARE_OPS), set('+')); - -function measureSize(ast) { - var size = 0; - traverse(ast, function(node, type) { - // FIXME backwards compatibility: measure var internal node too. - if (type === 'var') { - size += node[1].length; - } - size++; - }); - return size; -} - -function measureCost(ast) { - var size = 0; - traverse(ast, function(node, type) { - if (type === 'num' || type === 'unary-prefix') size--; - else if (type === 'binary') { - if (node[3][0] === 'num' && node[3][1] === 0) size--; - else if (node[1] === '/' || node[1] === '%') size += 2; - } - else if (type === 'call' && !callHasSideEffects(node)) size -= 2; - else if (type === 'sub') size++; - size++; - }); - return size; -} - -function fixPtr(ptr, heap) { - switch (heap) { - case 'HEAP8': case 'HEAPU8': break; - case 'HEAP16': case 'HEAPU16': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 1) { - ptr = ptr[2]; // skip the shift - } else { - ptr = ['binary', '*', ptr, ['num', 2]]; // was unshifted, convert to absolute address - } - break; - } - case 'HEAP32': case 'HEAPU32': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 2) { - ptr = ptr[2]; // skip the shift - } else { - ptr = ['binary', '*', ptr, ['num', 4]]; // was unshifted, convert to absolute address - } - break; - } - case 'HEAPF32': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 2) { - ptr = ptr[2]; // skip the shift - } else { - ptr = ['binary', '*', ptr, ['num', 4]]; // was unshifted, convert to absolute address - } - break; - } - case 'HEAPF64': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 3) { - ptr = ptr[2]; // skip the shift - } else { - ptr = ['binary', '*', ptr, ['num', 8]]; // was unshifted, convert to absolute address - } - break; - } - default: { - return ptr; // unchanged - } - } - ptr = ['binary', '|', ptr, ['num', 0]]; - return ptr; -} - -function safeHeap(ast) { - var SAFE_HEAP_FUNCS = set('SAFE_HEAP_LOAD', 'SAFE_HEAP_LOAD_D', 'SAFE_HEAP_STORE', 'SAFE_HEAP_STORE_D', 'SAFE_FT_MASK'); - traverseGeneratedFunctions(ast, function(func) { - if (func[1] in SAFE_HEAP_FUNCS) return null; - traverseGenerated(func, function(node, type) { - var heap, ptr; - if (type === 'assign') { - if (node[1] === true && node[2][0] === 'sub') { - heap = node[2][1][1]; - ptr = fixPtr(node[2][2], heap); - var value = node[3]; - // SAFE_HEAP_STORE(ptr, value, bytes, isFloat) - switch (heap) { - case 'HEAP8': case 'HEAPU8': { - return ['call', ['name', 'SAFE_HEAP_STORE'], [ptr, makeAsmCoercion(value, ASM_INT), ['num', 1]]]; - } - case 'HEAP16': case 'HEAPU16': { - return ['call', ['name', 'SAFE_HEAP_STORE'], [ptr, makeAsmCoercion(value, ASM_INT), ['num', 2]]]; - } - case 'HEAP32': case 'HEAPU32': { - return ['call', ['name', 'SAFE_HEAP_STORE'], [ptr, makeAsmCoercion(value, ASM_INT), ['num', 4]]]; - } - case 'HEAPF32': { - return ['call', ['name', 'SAFE_HEAP_STORE_D'], [ptr, makeAsmCoercion(value, ASM_DOUBLE), ['num', 4]]]; - } - case 'HEAPF64': { - return ['call', ['name', 'SAFE_HEAP_STORE_D'], [ptr, makeAsmCoercion(value, ASM_DOUBLE), ['num', 8]]]; - } - default: throw 'bad heap ' + heap; - } - } - } else if (type === 'sub') { - var target = node[1][1]; - if (target[0] === 'H') { - // heap access - heap = target; - ptr = fixPtr(node[2], heap); - // SAFE_HEAP_LOAD(ptr, bytes, isFloat) - switch (heap) { - case 'HEAP8': { - return makeAsmCoercion(['call', ['name', 'SAFE_HEAP_LOAD'], [ptr, ['num', 1], ['num', 0]]], ASM_INT); - } - case 'HEAPU8': { - return makeAsmCoercion(['call', ['name', 'SAFE_HEAP_LOAD'], [ptr, ['num', 1], ['num', 1]]], ASM_INT); - } - case 'HEAP16': { - return makeAsmCoercion(['call', ['name', 'SAFE_HEAP_LOAD'], [ptr, ['num', 2], ['num', 0]]], ASM_INT); - } - case 'HEAPU16': { - return makeAsmCoercion(['call', ['name', 'SAFE_HEAP_LOAD'], [ptr, ['num', 2], ['num', 1]]], ASM_INT); - } - case 'HEAP32': { - return makeAsmCoercion(['call', ['name', 'SAFE_HEAP_LOAD'], [ptr, ['num', 4], ['num', 0]]], ASM_INT); - } - case 'HEAPU32': { - // Note that a 32-bit unsigned number should not be changed to a signed one. - return makeSignedAsmCoercion(['call', ['name', 'SAFE_HEAP_LOAD'], [ptr, ['num', 4], ['num', 1]]], ASM_INT, ASM_UNSIGNED); - } - case 'HEAPF32': { - return makeAsmCoercion(['call', ['name', 'SAFE_HEAP_LOAD_D'], [ptr, ['num', 4]]], ASM_DOUBLE); - } - case 'HEAPF64': { - return makeAsmCoercion(['call', ['name', 'SAFE_HEAP_LOAD_D'], [ptr, ['num', 8]]], ASM_DOUBLE); - } - default: throw 'bad heap ' + heap; - } - } else { - assert(target[0] == 'F'); - // function table indexing mask - assert(node[2][0] === 'binary' && node[2][1] === '&'); - node[2][2] = makeAsmCoercion(['call', ['name', 'SAFE_FT_MASK'], [makeAsmCoercion(node[2][2], ASM_INT), makeAsmCoercion(node[2][3], ASM_INT)]], ASM_INT); - } - } - }); - }); -} - -function fixPtrSlim(ptr, heap, shell) { - switch (heap) { - case 'HEAP8': case 'HEAPU8': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 0) { - ptr = ['binary', '|', ptr[2], ['num', 0]]; // smaller - } - break; - } - case 'HEAP16': case 'HEAPU16': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 1) { - ptr = ptr[2]; // skip the shift - } else { - ptr = ['binary', '*', ptr, ['num', 2]]; // was unshifted, convert to absolute address - } - break; - } - case 'HEAP32': case 'HEAPU32': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 2) { - ptr = ptr[2]; // skip the shift - } else { - ptr = ['binary', '*', ptr, ['num', 4]]; // was unshifted, convert to absolute address - } - break; - } - case 'HEAPF32': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 2) { - ptr = ptr[2]; // skip the shift - } else { - ptr = ['binary', '*', ptr, ['num', 4]]; // was unshifted, convert to absolute address - } - break; - } - case 'HEAPF64': { - if (ptr[0] === 'binary' && ptr[1] === '>>' && ptr[3][0] === 'num' && ptr[3][1] === 3) { - ptr = ptr[2]; // skip the shift - } else { - ptr = ['binary', '*', ptr, ['num', 8]]; // was unshifted, convert to absolute address - } - break; - } - default: { - if (!shell) throw 'bad heap ' + heap; - return ptr; // unchanged - } - } - return ptr; -} - -function splitMemory(ast, shell) { - traverse(ast, function(node, type) { - var heap, ptr; - if (type === 'assign') { - if (node[2][0] === 'sub' && node[2][1][0] === 'name') { - heap = node[2][1][1]; - if (parseHeap(heap)) { - if (node[1] !== true) assert(0, 'bad assign, split memory cannot handle ' + JSON.stringify(node) + '= to a HEAP'); - ptr = fixPtrSlim(node[2][2], heap, shell); - var value = node[3]; - switch (heap) { - case 'HEAP8': return ['call', ['name', 'set8'], [ptr, value]]; - case 'HEAP16': return ['call', ['name', 'set16'], [ptr, value]]; - case 'HEAP32': return ['call', ['name', 'set32'], [ptr, value]]; - case 'HEAPU8': return ['call', ['name', 'setU8'], [ptr, value]]; - case 'HEAPU16': return ['call', ['name', 'setU16'], [ptr, value]]; - case 'HEAPU32': return ['call', ['name', 'setU32'], [ptr, value]]; - case 'HEAPF32': return ['call', ['name', 'setF32'], [ptr, value]]; - case 'HEAPF64': return ['call', ['name', 'setF64'], [ptr, value]]; - default: if (!shell) throw 'bad heap ' + heap; - } - } - } - } else if (type === 'sub') { - var target = node[1][1]; - if (target[0] === 'H') { - // heap access - heap = target; - ptr = fixPtrSlim(node[2], heap, shell); - switch (heap) { - case 'HEAP8': return ['call', ['name', 'get8'], [ptr]]; - case 'HEAP16': return ['call', ['name', 'get16'], [ptr]]; - case 'HEAP32': return ['call', ['name', 'get32'], [ptr]]; - case 'HEAPU8': return ['call', ['name', 'getU8'], [ptr]]; - case 'HEAPU16': return ['call', ['name', 'getU16'], [ptr]]; - case 'HEAPU32': return ['call', ['name', 'getU32'], [ptr]]; - case 'HEAPF32': return ['call', ['name', 'getF32'], [ptr]]; - case 'HEAPF64': return ['call', ['name', 'getF64'], [ptr]]; - default: if (!shell) throw 'bad heap ' + heap; - } - } - } - }); - var SPLIT_GETS = set('get8', 'get16', 'get32', 'getU8', 'getU16', 'getU32', 'getF32', 'getF64'); - traverse(ast, function(node, type) { - if (type === 'binary' && node[1] === '|' && node[2][0] === 'call' && node[2][1][0] === 'name' && node[2][1][1] in SPLIT_GETS && node[3][0] === 'num' && node[3][1] === 0) { - return node[2]; - } else if (type === 'unary-prefix' && node[1] === '+' && node[2][0] === 'call' && node[2][1][0] === 'name' && node[2][1][1] in SPLIT_GETS) { - return node[2]; - } - }); -} - -function splitMemoryShell(ast) { - splitMemory(ast, true); -} - -// Ensures that if label exists, it is assigned an initial value (to not assume the asm declaration has an effect, which we normally do not) -function ensureLabelSet(ast) { - assert(asm); - traverseGeneratedFunctions(ast, function(func) { - var asmData = normalizeAsm(func); - if ('label' in asmData.vars) { - var stats = getStatements(func); - for (var i = 0; i < stats.length; i++) { - var node = stats[i]; - if (node[0] === 'stat') node = node[1]; - if (node[0] === 'assign' && node[2][0] === 'name' && node[2][1] === 'label') { - break; // all good - } - if (node[0] === 'label' || (node[0] in CONTROL_FLOW)) { - // we haven't seen an assign, and we hit control flow. add an assign - stats.splice(i, 0, ['stat', ['assign', true, ['name', 'label'], ['num', 0]]]); - break; - } - } - } - denormalizeAsm(func, asmData); - }); -} - -// finds vars that may not be assigned to. misses out on vars that are assigned to in all branches of an if etc. TODO: optimize -function findUninitializedVars(func, asmData) { - var bad = {}; - function definitely(node, uninitialized) { - if (!node) return; - if (node[0] === 'assign' && node[2][0] === 'name') { - var name = node[2][1]; - if (name in uninitialized) { - delete uninitialized[name]; // this one is now ok - } - } else if (node[0] === 'name') { - var name = node[1]; - if (name in uninitialized) { - bad[name] = 1; - delete uninitialized[name]; // this one is now bad, ignore it - } - } - traverseChildrenInExecutionOrder(node, definitely, maybe, uninitialized); - } - function maybe(node, uninitialized) { - uninitialized = copy(uninitialized); // copy it; changes here will not propagate - traverseChildrenInExecutionOrder(node, definitely, maybe, uninitialized); - } - traverseChildrenInExecutionOrder(func, definitely, maybe, copy(asmData.vars)); - return bad; -} - -// emits which functions are directly reachable, except for some that are -// ignored -function findReachable(ast) { - var IGNORED = set(extraInfo.ignored); - var reachable = {}; - traverseGeneratedFunctions(ast, function(func) { - if (func[1] in IGNORED) return; - traverse(func, function(node, type) { - if (type === 'call' && node[1][0] === 'name') { - reachable[node[1][1]] = 1; - } - }); - }); - print('// REACHABLE ' + JSON.stringify(keys(reachable))); -} - -// emits call graph information -function dumpCallGraph(ast) { - traverseGeneratedFunctions(ast, function(func) { - var reachable = {}; - traverse(func, function(node, type) { - if (type === 'call') { - if (node[1][0] === 'name') { - reachable[node[1][1]] = 1; - } else { - // (FUNCTION_TABLE[..])(..) - assert(node[1][0] === 'sub') - assert(node[1][1][0] === 'name'); - reachable[node[1][1][1]] = 1; - } - } - }); - print('// REACHABLE ' + JSON.stringify([func[1], ' => ', keys(reachable)])); - }); -} - -// Last pass utilities - -// Change +5 to DOT$ZERO(5). We then textually change 5 to 5.0 (uglify's ast -// cannot differentiate between 5 and 5.0 directly) -function prepDotZero(ast) { - traverse(ast, function(node, type) { - if (type === 'unary-prefix' && node[1] === '+') { - if (node[2][0] === 'num' || - (node[2][0] === 'unary-prefix' && node[2][1] === '-' && node[2][2][0] === 'num')) { - return ['call', ['name', 'DOT$ZERO'], [node[2]]]; - } - } - }); -} - -function fixDotZero(js) { - return js.replace(/-DOT\$ZERO\(-/g, '- DOT$ZERO(-') // avoid x - (-y.0) turning into x--y.0 when minified - .replace(/DOT\$ZERO\(([-+]?(0x)?[0-9a-f]*\.?[0-9]*([eE][-+]?[0-9]+)?)\)/g, function(m, num) { - if (num.substr(0, 2) === '0x' || num.substr(0, 3) === '-0x') { - var ret = eval(num).toString(); - if (ret.indexOf('.') < 0) return ret + '.0'; - return ret; - } - if (num.indexOf('.') >= 0) return num; - var e = num.indexOf('e'); - if (e < 0) return num + '.0'; - return num.substr(0, e) + '.0' + num.substr(e); - }); -} - -function asmLastOpts(ast) { - var statsStack = []; - traverseGeneratedFunctions(ast, function(fun) { - traverse(fun, function(node, type) { - var stats = getStatements(node); - if (stats) statsStack.push(stats); - if (type in CONDITION_CHECKERS) { - node[1] = simplifyCondition(node[1]); - } - if (type === 'while' && node[1][0] === 'num' && node[1][1] === 1 && node[2][0] === 'block' && node[2].length == 2) { - // This is at the end of the pipeline, we can assume all other optimizations are done, and we modify loops - // into shapes that might confuse other passes - - // while (1) { .. if (..) { break } } ==> do { .. } while(..) - var stats = node[2][1]; - var last = stats[stats.length-1]; - if (last && last[0] === 'if' && !last[3] && last[2][0] === 'block' && last[2][1][0]) { - var lastStats = last[2][1]; - var lastNum = lastStats.length; - var lastLast = lastStats[lastNum-1]; - if (!(lastLast[0] === 'break' && !lastLast[1])) return;// if not a simple break, dangerous - for (var i = 0; i < lastNum; i++) { - if (lastStats[i][0] !== 'stat' && lastStats[i][0] !== 'break') return; // something dangerous - } - // ok, a bunch of statements ending in a break - var abort = false; - var stack = 0; - var breaks = 0; - traverse(stats, function(node, type) { - if (type === 'continue') { - if (stack === 0 || node[1]) { // abort if labeled (we do not analyze labels here yet), or a continue directly on us - abort = true; - return true; - } - } else if (type === 'break') { - if (stack === 0 || node[1]) { // relevant if labeled (we do not analyze labels here yet), or a break directly on us - breaks++; - } - } else if (type in LOOP) { - stack++; - } - }, function(node, type) { - if (type in LOOP) { - stack--; - } - }); - if (abort) return; - assert(breaks > 0); - if (lastStats.length > 1 && breaks !== 1) return; // if we have code aside from the break, we can only move it out if there is just one break - // start to optimize - if (lastStats.length > 1) { - var parent = statsStack[statsStack.length-1]; - var me = parent.indexOf(node); - if (me < 0) return; // not always directly on a stats, could be in a label for example - parent.splice.apply(parent, [me+1, 0].concat(lastStats.slice(0, lastStats.length-1))); - } - var conditionToBreak = last[1]; - stats.pop(); - node[0] = 'do'; - node[1] = simplifyNotCompsDirect(['unary-prefix', '!', conditionToBreak]); - return node; - } - } else if (type === 'binary') { - if (node[1] === '&') { - if (node[3][0] === 'unary-prefix' && node[3][1] === '-' && node[3][2][0] === 'num' && node[3][2][1] === 1) { - // Change &-1 into |0, at this point the hint is no longer needed - node[1] = '|'; - node[3] = node[3][2]; - node[3][1] = 0; - } - } else if (node[1] === '-' && node[3][0] === 'unary-prefix') { - // avoid X - (-Y) because some minifiers buggily emit X--Y which is invalid as -- can be a unary. Transform to - // X + Y - if (node[3][1] === '-') { // integer - node[1] = '+'; - node[3] = node[3][2]; - } else if (node[3][1] === '+') { // float - if (node[3][2][0] === 'unary-prefix' && node[3][2][1] === '-') { - node[1] = '+'; - node[3][2] = node[3][2][2]; - } - } - } - } - }, function(node, type) { - var stats = getStatements(node); - if (stats) statsStack.pop(); - }); - if (!debug) { // dangerous in debug mode, as without braces things can end up on the same line, together with comments - // convert { singleton } into singleton - traverse(fun, function(node, type) { - if (type === 'block' && node[1] && node[1].length === 1) { - return node[1][0]; - } - }); - } - }); -} - -function removeFuncs(ast) { - assert(ast[0] === 'toplevel'); - var keep = set(extraInfo.keep); - ast[1] = ast[1].filter(function(node) { - assert(node[0] === 'defun'); - return node[1] in keep; }); } @@ -5279,29 +654,8 @@ var passes = { // passes dumpAst: dumpAst, dumpSrc: dumpSrc, - removeAssignsToUndefined: removeAssignsToUndefined, - //removeUnneededLabelSettings: removeUnneededLabelSettings, - simplifyExpressions: simplifyExpressions, - localCSE: localCSE, - safeLabelSetting: safeLabelSetting, - simplifyIfs: simplifyIfs, - hoistMultiples: hoistMultiples, - loopOptimizer: loopOptimizer, - registerize: registerize, - registerizeHarder: registerizeHarder, - eliminate: eliminate, - eliminateMemSafe: eliminateMemSafe, minifyGlobals: minifyGlobals, minifyLocals: minifyLocals, - relocate: relocate, - safeHeap: safeHeap, - splitMemory: splitMemory, - splitMemoryShell: splitMemoryShell, - ensureLabelSet: ensureLabelSet, - findReachable: findReachable, - dumpCallGraph: dumpCallGraph, - asmLastOpts: asmLastOpts, - removeFuncs: removeFuncs, noop: function() {}, // flags